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

Project1

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

[已经过期] 随机属性脚本发生了错误

[复制链接]

Lv2.观梦者

会吐槽的画师

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

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

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

x
我用的是一个装备随机属性的脚本,但是我不知道在装备里设置什么参数,导致角色只要穿上防具就会出错。
  1. #==============================================================================
  2. # 复杂装备系统之随机属性 by 沉影不器
  3. # protosssonny修改版
  4. #------------------------------------------------------------------------------
  5. # 说明: 让装备类似暗黑那样附加随机属性,目前有17种属性元素可供组合,允许按
  6. #       能力百分比加成.
  7. #
  8. #       附加属性的名称允许多个(按能力从小大到排列),用英文逗号隔开,自动按
  9. #       附加能力大小选择词缀
  10. #
  11. #       极品爆率不影响物品掉落机率,而是指掉落的物品带附加属性的机率
  12. #
  13. # 获得随机属性装备的方法:
  14. #       事件脚本中输入 get_weapon(母版武器id, 数量, 附加属性1, 附加属性2...)
  15. #       或者直接指定附加属性数 get_weapon(母版武器id, 数量, 附加属性数)
  16. #       将随机生成指定附加属性数的装备
  17. #       获得防具方法是 get_armor() 参数含义同上
  18. #
  19. # 获得普通装备的方法:
  20. #       事件脚本中输入 get_weapon(母版武器id, 数量)
  21. #       获得防具方法是 get_armor() 参数含义同上
  22. #==============================================================================
  23. # 参数设定
  24. #==============================================================================
  25. module Game_Equip
  26.   ## 最大附加属性数
  27.   GiftMax = 6
  28.   ## 附加属性影响价格基数
  29.   GiftPrice = 10
  30.   ## 极品爆率最低值和最高值(0到100)
  31.   Equip_Chance = [5, 75]  
  32.   
  33.   ## 附加属性各参数:
  34.   ##     name    添加到装备前的修饰词
  35.   ##     max     该属性最大值
  36.   ##     weight  权重(最大值的权重,用于计算价值,用于计算颜色也行)
  37.   ##     percent 是否按百分比计算
  38.   Gift = Struct.new(:name, :max, :weight, :percent)
  39.   Gifts = [
  40.      # 攻击
  41.      Gift.new("", 120, 40, false),
  42.      Gift.new("", 30, 40, true),
  43.      # 防御
  44.      Gift.new("", 30, 40, false),
  45.      Gift.new("", 30, 40, true),
  46.      # 精神
  47.      Gift.new("", 120, 40, false),
  48.      Gift.new("", 30, 40, true),
  49.      # 敏捷
  50.      Gift.new("", 120, 40, false),
  51.      Gift.new("", 30, 40, true),
  52.      # hp
  53.      Gift.new("", 240, 40, false),
  54.      Gift.new("", 30, 40, true),
  55.      # mp
  56.      Gift.new("", 240, 40, false),
  57.      Gift.new("", 30, 40, true),
  58.      # 命中
  59.      Gift.new("", 15, 40,false),
  60.      # 闪避
  61.      Gift.new("", 15, 40, false),
  62.      # 暴击
  63.      Gift.new("", 15, 40, false),
  64.      # 所有主要属性,最多+20%
  65.      Gift.new("", 30, 40, true),
  66.      # 抗魔性  ###(待定)
  67.      Gift.new("", 30, 40, true)
  68.   ]
  69. end


  70. #==============================================================================
  71. # ■ Game_Equip 自定义装备模块
  72. #==============================================================================
  73. module Game_Equip
  74.   #--------------------------------------------------------------------------
  75.   # ● 物品(装备)重生
  76.   #    item:  物品
  77.   #    *gift: 附加属性(留空表示无属性,数字表示指定数量随机属性)
  78.   #--------------------------------------------------------------------------
  79.   def self.reini(item, *gift)
  80.     return if item.nil?
  81.     result = item.clone
  82.     gifts = *gift
  83.     gifts.flatten! if gifts.is_a? Array
  84.     case result
  85.     when RPG::Weapon
  86.       result.inidur
  87.       result.base_id = result.id
  88.       result.id = $data_weapons.size
  89.     when RPG::Armor
  90.       result.inidur
  91.       result.base_id = result.id
  92.       result.id = $data_armors.size
  93.     end
  94.     ## 附加属性为空或指定为(0)时,直接返回母版
  95.     return self.result(result) if gifts.nil? or gifts == 0
  96.     ## 指定附加属性数量时
  97.     if gifts.is_a? Integer
  98.       ## 控制数量
  99.       num = [gifts, GiftMax].min
  100.       gifts = []
  101.       ## 随机生成指定数量的附加属性
  102.       rd = []
  103.       rd_1 = []
  104.       if item.is_a?(RPG::Weapon)
  105.         rd_1 = different_rand(PA::WEAPON_E.size - 1, num)
  106.         for i in 0...num
  107.           rd << PA::WEAPON_E[rd_1[i]]
  108.         end
  109.       end  
  110.       if item.is_a?(RPG::Armor)
  111.         case item.kind
  112.         when 0
  113.           rd_1 = different_rand(PA::SHIELD_E.size - 1, num)
  114.           for i in 0...num
  115.             rd << PA::SHIELD_E[rd_1[i]]
  116.           end
  117.         when 1
  118.           rd_1 = different_rand(PA::HELMET_E.size - 1, num)
  119.           for i in 0...num
  120.             rd << PA::HELMET_E[rd_1[i]]
  121.           end
  122.         when 2
  123.           rd_1 = different_rand(PA::CLOTHE_E.size - 1, num)
  124.           for i in 0...num
  125.             rd << PA::CLOTHE_E[rd_1[i]]
  126.           end
  127.         end  
  128.       end  
  129.       rd.each{|n| gifts.push Game_Gift.new(n)}
  130.     end
  131.     gifts = [gifts].flatten
  132.     return self.result(result) if gifts.empty?
  133.     ## 处理数据
  134.     result.gifts = gifts
  135.     name = ""
  136.     price = 0
  137.     name_num = 0
  138.     name_type = ["良好","上乘","精致","卓越","稀有","传颂"] if item.is_a?(RPG::Weapon)
  139.     name_type = ["良好","上乘","精致","卓越","稀有","传颂"] if item.is_a?(RPG::Armor)
  140.     for gift in gifts
  141.       name_num += 1
  142.       price += (result.price/2)
  143.     end
  144.     ## 设定名称
  145.     if item.id == PA::CRYSTAL and item.is_a?(RPG::Armor)
  146.       if gifts.size > 0
  147.         result.name = "属性水晶[带属性]"
  148.         result.text_color = 12
  149.       end  
  150.     else
  151.       name = name_type[name_num - 1]
  152.       result.name =  name + "·" + result.name
  153.       ## 设定价格
  154.       result.price += price.round
  155.       ## 设定颜色
  156.       case gifts.size
  157.       when 1
  158.         result.text_color = 12
  159.       when 2
  160.         result.text_color = 29
  161.       when 3
  162.         result.text_color = 17
  163.       when 4
  164.         result.text_color = 20
  165.       when 5
  166.         result.text_color = 26
  167.       when 6
  168.         result.text_color = 31
  169.       end
  170.     end
  171.     return self.result(result)
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ● 返回结果
  175.   #    item: 物品
  176.   #--------------------------------------------------------------------------
  177.   def self.result(item)
  178.     case item
  179.     when RPG::Item
  180.       
  181.     when RPG::Weapon
  182.       item.id = $data_weapons.size
  183.       $data_weapons << item
  184.     when RPG::Armor
  185.       item.id = $data_armors.size
  186.       $data_armors << item
  187.     end
  188.     return item
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 物品(装备)重生
  192.   #    item_id: 物品id
  193.   #    type:    类型
  194.   #    *gift:   附加属性(留空表示无属性,数字表示指定数量随机属性)
  195.   #--------------------------------------------------------------------------
  196.   def self.reini_id(item_id, type, *gift)
  197.     ## 排除装备id为零的情况
  198.     return 0 if item_id == 0
  199.     case type
  200.     when 0
  201.       item = $base_weapons[item_id]
  202.       item.base_id = item_id
  203.     when 1
  204.       item = $base_armors[item_id]
  205.       item.base_id = item_id
  206.     end
  207.     return self.reini(item, *gift).id
  208.   end
  209. end

  210. #==============================================================================
  211. # ■ Game_Gift 装备附加能力
  212. #==============================================================================
  213. class Game_Gift
  214.   include Game_Equip
  215.   #--------------------------------------------------------------------------
  216.   # ● 读取口
  217.   #--------------------------------------------------------------------------
  218.   attr_reader   :type
  219.   attr_reader   :value
  220.   attr_reader   :name
  221.   #--------------------------------------------------------------------------
  222.   # ● 初始化
  223.   #--------------------------------------------------------------------------
  224.   def initialize(type = nil, value = nil)
  225.     get_type(type)
  226.     get_value(value)
  227.     get_name
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 获取属性
  231.   #--------------------------------------------------------------------------
  232.   def get_type(type)
  233.     unless type.nil? or type > Gifts.size or type < 0
  234.       @type = type
  235.     else
  236.       @type = rand(Gifts.size - 1)
  237.     end
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● 获取品质值
  241.   #--------------------------------------------------------------------------
  242.   def get_value(value)
  243.     unless value.nil? or value.abs > max
  244.       @value = value
  245.     else
  246.       a = $game_variables[3]+rand(1 + $game_variables[4])
  247.       @value = max * a / 100
  248.       @value = 1 if @value == 0
  249.       @value = max if @value >= max
  250.     end  
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● 获取名称
  254.   #--------------------------------------------------------------------------
  255.   def get_name
  256.     names = Gifts[@type].name.split(/,/)
  257.     n = (@value.abs-1)/(max.to_f/names.size)
  258.     @name = names[n.truncate]
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● 获取最大值
  262.   #--------------------------------------------------------------------------
  263.   def max
  264.     return Gifts[@type].max
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● 获取权重
  268.   #--------------------------------------------------------------------------
  269.   def weight
  270.     return @value > 0 ? @value / max.to_f * Gifts[@type].weight : 0
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● 获取是否百分比
  274.   #--------------------------------------------------------------------------
  275.   def percent
  276.     return Gifts[@type].percent
  277.   end
  278.   
  279.   #--------------------------------------------------------------------------
  280.   # ● 攻击力
  281.   #--------------------------------------------------------------------------
  282.   def atk(actor_id)
  283.     # 无角色信息时返回
  284.     return 0 unless actor_id
  285.     # 数据类型不符时返回
  286.     return 0 if @type != 0 and @type != 1
  287.     if percent
  288.       return $game_actors[actor_id].self_atk * @value / 100
  289.     else
  290.       return @value
  291.     end
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● 防御力
  295.   #--------------------------------------------------------------------------
  296.   def def(actor_id)
  297.     # 无角色信息时返回
  298.     return 0 unless actor_id
  299.     # 数据类型不符时返回
  300.     return 0 if @type != 2 and @type != 3
  301.     if percent
  302.       return $game_actors[actor_id].self_def * @value / 100
  303.     else
  304.       return @value
  305.     end
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ● 精神
  309.   #--------------------------------------------------------------------------
  310.   def spi(actor_id)
  311.     # 无角色信息时返回
  312.     return 0 unless actor_id
  313.     # 数据类型不符时返回
  314.     return 0 if @type != 4 and @type != 5
  315.     if percent
  316.       return $game_actors[actor_id].self_spi * @value / 100
  317.     else
  318.       return @value
  319.     end
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 敏捷
  323.   #--------------------------------------------------------------------------
  324.   def agi(actor_id)
  325.     # 无角色信息时返回
  326.     return 0 unless actor_id
  327.     # 数据类型不符时返回
  328.     return 0 if @type != 6 and @type != 7
  329.     if percent
  330.       return $game_actors[actor_id].self_agi * @value / 100
  331.     else
  332.       return @value
  333.     end
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ● maxhp
  337.   #--------------------------------------------------------------------------
  338.   def maxhp(actor_id)
  339.     # 无角色信息时返回
  340.     return 0 unless actor_id
  341.     # 数据类型不符时返回
  342.     return 0 if @type != 8 and @type != 9
  343.     if percent
  344.       return $game_actors[actor_id].self_maxhp * @value / 100
  345.     else
  346.       return @value
  347.     end
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● maxmp
  351.   #--------------------------------------------------------------------------
  352.   def maxmp(actor_id)
  353.     # 无角色信息时返回
  354.     return 0 unless actor_id
  355.     # 数据类型不符时返回
  356.     return 0 if @type != 10 and @type != 11
  357.     if percent
  358.       return $game_actors[actor_id].self_maxmp * @value / 100
  359.     else
  360.       return @value
  361.     end
  362.   end
  363.   #--------------------------------------------------------------------------
  364.   # ● 命中
  365.   #--------------------------------------------------------------------------
  366.   def hit
  367.     # 数据类型不符时返回
  368.     return 0 if @type != 12
  369.     return @value
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● 闪避
  373.   #--------------------------------------------------------------------------
  374.   def eva
  375.     # 数据类型不符时返回
  376.     return 0 if @type != 13
  377.     return @value
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 暴击
  381.   #--------------------------------------------------------------------------
  382.   def cri
  383.     # 数据类型不符时返回
  384.     return 0 if @type != 14
  385.     return @value
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ● 所有主要属性
  389.   #--------------------------------------------------------------------------
  390.   def all_atribute(actor_id)
  391.     # 无角色信息时返回
  392.     return 0 unless actor_id
  393.     # 数据类型不符时返回
  394.     return 0 if @type != 15
  395.     return @value
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ● 抗魔性
  399.   #--------------------------------------------------------------------------
  400.   def mdf
  401.     # 数据类型不符时返回
  402.     return 0 if @type != 16
  403.     return @value
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ● 经验(百分比)(舍弃本属性)
  407.   #--------------------------------------------------------------------------
  408.   def exp
  409.     # 数据类型不符时返回
  410.     return 0 #if @type != 15
  411.     #return @value
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● 高级装备暴率(百分比)(舍弃本属性)
  415.   #--------------------------------------------------------------------------
  416.   def equip_chance
  417.     # 数据类型不符时返回
  418.     return 0 #if @type != 16
  419.     #return @value
  420.   end
  421. end
  422. #==============================================================================
  423. # ■ RPG::BaseItem
  424. #==============================================================================
  425. module RPG
  426.   class BaseItem
  427.     ## 颜色
  428.     attr_accessor :text_color
  429.   end
  430. end
  431. #==============================================================================
  432. # ■ RPG::Weapon
  433. #==============================================================================
  434. module RPG
  435.   class Weapon < BaseItem
  436.     #------------------------------------------------------------------------
  437.     # 附加属性
  438.     #------------------------------------------------------------------------
  439.     attr_accessor :base_id
  440.     attr_accessor :actor_id
  441.     attr_accessor :gifts
  442.     #------------------------------------------------------------------------
  443.     # 装备基本属性定义
  444.     #------------------------------------------------------------------------
  445.     def base_atk
  446.       return @atk
  447.     end
  448.     def base_def
  449.       return @def
  450.     end
  451.     def base_spi
  452.       return @spi
  453.     end
  454.     def base_agi
  455.       return @agi
  456.     end
  457.     #------------------------------------------------------------------------
  458.     # 攻击力(合)
  459.     #------------------------------------------------------------------------
  460.     def atk
  461.       n = @atk
  462.       [url=home.php?mod=space&uid=322055]@gifts[/url] = [] if @gifts.nil?
  463.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  464.       if @dur > 0
  465.         for g in @gifts.compact do n += g.atk(actor_id) end
  466.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  467.       end
  468.       return n
  469.     end
  470.     #------------------------------------------------------------------------
  471.     # 防御力(合)
  472.     #------------------------------------------------------------------------
  473.     def def
  474.       n = @def
  475.       @gifts = [] if @gifts.nil?
  476.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  477.       if @dur > 0
  478.         for g in @gifts.compact do n += g.def(actor_id) end
  479.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  480.       end  
  481.       return n
  482.     end
  483.     #------------------------------------------------------------------------
  484.     # 魔力(合)
  485.     #------------------------------------------------------------------------
  486.     def spi
  487.       n = @spi
  488.       @gifts = [] if @gifts.nil?
  489.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  490.       if @dur > 0
  491.         for g in @gifts.compact do n += g.spi(actor_id) end
  492.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  493.       end   
  494.       return n
  495.     end
  496.     #------------------------------------------------------------------------
  497.     # 敏捷(合)
  498.     #------------------------------------------------------------------------
  499.     def agi
  500.       n = @agi
  501.       @gifts = [] if @gifts.nil?
  502.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  503.       if @dur > 0
  504.         for g in @gifts.compact do n += g.agi(actor_id) end
  505.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  506.       end   
  507.       return n
  508.     end
  509.     #------------------------------------------------------------------------
  510.     # 最大hp(合)
  511.     #------------------------------------------------------------------------
  512.     def maxhp
  513.       n = 0
  514.       @gifts = [] if @gifts.nil?
  515.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  516.       if @dur > 0
  517.         for g in @gifts.compact do n += g.maxhp(actor_id) end
  518.       end  
  519.       return n
  520.     end
  521.     #------------------------------------------------------------------------
  522.     # 最大mp(合)
  523.     #------------------------------------------------------------------------
  524.     def maxmp
  525.       n = 0
  526.       @gifts = [] if @gifts.nil?
  527.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  528.       if @dur > 0
  529.         for g in @gifts.compact do n += g.maxmp(actor_id) end
  530.       end   
  531.       return n
  532.     end
  533.     #------------------------------------------------------------------------
  534.     # 命中率(合)
  535.     #------------------------------------------------------------------------
  536.     def hit
  537.       n = @hit
  538.       @gifts = [] if @gifts.nil?
  539.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  540.       if @dur > 0
  541.         for g in @gifts.compact do n += g.hit end
  542.         n = 100 if n > 100
  543.       end  
  544.       return n
  545.     end
  546.     #------------------------------------------------------------------------
  547.     # 闪避率(合)
  548.     #------------------------------------------------------------------------
  549.     def eva
  550.       n = 0
  551.       @gifts = [] if @gifts.nil?
  552.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  553.       if @dur > 0
  554.         for g in @gifts.compact do n += g.eva end
  555.         n = 100 if n > 100
  556.       end
  557.       return n
  558.     end
  559.     #------------------------------------------------------------------------
  560.     # 暴击率(合)
  561.     #------------------------------------------------------------------------
  562.     def cri
  563.       n = 0
  564.       @gifts = [] if @gifts.nil?
  565.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  566.       if @dur > 0
  567.         for g in @gifts.compact do n += g.cri end
  568.         n = 100 if n > 100
  569.       end  
  570.       return n
  571.     end
  572.     #--------------------------------------------------------------------------
  573.     # ● 经验(百分比)(已舍弃不用)
  574.     #--------------------------------------------------------------------------
  575.     def exp
  576.       n = 0
  577.       @gifts = [] if @gifts.nil?
  578.       for g in @gifts.compact do n += g.exp end
  579.       return n
  580.     end
  581.     #--------------------------------------------------------------------------
  582.     # ● 高级装备暴率(百分比)(已舍弃不用)
  583.     #--------------------------------------------------------------------------
  584.     def equip_chance
  585.       n = 0
  586.       @gifts = [] if @gifts.nil?
  587.       for g in @gifts.compact do n += g.equip_chance end
  588.       return n
  589.     end
  590.   end
  591. end
  592. #==============================================================================
  593. # ■ RPG::Armor
  594. #==============================================================================
  595. module RPG
  596.   class Armor < BaseItem
  597.     #------------------------------------------------------------------------
  598.     # 附加属性
  599.     #------------------------------------------------------------------------
  600.     attr_accessor :base_id
  601.     attr_accessor :actor_id
  602.     attr_accessor :gifts
  603.     #------------------------------------------------------------------------
  604.     # 装备基本属性定义
  605.     #------------------------------------------------------------------------
  606.     def base_atk
  607.       return @atk
  608.     end
  609.     def base_def
  610.       return @def
  611.     end
  612.     def base_spi
  613.       return @spi
  614.     end
  615.     def base_agi
  616.       return @agi
  617.     end
  618.     #------------------------------------------------------------------------
  619.     # 攻击力(合)
  620.     #------------------------------------------------------------------------
  621.     def atk
  622.       n = @atk
  623.       @gifts = [] if @gifts.nil?
  624.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  625.       if @dur > 0
  626.         for g in @gifts.compact do n += g.atk(actor_id) end
  627.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  628.       end   
  629.       return n
  630.     end
  631.     #------------------------------------------------------------------------
  632.     # 防御力(合)
  633.     #------------------------------------------------------------------------
  634.     def def
  635.       n = @def
  636.       @gifts = [] if @gifts.nil?
  637.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  638.       if @dur > 0
  639.         for g in @gifts.compact do n += g.def(actor_id) end
  640.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  641.       end
  642.       return n
  643.     end
  644.     #------------------------------------------------------------------------
  645.     # 魔力(合)
  646.     #------------------------------------------------------------------------
  647.     def spi
  648.       n = @spi
  649.       @gifts = [] if @gifts.nil?
  650.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  651.       if @dur > 0
  652.         for g in @gifts.compact do n += g.spi(actor_id) end
  653.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  654.       end
  655.       return n
  656.     end
  657.     #------------------------------------------------------------------------
  658.     # 敏捷(合)
  659.     #------------------------------------------------------------------------
  660.     def agi
  661.       n = @agi
  662.       @gifts = [] if @gifts.nil?
  663.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  664.       if @dur > 0
  665.         for g in @gifts.compact do n += g.agi(actor_id) end
  666.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  667.       end
  668.       return n
  669.     end
  670.     #------------------------------------------------------------------------
  671.     # 最大hp(合)
  672.     #------------------------------------------------------------------------
  673.     def maxhp
  674.       n = 0
  675.       @gifts = [] if @gifts.nil?
  676.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  677.       if @dur > 0
  678.         for g in @gifts.compact do n += g.maxhp(actor_id) end
  679.       end   
  680.       return n
  681.     end
  682.     #------------------------------------------------------------------------
  683.     # 最大mp(合)
  684.     #------------------------------------------------------------------------
  685.     def maxmp
  686.       n = 0
  687.       @gifts = [] if @gifts.nil?
  688.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  689.       if @dur > 0
  690.         for g in @gifts.compact do n += g.maxmp(actor_id) end
  691.       end   
  692.       return n
  693.     end
  694.     #------------------------------------------------------------------------
  695.     # 命中率(合)
  696.     #------------------------------------------------------------------------
  697.     def hit
  698.       n = 0
  699.       @gifts = [] if @gifts.nil?
  700.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  701.       if @dur > 0
  702.         for g in @gifts.compact do n += g.hit end
  703.       end
  704.       n = 100 if n > 100
  705.       return n
  706.     end
  707.     #------------------------------------------------------------------------
  708.     # 闪避率(合)
  709.     #------------------------------------------------------------------------
  710.     def eva
  711.       n = @eva
  712.       @gifts = [] if @gifts.nil?
  713.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  714.       if @dur > 0
  715.         for g in @gifts.compact do n += g.eva end
  716.       end  
  717.       n = 100 if n > 100
  718.       return n
  719.     end
  720.     #------------------------------------------------------------------------
  721.     # 暴击率(合)
  722.     #------------------------------------------------------------------------
  723.     def cri
  724.       n = 0
  725.       @gifts = [] if @gifts.nil?
  726.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  727.       if @dur > 0
  728.         for g in @gifts.compact do n += g.cri end
  729.       end
  730.       n = 100 if n > 100
  731.       return n
  732.     end
  733.     #------------------------------------------------------------------------
  734.     # 抗魔性(合)
  735.     #------------------------------------------------------------------------
  736.     def mdf
  737.       n = 0
  738.       @gifts = [] if @gifts.nil?
  739.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  740.       if @dur > 0
  741.         for g in @gifts.compact do n += g.mdf end
  742.       end  
  743.       return n
  744.     end
  745.     #--------------------------------------------------------------------------
  746.     # ● 经验(百分比)(已舍弃不用)
  747.     #--------------------------------------------------------------------------
  748.     def exp
  749.       n = 0
  750.       @gifts = [] if @gifts.nil?
  751.       for g in @gifts.compact do n += g.exp end
  752.       return n
  753.     end
  754.     #--------------------------------------------------------------------------
  755.     # ● 高级装备暴率(百分比)(已舍弃不用)
  756.     #--------------------------------------------------------------------------
  757.     def equip_chance
  758.       n = 0
  759.       @gifts = [] if @gifts.nil?
  760.       for g in @gifts.compact do n += g.equip_chance end
  761.       return n
  762.     end
  763.   end
  764. end
  765. #==============================================================================
  766. # ■ Game_Actor
  767. #==============================================================================
  768. class Game_Actor < Game_Battler
  769.   #--------------------------------------------------------------------------
  770.   # ● 基本 MaxHP の取得
  771.   #--------------------------------------------------------------------------
  772.   def base_maxhp
  773.     n = actor.parameters[0, @level]
  774.     for item in equips.compact do n += item.maxhp if item.dur > 0 end
  775.     return n
  776.   end
  777.   #--------------------------------------------------------------------------
  778.   # ● 获取基本 MaxMP
  779.   #--------------------------------------------------------------------------
  780.   def base_maxmp
  781.     n = actor.parameters[1, @level]
  782.     for item in equips.compact do n += item.maxmp if item.dur > 0 end  
  783.     return n
  784.   end
  785.   #--------------------------------------------------------------------------
  786.   # ● 获取自身 MaxHP
  787.   #--------------------------------------------------------------------------
  788.   def self_maxhp
  789.     return actor.parameters[0, @level]
  790.   end
  791.   #--------------------------------------------------------------------------
  792.   # ● 获取自身 MaxMP
  793.   #--------------------------------------------------------------------------
  794.   def self_maxmp
  795.     return actor.parameters[1, @level]
  796.   end
  797.   #--------------------------------------------------------------------------
  798.   # ● 获取自身攻击力
  799.   #--------------------------------------------------------------------------
  800.   def self_atk
  801.     return actor.parameters[2, @level]
  802.   end
  803.   #--------------------------------------------------------------------------
  804.   # ● 获取自身防御力
  805.   #--------------------------------------------------------------------------
  806.   def self_def
  807.     return actor.parameters[3, @level]
  808.   end
  809.   #--------------------------------------------------------------------------
  810.   # ● 获取自身精神力
  811.   #--------------------------------------------------------------------------
  812.   def self_spi
  813.     return actor.parameters[4, @level]
  814.   end
  815.   #--------------------------------------------------------------------------
  816.   # ● 获取自身敏捷性
  817.   #--------------------------------------------------------------------------
  818.   def self_agi
  819.     return actor.parameters[5, @level]
  820.   end
  821.   #--------------------------------------------------------------------------
  822.   # ● 获取命中率
  823.   #--------------------------------------------------------------------------
  824.   def hit
  825.     n = 80
  826.     for e in equips.compact do n += e.hit if e.dur > 0 end
  827.     n = 100 if n > 100
  828.     return n
  829.   end
  830.   #--------------------------------------------------------------------------
  831.   # ● 获取回避率
  832.   #--------------------------------------------------------------------------
  833.   def eva
  834.     n = 5
  835.     for e in equips.compact do n += e.eva if e.dur > 0 end
  836.     n = 100 if n > 100
  837.     return n
  838.   end
  839.   #--------------------------------------------------------------------------
  840.   # ● 获取会心一击概率
  841.   #--------------------------------------------------------------------------
  842.   def cri
  843.     n = 4
  844.     n += 4 if actor.critical_bonus
  845.     for e in equips.compact do n += e.cri  if e.dur > 0 end
  846.     n = 100 if n > 100
  847.     return n
  848.   end
  849.   #--------------------------------------------------------------------------
  850.   # ● 获取抗魔性(等于(魔力+防御)的20分之1)
  851.   #--------------------------------------------------------------------------
  852.   def mdf
  853.     mdf = (self.spi + self.def) / 20
  854.     for e in equips.compact do mdf += equip.mdf if e.dur > 0 end
  855.     return mdf
  856.   end
  857.   #--------------------------------------------------------------------------
  858.   # ● 获取更多经验值(已舍弃不用)
  859.   #--------------------------------------------------------------------------
  860.   def exp_added
  861.     exp = 100
  862.     for equip in equips.compact
  863.       exp += equip.exp
  864.     end
  865.     return exp
  866.   end
  867.   #--------------------------------------------------------------------------
  868.   # ● 获取高级物品暴率(已舍弃不用)
  869.   #--------------------------------------------------------------------------
  870.   def equip_chance
  871.     equip_chance = 0
  872.     for equip in equips.compact
  873.       equip_chance += equip.equip_chance
  874.     end
  875.     return equip_chance
  876.   end
  877.   #--------------------------------------------------------------------------
  878.   # ● 获得经验值 (考虑到附加经验值)(舍弃不用)
  879.   #     exp  : 经验值增加量
  880.   #     show : 显示升级标志
  881.   #--------------------------------------------------------------------------
  882. #~   def gain_exp(exp, show)
  883. #~     change_exp([url=home.php?mod=space&uid=13302]@exp[/url] + exp * exp_added, show)
  884. #~   end
  885. end
  886. #==============================================================================
  887. # ■ Game_Actor
  888. #==============================================================================
  889. class Game_Actor < Game_Battler
  890.   #--------------------------------------------------------------------------
  891.   # ● 初始化对象
  892.   #     actor_id : 角色 ID
  893.   #--------------------------------------------------------------------------
  894.   def initialize(actor_id)
  895.     super()
  896.     setup(actor_id)
  897.     @last_skill_id = 0
  898.   end
  899.   #--------------------------------------------------------------------------
  900.   # ● 设置
  901.   #     actor_id : 角色 ID
  902.   #--------------------------------------------------------------------------
  903.   def setup(actor_id)
  904.     actor = $data_actors[actor_id]
  905.     @actor_id = actor_id
  906.     @name = actor.name
  907.     @character_name = actor.character_name
  908.     @character_index = actor.character_index
  909.     @face_name = actor.face_name
  910.     @face_index = actor.face_index
  911.     @class_id = actor.class_id
  912.     @weapon_id = actor.weapon_id
  913.     @armor1_id = actor.armor1_id
  914.     @armor2_id = actor.armor2_id
  915.     @armor3_id = actor.armor3_id
  916.     @armor4_id = actor.armor4_id
  917.     [url=home.php?mod=space&uid=22147]@level[/url] = actor.initial_level
  918.     @exp_list = Array.new(101)
  919.     make_exp_list
  920.     @exp = @exp_list[@level]
  921.     @skills = []
  922.     for i in self.class.learnings
  923.       learn_skill(i.skill_id) if i.level <= @level
  924.     end
  925.     clear_extra_values
  926.     recover_all
  927.     ## 生成新装备id
  928.     reset_equip_id
  929.   end
  930.   #--------------------------------------------------------------------------
  931.   # ● 装备重设
  932.   #--------------------------------------------------------------------------
  933.   def reset_equip_id
  934.     @weapon_id = Game_Equip.reini_id(@weapon_id, 0)
  935.     @armor1_id = Game_Equip.reini_id(@armor1_id, two_hands_legal? ? 0 : 1)
  936.     @armor2_id = Game_Equip.reini_id(@armor2_id, 1)
  937.     @armor3_id = Game_Equip.reini_id(@armor3_id, 1)
  938.     @armor4_id = Game_Equip.reini_id(@armor4_id, 1)
  939.   end
  940.   #--------------------------------------------------------------------------
  941.   # ● 判断是否可以装备
  942.   #     item : 物品
  943.   #     base : 是否读取母版数据
  944.   #--------------------------------------------------------------------------
  945.   def equippable?(item, base = true)
  946.     return false if item.nil?
  947.     return false if self.level < item.read_note('装备等级').to_i
  948.     id = base ? item.base_id : item.id
  949.     if item.is_a?(RPG::Weapon)
  950.       return self.class.weapon_set.include?(id)
  951.     elsif item.is_a?(RPG::Armor)
  952.       return false if two_swords_style and item.kind == 0
  953.       return self.class.armor_set.include?(id)
  954.     end
  955.     return false
  956.   end
  957.   #--------------------------------------------------------------------------
  958.   # ● 更改装备 (指定对象)
  959.   #     equip_type : 装备部位 (0..4)
  960.   #     item       : 武器 or 防具 (nil 为解除装备)
  961.   #     test       : 测试标志 (战斗测试、以及装备画面的临时装备)
  962.   #--------------------------------------------------------------------------
  963.   def change_equip(equip_type, item, test = false)
  964.     last_item = equips[equip_type]
  965.     unless test
  966.       return if $game_party.item_number(item) == 0 if item != nil
  967.       $game_party.gain_item(last_item, 1)
  968.       $game_party.lose_item(item, 1)
  969.       last_item.actor_id = nil unless last_item.nil?
  970.     end
  971.     item_id = item == nil ? 0 : item.id
  972.     case equip_type
  973.     when 0  # 武器
  974.       @weapon_id = item_id
  975.       unless two_hands_legal?             # 违反双手拿取的情况下
  976.         change_equip(1, nil, test)        # 解除反手的装备
  977.       end
  978.     when 1  # 盾
  979.       @armor1_id = item_id
  980.       unless two_hands_legal?             # 违反双手拿取的情况下
  981.         change_equip(0, nil, test)        # 解除反手的装备
  982.       end
  983.     when 2  # 头
  984.       @armor2_id = item_id
  985.     when 3  # 身体
  986.       @armor3_id = item_id
  987.     when 4  # 装饰品
  988.       @armor4_id = item_id
  989.     end
  990.     item.actor_id = self.id unless item.nil?
  991.   end
  992. end
  993. #==============================================================================
  994. # ■ Game_Party
  995. #==============================================================================
  996. class Game_Party < Game_Unit
  997.   #--------------------------------------------------------------------------
  998.   # ● 判断持有的空属性的武器
  999.   #     item          : 物品
  1000.   #--------------------------------------------------------------------------
  1001.   def has_weapon_no_gifts?(item)
  1002.     for i in items
  1003.       if i.is_a?(RPG::Weapon)
  1004.         if i.gifts == nil or i.gifts == []
  1005.           return true if i.base_id == item.id
  1006.         end  
  1007.       end
  1008.     end
  1009.     return false
  1010.   end
  1011.   #--------------------------------------------------------------------------
  1012.   # ● 判断持有的空属性的防具
  1013.   #     item          : 物品
  1014.   #--------------------------------------------------------------------------
  1015.   def has_armor_no_gifts?(item)
  1016.     for i in items
  1017.       if i.is_a?(RPG::Armor)
  1018.         if i.gifts == nil or i.gifts == []
  1019.           return true if i.base_id == item.id
  1020.         end
  1021.       end
  1022.     end
  1023.     return false
  1024.   end
  1025.   #--------------------------------------------------------------------------
  1026.   # ● 判断持有的武器,防止武器防具判断混淆
  1027.   #     item          : 物品
  1028.   #     include_equip : 包括装备品
  1029.   #--------------------------------------------------------------------------
  1030.   def has_weapon_by_base_id?(item, include_equip = false)
  1031.     for i in items
  1032.       if i.is_a?(RPG::Weapon)
  1033.         return true if i.base_id == item.id
  1034.       end
  1035.     end
  1036.     if include_equip
  1037.       for actor in members
  1038.         for e in actor.equips
  1039.           if e.is_a?(RPG::Weapon)
  1040.             return true if e.base_id == item.id
  1041.           end  
  1042.         end
  1043.       end
  1044.     end
  1045.     return false
  1046.   end
  1047.   #--------------------------------------------------------------------------
  1048.   # ● 判断持有的防具,防止武器防具判断混淆
  1049.   #     item          : 物品
  1050.   #     include_equip : 包括装备品
  1051.   #--------------------------------------------------------------------------
  1052.   def has_armor_by_base_id?(item, include_equip = false)
  1053.     for i in items
  1054.       if i.is_a?(RPG::Armor)
  1055.         return true if i.base_id == item.id
  1056.       end
  1057.     end
  1058.     if include_equip
  1059.       for actor in members
  1060.         for e in actor.equips
  1061.           if e.is_a?(RPG::Armor)
  1062.             return true if e.base_id == item.id
  1063.           end
  1064.         end  
  1065.       end
  1066.     end
  1067.     return false
  1068.   end
  1069.   #--------------------------------------------------------------------------
  1070.   # ● 判断持有的武器数量,可以用$game_party.weapon_num($base_weapons[301])判断301号防具的数量
  1071.   #     item          : 物品
  1072.   #--------------------------------------------------------------------------
  1073.   def weapon_num(item)
  1074.     num = 0
  1075.     for i in items
  1076.       if i.is_a?(RPG::Weapon)
  1077.         if i.base_id == item.id
  1078.           num +=1
  1079.         end
  1080.       end
  1081.     end
  1082.     return num
  1083.   end
  1084.   #--------------------------------------------------------------------------
  1085.   # ● 判断持有的防具数量
  1086.   #     item          : 物品
  1087.   #--------------------------------------------------------------------------
  1088.   def armor_num(item)
  1089.     num = 0
  1090.     for i in items
  1091.       if i.is_a?(RPG::Armor)
  1092.         if i.base_id == item.id
  1093.           num +=1
  1094.         end
  1095.       end
  1096.     end
  1097.     return num
  1098.   end
  1099.   #--------------------------------------------------------------------------
  1100.   # ● 获得物品
  1101.   #     item          : 物品
  1102.   #     n             : 个数
  1103.   #--------------------------------------------------------------------------
  1104.   def gain_reini(item, n, include_equip = false, *gift)
  1105.     if n < 0
  1106.       lose_item(item, -n, include_equip = false)
  1107.     else
  1108.       case item
  1109.       when RPG::Item
  1110.         number = item_number(item)
  1111.         @items[item.id] = [[number + n, 0].max, 9999].min
  1112.       when RPG::Weapon
  1113.         j = 1
  1114.         for i in 0...n
  1115.           while @item[j] != 0
  1116.             break if @item[j] == nil
  1117.             j += 1
  1118.           end
  1119.           @item[j] = item
  1120.           @weapon[j] = a = Game_Equip.reini(item, *gift)
  1121.           @weapon[j].gifts = [] if @weapon[j].gifts == nil
  1122.           @weapons[a.id] = 1
  1123.         end  
  1124.       when RPG::Armor
  1125.         j = 1
  1126.         for i in 0...n
  1127.           while @item[j] != 0
  1128.             break if @item[j] == nil
  1129.             j += 1
  1130.           end
  1131.           @item[j] = item
  1132.           @armor[j] = a = Game_Equip.reini(item, *gift)
  1133.           @armor[j].gifts = [] if @armor[j].gifts == nil
  1134.           @armors[a.id] = 1
  1135.         end      
  1136.       end   
  1137.     end   
  1138.   end
  1139.   #--------------------------------------------------------------------------
  1140.   # ● 减少物品 (减少),商店卖武器防具调用
  1141.   #     item          : 物品
  1142.   #     n             : 个数
  1143.   #     include_equip : 包括装备品
  1144.   #--------------------------------------------------------------------------
  1145.   def lose_reini(item, n, include_equip = false )
  1146.     number = item_number(item)
  1147.     case item
  1148.     when RPG::Item
  1149.       @items[item.id] = [[number - n, 0].max, 9999].min
  1150.     when RPG::Weapon
  1151.       @weapons[item.id] = [[number - n, 0].max, 9999].min
  1152.     when RPG::Armor
  1153.       @armors[item.id] = [[number - n, 0].max, 9999].min
  1154.     end
  1155.     n -= number
  1156.     if include_equip and n > 0
  1157.       for actor in members
  1158.         while n > 0 and actor.equips.include?(item)
  1159.           actor.discard_equip(item)
  1160.           n -= 1
  1161.         end
  1162.       end
  1163.     end
  1164.   end
  1165.   #--------------------------------------------------------------------------
  1166.   # ● 减少物品 (减少),为了不与商店卖东西冲突
  1167.   #     item          : 物品
  1168.   #     n             : 个数
  1169.   #     include_equip : 包括装备品
  1170.   #     type          : 全部丢失时要添丢失的装备种类,1、2、3分别对应物品、武器和防具
  1171.   #     all_lose      :全部丢失
  1172.   #--------------------------------------------------------------------------
  1173.   def weapon_armor_lose_reini(item, n, include_equip = false, type = nil, all_lose = false )
  1174.     return if n == 0
  1175.     unless all_lose == true
  1176.       number = item_number(item)
  1177.       case item
  1178.       when RPG::Item
  1179.         @items[item.id] = [[number - n, 0].max, 9999].min
  1180.       when RPG::Weapon
  1181.         for i in [email protected]
  1182.           unless @weapon[i] == nil
  1183.             if @weapon[i].base_id == item.id and @weapons[@weapon[i].id] == 1
  1184.               @weapons[@weapon[i].id] = 0
  1185.               n -= 1
  1186.               break if n == 0
  1187.             end
  1188.           end  
  1189.         end
  1190.       when RPG::Armor
  1191.         for i in [email protected]
  1192.           unless @armor[i] == nil
  1193.             if @armor[i].base_id == item.id and @armors[@armor[i].id] == 1
  1194.               @armors[@armor[i].id] = 0
  1195.               n -= 1
  1196.               break if n == 0
  1197.             end
  1198.           end  
  1199.         end
  1200.       end
  1201.       n -= number
  1202.       if include_equip and n > 0
  1203.         for actor in members
  1204.           while n > 0 and actor.equips.include?(item)
  1205.             actor.discard_equip(item)
  1206.             n -= 1
  1207.           end
  1208.         end
  1209.       end
  1210.     else           #这里all_lose == false
  1211.       case type
  1212.       when  1
  1213.         for i in items
  1214.           if i.is_a?(RPG::Item)
  1215.             $game_party.lose_item(i, 9999)
  1216.           end  
  1217.         end  
  1218.       when  2
  1219.         for i in items
  1220.           if i.is_a?(RPG::Weapon)
  1221.             $game_party.lose_item(i, 99)
  1222.           end  
  1223.         end  
  1224.       when  3
  1225.         for i in items
  1226.           if i.is_a?(RPG::Armor)
  1227.             $game_party.lose_item(i, 99)
  1228.           end  
  1229.         end  
  1230.       end
  1231.     end
  1232.   end
  1233.   #--------------------------------------------------------------------------
  1234.   # ● 空属性物品减少,只减少属性为空的武器防具
  1235.   #     item          : 物品
  1236.   #     type          : 种类  武器=1 ,防具=2
  1237.   #     n             : 个数
  1238.   #--------------------------------------------------------------------------
  1239.   def gifts_nil_lose(item,type ,n)
  1240.     if type == 1
  1241.       weapons_num = 0
  1242.       for i in items
  1243.         if i.is_a?(RPG::Weapon)
  1244.           if i.gifts == nil or i.gifts == []
  1245.             if i.base_id == item.id
  1246.               weapons_num += 1
  1247.               @weapons[i.id] = 0
  1248.               break if n == weapons_num
  1249.             end  
  1250.           end   
  1251.         end
  1252.       end  
  1253.     elsif type == 2
  1254.       armors_num = 0
  1255.       for i in items
  1256.         if i.is_a?(RPG::Armor)
  1257.           if i.gifts == nil or i.gifts == []
  1258.             if i.base_id == item.id
  1259.               armors_num += 1
  1260.               @armors[i.id] = 0
  1261.               break if n == armors_num
  1262.             end  
  1263.           end  
  1264.         end   
  1265.       end
  1266.     end
  1267.   end  
  1268.   #--------------------------------------------------------------------------
  1269.   # ● 获得物品
  1270.   #     item_id       : 物品id
  1271.   #     type          : 类型(0物品, 1武器, 2防具)
  1272.   #     n             : 个数
  1273.   #--------------------------------------------------------------------------
  1274.   def gain_reini_byid(item_id, type, n, include_equip = false, *gift)
  1275.     case type
  1276.     when 0
  1277.       item = $data_items[item_id]
  1278.     when 1
  1279.       item = $base_weapons[item_id]
  1280.     when 2
  1281.       item = $base_armors[item_id]
  1282.     end
  1283.     gain_reini(item, n, include_equip, *gift)
  1284.   end
  1285.   #--------------------------------------------------------------------------
  1286.   # ● 极品爆率
  1287.   #--------------------------------------------------------------------------
  1288.   def equip_chance
  1289.     chance = Game_Equip::Equip_Chance[0]
  1290.     members.each {|actor| chance += actor.equip_chance}
  1291.     return chance
  1292.   end
  1293. end
  1294. #==============================================================================
  1295. # ■ Game_Troop
  1296. #==============================================================================
  1297. class Game_Troop < Game_Unit
  1298.   #--------------------------------------------------------------------------
  1299.   # ● 敌人角色名称后的文字表
  1300.   #--------------------------------------------------------------------------
  1301.   LETTER_TABLE = [ 'A','B','C','D','E','F','G','H','I','J',
  1302.                    'K','L','M','N','O','P','Q','R','S','T',
  1303.                    'U','V','W','X','Y','Z']                 
  1304.   #--------------------------------------------------------------------------
  1305.   # ● 按顺序排列数组
  1306.   #--------------------------------------------------------------------------
  1307.   def convert_integer_array(array)
  1308.     result = []
  1309.     array.each { |i|
  1310.       if i.is_a?(Range)
  1311.         result |= i.to_a
  1312.       elsif i.is_a?(Integer)
  1313.         result |= [i]
  1314.       end
  1315.     }
  1316.     return result
  1317.   end
  1318.   #--------------------------------------------------------------------------
  1319.   # ● 生成掉落装备与敌人队伍的对应列表
  1320.   #--------------------------------------------------------------------------
  1321.   def equip_id_table
  1322.     equip_table = PA::EQUIP_TABLE
  1323.     troop_lv = []
  1324.     troop_weapon = []
  1325.     troop_armor = []
  1326.     for i in 0...equip_table.size
  1327.       equip_table[i] = convert_integer_array(equip_table[i])
  1328.     end  
  1329.     for i in 0...equip_table.size
  1330.       troop_lv << equip_table[i] if i % 3 == 0
  1331.       troop_weapon << equip_table[i] if i % 3 == 1
  1332.       troop_armor << equip_table[i] if i % 3 == 2
  1333.     end
  1334.     for i in 0...troop_lv.size
  1335.       if troop_lv[i].include?(@troop_id)
  1336.         $random_weapon = troop_weapon[i][rand(troop_weapon[i].size)]
  1337.         $random_armor = troop_armor[i][rand(troop_armor[i].size)]
  1338.       end  
  1339.     end
  1340.   end                     
  1341.   #--------------------------------------------------------------------------
  1342.   # ● 生成掉落物品队列
  1343.   #--------------------------------------------------------------------------
  1344.   def make_drop_items
  1345.     drop_items = []
  1346.     # 每个死亡的敌人掉落物品
  1347.     # 除了属性水晶之外,数据库里面设计掉落装备无效化,掉落物品有效。
  1348.     for enemy in dead_members
  1349.       for di in [enemy.drop_item1, enemy.drop_item2]
  1350.         next if di.kind == 0
  1351.         next if rand(di.denominator) != 0
  1352.         if di.kind == 1         # 掉落物品
  1353.           drop_items.push($data_items[di.item_id])
  1354.         elsif di.kind == 2      # 掉落武器(无效)

  1355.         elsif di.kind == 3      # 掉落防具(除了属性水晶之外无效)
  1356.           item = reini_chance($base_armors[PA::CRYSTAL])
  1357.           drop_items.push(item)
  1358.         end  
  1359.       end
  1360.     end
  1361.     # 每个死亡的敌人掉落的装备计算
  1362.     for i in 0...dead_members.size
  1363.       equip_id_table
  1364.       if rand(100) < PA::DROP_PROBABILITY
  1365.         type = rand(4)
  1366.         case type
  1367.         when 0
  1368.           item = reini_chance($base_weapons[$random_weapon],true)
  1369.           drop_items.push(item)
  1370.         when 1,2,3  
  1371.           item = reini_chance($base_armors[$random_armor],true)
  1372.           drop_items.push(item)
  1373.         end
  1374.       end
  1375.     end  
  1376.     # 每胜利一次,默认属性水晶暴率
  1377.     drop_items.push(reini_chance($base_armors[PA::CRYSTAL])) if rand(PA::DROP_CRYSTAL_PRO) == 0
  1378.     return drop_items
  1379.   end
  1380.   #--------------------------------------------------------------------------
  1381.   # ● 处理极品爆率
  1382.   # normal_troop为false时,才可以获得4个属性以上的装备,用于BOSS装备的掉落
  1383.   #--------------------------------------------------------------------------
  1384.   def reini_chance(item, normal_troop = false)
  1385.     @item = item
  1386.     [url=home.php?mod=space&uid=115736]@Chance[/url] = 1 + rand(100)
  1387.     @gifts = []
  1388.     num = 0
  1389.     loop do
  1390.       if rand(80) <= @chance and @gifts.size < Game_Equip::GiftMax
  1391.         @chance = @chance * 8 / 10
  1392.         num += 1
  1393.         break if num >= 3 and normal_troop == true #普通敌人最多掉落名器或名装
  1394.         break if num >= 6
  1395.       else
  1396.         break
  1397.       end
  1398.     end
  1399.     gifts = []
  1400.     rd = []
  1401.     rd_1 = []
  1402.     if item.is_a?(RPG::Weapon)
  1403.       rd_1 = different_rand(PA::WEAPON_E.size - 1, num)
  1404.       for i in 0...num
  1405.         rd << PA::WEAPON_E[rd_1[i]]
  1406.       end
  1407.     end  
  1408.     if item.is_a?(RPG::Armor)
  1409.       case item.kind
  1410.       when 0
  1411.         rd_1 = different_rand(PA::SHIELD_E.size - 1, num)
  1412.         for i in 0...num
  1413.           rd << PA::SHIELD_E[rd_1[i]]
  1414.         end
  1415.       when 1
  1416.         rd_1 = different_rand(PA::HELMET_E.size - 1, num)
  1417.         for i in 0...num
  1418.           rd << PA::HELMET_E[rd_1[i]]
  1419.         end
  1420.       when 2
  1421.         rd_1 = different_rand(PA::CLOTHE_E.size - 1, num)
  1422.         for i in 0...num
  1423.           rd << PA::CLOTHE_E[rd_1[i]]
  1424.         end
  1425.       end  
  1426.     end
  1427.     if @item.is_a?(RPG::Armor)
  1428.       if @item.id == PA::CRYSTAL
  1429.         return Game_Equip.reini(@item, [])
  1430.       else  
  1431.         rd.each{|n| gifts.push Game_Gift.new(n)}
  1432.         return Game_Equip.reini(@item, gifts)
  1433.       end
  1434.     else
  1435.       rd.each{|n| gifts.push Game_Gift.new(n)}
  1436.       return Game_Equip.reini(@item, gifts)
  1437.     end  
  1438.   end
  1439. end
  1440. #==============================================================================
  1441. # ■ Game_Interpreter
  1442. #==============================================================================
  1443. class Game_Interpreter
  1444.   #--------------------------------------------------------------------------
  1445.   # ● 计算操作的值
  1446.   #     operation    : 操作 (0:增加 1:减少)
  1447.   #     operand_type : 运算域类型 (0:常量 1:变量)
  1448.   #     operand      : 运算域 (数值为变量 ID)
  1449.   #--------------------------------------------------------------------------
  1450.   def operate_value(operation, operand_type, operand)
  1451.     if operand_type == 0
  1452.       value = operand
  1453.     else
  1454.       value = $game_variables[operand]
  1455.     end
  1456.     if operation == 1
  1457.       value = -value
  1458.     end
  1459.     return value
  1460.   end
  1461.   #--------------------------------------------------------------------------
  1462.   # ● 条件分歧
  1463.   #--------------------------------------------------------------------------
  1464.   def command_111
  1465.     result = false
  1466.     case @params[0]
  1467.     when 0  # 开关
  1468.       result = ($game_switches[@params[1]] == (@params[2] == 0))
  1469.     when 1  # 变量
  1470.       value1 = $game_variables[@params[1]]
  1471.       if @params[2] == 0
  1472.         value2 = @params[3]
  1473.       else
  1474.         value2 = $game_variables[@params[3]]
  1475.       end
  1476.       case @params[4]
  1477.       when 0  # 相等
  1478.         result = (value1 == value2)
  1479.       when 1  # 大于等于
  1480.         result = (value1 >= value2)
  1481.       when 2  # 小于等于
  1482.         result = (value1 <= value2)
  1483.       when 3  # 大于
  1484.         result = (value1 > value2)
  1485.       when 4  # 小于
  1486.         result = (value1 < value2)
  1487.       when 5  # 不等于
  1488.         result = (value1 != value2)
  1489.       end
  1490.     when 2  # 自我开关
  1491.       if @original_event_id > 0
  1492.         key = [@map_id, @original_event_id, @params[1]]
  1493.         if @params[2] == 0
  1494.           result = ($game_self_switches[key] == true)
  1495.         else
  1496.           result = ($game_self_switches[key] != true)
  1497.         end
  1498.       end
  1499.     when 3  # 计时器
  1500.       if $game_system.timer_working
  1501.         sec = $game_system.timer / Graphics.frame_rate
  1502.         if @params[2] == 0
  1503.           result = (sec >= @params[1])
  1504.         else
  1505.           result = (sec <= @params[1])
  1506.         end
  1507.       end
  1508.     when 4  # 角色
  1509.       actor = $game_actors[@params[1]]
  1510.       if actor != nil
  1511.         case @params[2]
  1512.         when 0  # 是同伴
  1513.           result = ($game_party.members.include?(actor))
  1514.         when 1  # 姓名
  1515.           result = (actor.name == @params[3])
  1516.         when 2  # 特技
  1517.           result = (actor.skill_learn?($data_skills[@params[3]]))
  1518.         when 3  # 武器
  1519.           ## 判断是否符合母版id
  1520.           actor.weapons.each do |weapon|
  1521.             if weapon.base_id == @params[3]
  1522.               result = true
  1523.               break
  1524.             end
  1525.           end
  1526.         when 4  # 防具
  1527.           ## 判断是否符合母版id
  1528.           actor.armors.each do |armor|
  1529.             if armor.base_id == @params[3]
  1530.               result = true
  1531.               break
  1532.             end
  1533.           end
  1534.         when 5  # 状态
  1535.           result = (actor.state?(@params[3]))
  1536.         end
  1537.       end
  1538.     when 5  # 敌方角色
  1539.       enemy = $game_troop.members[@params[1]]
  1540.       if enemy != nil
  1541.         case @params[2]
  1542.         when 0  # 出现
  1543.           result = (enemy.exist?)
  1544.         when 1  # 状态
  1545.           result = (enemy.state?(@params[3]))
  1546.         end
  1547.       end
  1548.     when 6  # 角色
  1549.       character = get_character(@params[1])
  1550.       if character != nil
  1551.         result = (character.direction == @params[2])
  1552.       end
  1553.     when 7  # 金钱
  1554.       if @params[2] == 0
  1555.         result = ($game_party.gold >= @params[1])
  1556.       else
  1557.         result = ($game_party.gold <= @params[1])
  1558.       end
  1559.     when 8  # 物品
  1560.       result = $game_party.has_item?($data_items[@params[1]])
  1561.     when 9  # 武器
  1562.       result = $game_party.has_weapon_by_base_id?($base_weapons[@params[1]], @params[2])
  1563.     when 10  # 防具
  1564.       result = $game_party.has_armor_by_base_id?($base_armors[@params[1]], @params[2])
  1565.     when 11  # 按钮
  1566.       result = Input.press?(@params[1])
  1567.     when 12  # 脚本
  1568.       result = eval(@params[1])
  1569.     when 13  # 交通工具
  1570.       result = ($game_player.vehicle_type == @params[1])
  1571.     end
  1572.     @branch[@indent] = result     # 将判断结果放置在缓存中
  1573.     if @branch[@indent] == true
  1574.       @branch.delete(@indent)
  1575.       return true
  1576.     end
  1577.     return command_skip
  1578.   end
  1579.   #--------------------------------------------------------------------------
  1580.   # ● 计算装备操作的值
  1581.   #     operand_type : 运算域类型 (0:常量 1:变量)
  1582.   #     operand      : 运算域 (数值为变量 ID)
  1583.   #--------------------------------------------------------------------------
  1584.   def opera_equip_value(operation, operand_type, operand)
  1585.     if operand_type == 0
  1586.       value = operand
  1587.     else
  1588.       value = $game_variables[operand]
  1589.     end
  1590.     return value
  1591.   end
  1592.   #--------------------------------------------------------------------------
  1593.   # ● 更改装备
  1594.   #--------------------------------------------------------------------------
  1595.   def command_319
  1596.     actor = $game_actors[@params[0]]
  1597.     if actor != nil
  1598.       actor.change_equip_by_id(@params[1], @params[2])
  1599.     end
  1600.     return true
  1601.   end
  1602.   #--------------------------------------------------------------------------
  1603.   # ● 增减武器
  1604.   #--------------------------------------------------------------------------
  1605.   def get_weapon(id, n, *gift)
  1606.     $game_party.gain_reini($base_weapons[id], n, false, *gift)
  1607.   end
  1608.   #--------------------------------------------------------------------------
  1609.   # ● 增减防具
  1610.   #--------------------------------------------------------------------------
  1611.   def get_armor(id, n, *gift)
  1612.     $game_party.gain_reini($base_armors[id], n, false, *gift)
  1613.   end
  1614. end
  1615. #==============================================================================
  1616. # ■ Window_Base
  1617. #==============================================================================
  1618. class Window_Base < Window
  1619.   def draw_item_name(item, x, y, enabled = true)
  1620.     if item != nil
  1621.       draw_icon(item.icon_index, x, y, enabled)
  1622.       self.contents.font.color = text_color(item.text_color.to_i)
  1623.       self.contents.font.color.alpha = enabled ? 255 : 128
  1624.       self.contents.draw_text(x + 24, y, 172, WLH, item.name)
  1625.     end
  1626.   end
  1627. end
  1628. #==============================================================================
  1629. # ■ Window_ShopBuy
  1630. #==============================================================================
  1631. class Window_ShopBuy < Window_Selectable
  1632.   #--------------------------------------------------------------------------
  1633.   # ● 刷新
  1634.   #--------------------------------------------------------------------------
  1635.   def refresh
  1636.     @data = []
  1637.     for goods_item in @shop_goods
  1638.       case goods_item[0]
  1639.       when 0
  1640.         item = $data_items[goods_item[1]]
  1641.       when 1
  1642.         item = $base_weapons[goods_item[1]]
  1643.       when 2
  1644.         item = $base_armors[goods_item[1]]
  1645.       end
  1646.       if item != nil
  1647.         @data.push(item)
  1648.       end
  1649.     end
  1650.     @item_max = @data.size
  1651.     create_contents
  1652.     for i in 0...@item_max
  1653.       draw_item(i)
  1654.     end
  1655.   end
  1656. end
  1657. #==============================================================================
  1658. # ■ Window_ShopStatus
  1659. #==============================================================================
  1660. class Window_ShopStatus < Window_Base
  1661.   #--------------------------------------------------------------------------
  1662.   # ● 描绘角色现在装备的能力值变化
  1663.   #     actor : 角色
  1664.   #     x     : 描画目标 X 坐标
  1665.   #     y     : 描画目标 Y 坐标
  1666.   #--------------------------------------------------------------------------
  1667.   def draw_actor_parameter_change(actor, x, y)
  1668.     return if @item.is_a?(RPG::Item)
  1669.     enabled = actor.equippable?(@item, false)
  1670.     self.contents.font.color = normal_color
  1671.     self.contents.font.color.alpha = enabled ? 255 : 128
  1672.     self.contents.draw_text(x, y, 200, WLH, actor.name)
  1673.     if @item.is_a?(RPG::Weapon)
  1674.       item1 = weaker_weapon(actor)
  1675.     elsif actor.two_swords_style and @item.kind == 0
  1676.       item1 = nil
  1677.     else
  1678.       item1 = actor.equips[1 + @item.kind]
  1679.     end
  1680.     if enabled
  1681.       if @item.is_a?(RPG::Weapon)
  1682.         atk1 = item1 == nil ? 0 : item1.atk
  1683.         atk2 = @item == nil ? 0 : @item.atk
  1684.         change = atk2 - atk1
  1685.       else
  1686.         def1 = item1 == nil ? 0 : item1.def
  1687.         def2 = @item == nil ? 0 : @item.def
  1688.         change = def2 - def1
  1689.       end
  1690.       self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2)
  1691.     end
  1692.     draw_item_name(item1, x, y + WLH, enabled)
  1693.   end
  1694. end
  1695. #==============================================================================
  1696. # ■ Scene_File
  1697. #==============================================================================
  1698. class Scene_File < Scene_Base
  1699.   #--------------------------------------------------------------------------
  1700.   # ● 写入存档数据
  1701.   #     file : 写入文件用对象 (已经打开)
  1702.   #--------------------------------------------------------------------------
  1703.   def write_save_data(file)
  1704.     characters = []
  1705.     for actor in $game_party.members
  1706.       characters.push([actor.character_name, actor.character_index])
  1707.     end
  1708.     $game_system.save_count += 1
  1709.     $game_system.version_id = $data_system.version_id
  1710.     @last_bgm = RPG::BGM::last
  1711.     @last_bgs = RPG::BGS::last
  1712.     Marshal.dump(characters,           file)
  1713.     Marshal.dump(Graphics.frame_count, file)
  1714.     Marshal.dump(@last_bgm,            file)
  1715.     Marshal.dump(@last_bgs,            file)
  1716.     Marshal.dump($game_system,         file)
  1717.     Marshal.dump($game_message,        file)
  1718.     Marshal.dump($game_switches,       file)
  1719.     Marshal.dump($game_variables,      file)
  1720.     Marshal.dump($game_self_switches,  file)
  1721.     Marshal.dump($game_actors,         file)
  1722.     Marshal.dump($game_party,          file)
  1723.     Marshal.dump($game_troop,          file)
  1724.     Marshal.dump($game_map,            file)
  1725.     Marshal.dump($game_player,         file)
  1726.     Marshal.dump($data_weapons,        file)
  1727.     Marshal.dump($data_armors,         file)
  1728.   end
  1729.   #--------------------------------------------------------------------------
  1730.   # ● 读取存档数据
  1731.   #     file : 读取文件用对象 (已经打开)
  1732.   #--------------------------------------------------------------------------
  1733.   def read_save_data(file)
  1734.     characters           = Marshal.load(file)
  1735.     Graphics.frame_count = Marshal.load(file)
  1736.     @last_bgm            = Marshal.load(file)
  1737.     @last_bgs            = Marshal.load(file)
  1738.     $game_system         = Marshal.load(file)
  1739.     $game_message        = Marshal.load(file)
  1740.     $game_switches       = Marshal.load(file)
  1741.     $game_variables      = Marshal.load(file)
  1742.     $game_self_switches  = Marshal.load(file)
  1743.     $game_actors         = Marshal.load(file)
  1744.     $game_party          = Marshal.load(file)
  1745.     $game_troop          = Marshal.load(file)
  1746.     $game_map            = Marshal.load(file)
  1747.     $game_player         = Marshal.load(file)
  1748.     $data_weapons        = Marshal.load(file)
  1749.     $data_armors         = Marshal.load(file)
  1750.     if $game_system.version_id != $data_system.version_id
  1751.       $game_map.setup($game_map.map_id)
  1752.       $game_player.center($game_player.x, $game_player.y)
  1753.     end
  1754.   end
  1755. end
  1756. #==============================================================================
  1757. # ■ Scene_Shop
  1758. #==============================================================================
  1759. class Scene_Shop < Scene_Base
  1760.   #--------------------------------------------------------------------------
  1761.   # ● 确定输入个数
  1762.   #--------------------------------------------------------------------------
  1763.   def decide_number_input
  1764.     Sound.play_shop
  1765.     @number_window.active = false
  1766.     @number_window.visible = false
  1767.     case @command_window.index
  1768.     when 0  # 购买
  1769.       $game_party.lose_gold(@number_window.number * @item.price)
  1770.       $game_party.gain_reini(@item, @number_window.number)
  1771.       @gold_window.refresh
  1772.       @buy_window.refresh
  1773.       @status_window.refresh
  1774.       @buy_window.active = true
  1775.       @buy_window.visible = true
  1776.     when 1  # 卖出
  1777.       $game_party.gain_gold(@number_window.number * (@item.price / 2))
  1778.       $game_party.lose_reini(@item, @number_window.number)
  1779.       @gold_window.refresh
  1780.       @sell_window.contents.clear
  1781.       @sell_window.set_item_sell(@itemcommand_window.commands[@command_index])
  1782.       @status_window.refresh
  1783.       @sell_window.active = true
  1784.       @sell_window.visible = true
  1785.       @status_window.visible = false
  1786.       @itemcommand_window.visible = true
  1787.     end
  1788.   end
  1789. end
  1790. #==============================================================================
  1791. # ■ Scene_Title
  1792. #==============================================================================
  1793. class Scene_Title < Scene_Base
  1794.   #--------------------------------------------------------------------------
  1795.   # ● 载入数据库
  1796.   #--------------------------------------------------------------------------
  1797.   def load_database
  1798.     $data_actors        = load_data("Data/Actors.rvdata")
  1799.     $data_classes       = load_data("Data/Classes.rvdata")
  1800.     $data_skills        = load_data("Data/Skills.rvdata")
  1801.     $data_items         = load_data("Data/Items.rvdata")
  1802.     $base_weapons       = load_data("Data/Weapons.rvdata")
  1803.     $base_armors        = load_data("Data/Armors.rvdata")
  1804.     $data_enemies       = load_data("Data/Enemies.rvdata")
  1805.     $data_troops        = load_data("Data/Troops.rvdata")
  1806.     $data_states        = load_data("Data/States.rvdata")
  1807.     $data_animations    = load_data("Data/Animations.rvdata")
  1808.     $data_common_events = load_data("Data/CommonEvents.rvdata")
  1809.     $data_system        = load_data("Data/System.rvdata")
  1810.     $data_areas         = load_data("Data/Areas.rvdata")
  1811.     $data_weapons       = [nil]
  1812.     $data_armors        = [nil]
  1813.   end
  1814.   #--------------------------------------------------------------------------
  1815.   # ● 载入战斗测试用的数据库
  1816.   #--------------------------------------------------------------------------
  1817.   def load_bt_database
  1818.     $data_actors        = load_data("Data/BT_Actors.rvdata")
  1819.     $data_classes       = load_data("Data/BT_Classes.rvdata")
  1820.     $data_skills        = load_data("Data/BT_Skills.rvdata")
  1821.     $data_items         = load_data("Data/BT_Items.rvdata")
  1822.     $data_weapons       = load_data("Data/BT_Weapons.rvdata")
  1823.     $data_armors        = load_data("Data/BT_Armors.rvdata")
  1824.     $data_enemies       = load_data("Data/BT_Enemies.rvdata")
  1825.     $data_troops        = load_data("Data/BT_Troops.rvdata")
  1826.     $data_states        = load_data("Data/BT_States.rvdata")
  1827.     $data_animations    = load_data("Data/BT_Animations.rvdata")
  1828.     $data_common_events = load_data("Data/BT_CommonEvents.rvdata")
  1829.     $data_system        = load_data("Data/BT_System.rvdata")
  1830.     $base_weapons       = $data_weapons
  1831.     $base_armors        = $data_armors
  1832.   end
  1833. end
复制代码

点评

我说过,本范例中的脚本不得单独使用,否则报错。你直接使用范例,如果别的功能不使用,保留其他脚本不用理会就可以了。  发表于 2013-6-10 09:52
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-12-23 18:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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