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

Project1

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

[已经过期] 词缀问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
149 小时
注册时间
2010-8-10
帖子
53
跳转到指定楼层
1
发表于 2013-11-6 17:27:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 jqkice1 于 2013-11-6 17:29 编辑

       关于沉影不器的随机属性脚本,里面的词缀,属性过多的话,词缀也很长,如果有6条属性,显示是锋利落英灵猴卓绝精准幻影的匕首,看上去怪怪的,能不能只显示属性值加成最大的前两条词缀,比如锋利卓绝的匕首,最好是把属性显示选择设置成选择权重、价值之类的,因为攻击力增加要比攻击力百分比增加的数值大很多,比如攻击力增加的是31(词缀:锋利),攻击百分比增加30%(词缀:战神),那么显示锋利的匕首而不是战神的匕首。请大家帮看看怎么改?脚本如下:
  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 = 8
  28.   ## 附加属性影响价格基数
  29.   GiftPrice = 10
  30.   ## 极品爆率最低值和最高值(0到100)
  31.   Equip_Chance = [95, 100]  
  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("残忍", 50, 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("贪婪", 20, 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.    
  85.     case result
  86.     when RPG::Weapon
  87.       result.inidur
  88.       result.base_id = result.id
  89.       result.id = $data_weapons.size
  90.     when RPG::Armor
  91.       result.inidur
  92.       result.base_id = result.id
  93.       result.id = $data_armors.size
  94.     end
  95.    
  96.     ## 附加属性为空或指定为(0)时,直接返回母版
  97.     return self.result(result) if gifts.nil? or gifts == 0
  98.     ## 指定附加属性数量时
  99.     if gifts.is_a? Integer
  100.       ## 控制数量
  101.       num = [gifts, GiftMax].min
  102.       gifts = []
  103.       ## 随机生成指定数量的附加属性
  104.       rd = []
  105.       rd_1 = []
  106.       if item.is_a?(RPG::Weapon)
  107.         rd_1 = different_rand(PA::WEAPON_E.size - 1, num)
  108.         for i in 0...num
  109.           rd << PA::WEAPON_E[rd_1[i]]
  110.         end
  111.       end  
  112.       if item.is_a?(RPG::Armor)
  113.         case item.kind
  114.         when 0
  115.           rd_1 = different_rand(PA::SHIELD_E.size - 1, num)
  116.           for i in 0...num
  117.             rd << PA::SHIELD_E[rd_1[i]]
  118.           end
  119.         when 1
  120.           rd_1 = different_rand(PA::HELMET_E.size - 1, num)
  121.           for i in 0...num
  122.             rd << PA::HELMET_E[rd_1[i]]
  123.           end
  124.         when 2
  125.           rd_1 = different_rand(PA::CLOTHE_E.size - 1, num)
  126.           for i in 0...num
  127.             rd << PA::CLOTHE_E[rd_1[i]]
  128.           end
  129.         when 3
  130.           rd_1 = different_rand(PA::JEWELRY_E.size - 1, num)
  131.           for i in 0...num
  132.             rd << PA::JEWELRY_E[rd_1[i]]
  133.           end
  134.         when 4
  135.           rd_1 = different_rand(PA::SHOES_E.size - 1, num)
  136.           for i in 0...num
  137.             rd << PA::SHOES_E[rd_1[i]]
  138.           end
  139.         end  
  140.       end  
  141.       rd.each{|n| gifts.push Game_Gift.new(n)}
  142.     end
  143.     gifts = [gifts].flatten
  144.     return self.result(result) if gifts.empty?
  145.     ## 处理数据
  146.     result.gifts = gifts
  147.     name = ""#gift.name
  148.     price = 0
  149.     for gift in gifts
  150.       name  += gift.name
  151.       price += gift.weight * GiftPrice
  152.     end
  153.     ## 设定名称
  154.     result.name = name  + ' ' + result.name
  155.     ## 设定价格
  156.     result.price += price.round
  157.       ## 设定颜色
  158.       case gifts.size
  159.       when 1
  160.         result.text_color = 12
  161.       when 2
  162.         result.text_color = 29#
  163.       when 3
  164.         result.text_color = 17
  165.       when 4
  166.         result.text_color = 20
  167.       when 5
  168.         result.text_color = 26
  169.       when 6
  170.         result.text_color = 31
  171.       end
  172.    
  173.     return self.result(result)
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● 返回结果
  177.   #    item: 物品
  178.   #--------------------------------------------------------------------------
  179.   def self.result(item)
  180.     case item
  181.     when RPG::Item
  182.       
  183.     when RPG::Weapon
  184.       item.id = $data_weapons.size
  185.       $data_weapons << item
  186.     when RPG::Armor
  187.       item.id = $data_armors.size
  188.       $data_armors << item
  189.     end
  190.     return item
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 物品(装备)重生
  194.   #    item_id: 物品id
  195.   #    type:    类型
  196.   #    *gift:   附加属性(留空表示无属性,数字表示指定数量随机属性)
  197.   #--------------------------------------------------------------------------
  198.   def self.reini_id(item_id, type, *gift)
  199.     ## 排除装备id为零的情况
  200.     return 0 if item_id == 0
  201.     case type
  202.     when 0
  203.       item = $base_weapons[item_id]
  204.       item.base_id = item_id
  205.     when 1
  206.       item = $base_armors[item_id]
  207.       item.base_id = item_id
  208.     end
  209.     return self.reini(item, *gift).id
  210.   end
  211. end

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

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

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4704
在线时间
5241 小时
注册时间
2009-4-29
帖子
14318

贵宾

2
发表于 2013-11-7 22:31:13 | 只看该作者
我的整合系统已经删除了沉影的词缀功能。

点评

P叔能帮改下这个脚本么?装备词缀大于2时,显示价值最高的两条词缀。  发表于 2013-11-8 09:43
我改了一下词缀名称显示的部分,可以正常显示,就是属性多了词缀太长的问题。  发表于 2013-11-8 08:47
《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
149 小时
注册时间
2010-8-10
帖子
53
3
 楼主| 发表于 2014-5-26 16:19:50 | 只看该作者
事隔这么久了~~沉了~~还是没解决

点评

……我来留个名  发表于 2014-5-26 21:19

评分

参与人数 1星屑 -1 收起 理由
丿梁丶小柒 -1 好像不能挖坟的呢。

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-25 01:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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