Project1

标题: 使用这个脚本后,事件“失去武器防具”无效,请求帮助 [打印本页]

作者: 怪蜀黍    时间: 2011-9-18 21:02
标题: 使用这个脚本后,事件“失去武器防具”无效,请求帮助
本帖最后由 protosssonny 于 2011-9-18 21:14 编辑

使用了这个脚本之后,事件“失去武器防具”无效。和右边的人说话,可以得到武器防具,但是不能失去武器防具。请求帮助应该怎么改啊?忙了一下午,试了各种办法,结果还是没有解决。无奈之后求助了。
这个脚本还有众多BUG,我已经修复了一部分,但是现在附件的脚本是最原始的。由于其他BUG我还可以修改,所以不需要帮忙。请帮助修改不能失去武器防具的BUG。感谢!
随机属性.rar (260.04 KB, 下载次数: 18)
按一楼的意见,那么115也上传1个吧。
http://115.com/file/bhflowp7#
随机属性.rardsu_plus_rewardpost_czw
作者: RPGmaster    时间: 2011-9-18 21:08
表示压缩包损坏了= =
用115上传吧
作者: 怪蜀黍    时间: 2011-9-18 21:16
本帖最后由 protosssonny 于 2011-9-18 21:20 编辑

实在下不了,我就贴脚本了,希望得到大家的帮助:
  1.    
  2. #==============================================================================
  3. # 复杂装备系统之随机属性 by 沉影不器
  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.   ##     name    添加到装备前的修饰词
  34.   ##     max     该属性最大值
  35.   ##     weight  权重(最大值的权重,用于计算价值,用于计算颜色也行)
  36.   ##     percent 是否按百分比计算
  37.   Gift = Struct.new(:name, :max, :weight, :percent)
  38.   Gifts = [
  39.      # 攻击
  40.      Gift.new("锐利,伤害,霸道", 200, 40, false),
  41.      Gift.new("残忍,残酷,凶残", 40, 40, true),
  42.      # 防御
  43.      Gift.new("厚重,守卫,守护", 200, 40, false),
  44.      Gift.new("结实,防卫,防护", 40, 40, true),
  45.      # 精神
  46.      Gift.new("光荣", 200, 40, false),
  47.      Gift.new("祝福", 40, 40, true),
  48.      # 敏捷
  49.      Gift.new("敏捷", 200, 40, false),
  50.      Gift.new("灵巧", 40, 40, true),
  51.      # hp
  52.      Gift.new("落英", 200, 40, false),
  53.      Gift.new("武士", 40, 40, true),
  54.      # mp
  55.      Gift.new("神灵", 200, 40, false),
  56.      Gift.new("圣者", 40, 40, true),
  57.      # 命中
  58.      Gift.new("精确", 100, 40,false),
  59.      # 闪避
  60.      Gift.new("幻影", 100, 40, false),
  61.      # 暴击
  62.      Gift.new("暴击", 100, 40, false),
  63.      # 吸血
  64.      Gift.new("贪婪", 10, 40, true),
  65.      # 吸魔  ###(待定)
  66.      Gift.new("幸运", 10, 40, true)
  67.   ]
  68. end


  69. #==============================================================================
  70. # ■ Game_Equip 自定义装备模块
  71. #==============================================================================
  72. module Game_Equip
  73.   #--------------------------------------------------------------------------
  74.   # ● 物品(装备)重生
  75.   #    item:  物品
  76.   #    *gift: 附加属性(留空表示无属性,数字表示指定数量随机属性)
  77.   #--------------------------------------------------------------------------
  78.   def self.reini(item, *gift)
  79.     return if item.nil?
  80.     result = item.clone
  81.     gifts = *gift
  82.     gifts.flatten! if gifts.is_a? Array
  83.     ## 附加属性为空或指定为(0)时,直接返回母版
  84.     return self.result(result) if gifts.nil? or gifts == 0
  85.     ## 指定附加属性数量时
  86.     if gifts.is_a? Integer
  87.       ## 控制数量
  88.       num = [gifts, GiftMax].min
  89.       gifts = []
  90.       ## 随机生成指定数量的附加属性
  91.       rd = different_rand(Gifts.size-1, num)
  92.       rd.each{|n| gifts.push Game_Gift.new(n)}
  93.     end
  94.     gifts = [gifts].flatten
  95.     return self.result(result) if gifts.empty?
  96.     ## 处理数据
  97.     result.gifts = gifts
  98.     name = ""
  99.     price = 0
  100.     for gift in gifts
  101.       name  += gift.name
  102.       price += (result.price/2)#gift.weight * GiftPrice
  103.     end
  104.     ## 设定名称
  105.     #result.name =  name + '的' + result.name
  106.     ## 设定价格
  107.     result.price += price.round
  108.     ## 设定颜色
  109.     case gifts.size
  110.     when 1
  111.       result.text_color = 12#gifts.size
  112.     when 2
  113.       result.text_color = 29
  114.     when 3
  115.       result.text_color = 17
  116.     when 4
  117.       result.text_color = 20
  118.     when 5
  119.       result.text_color = 26
  120.     when 6
  121.       result.text_color = 31
  122.     end
  123.     return self.result(result)
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 返回结果
  127.   #    item: 物品
  128.   #--------------------------------------------------------------------------
  129.   def self.result(item)
  130.     case item
  131.     when RPG::Item
  132.       
  133.     when RPG::Weapon
  134.       item.base_id = item.id
  135.       item.id = $data_weapons.size
  136.       $data_weapons << item
  137.     when RPG::Armor
  138.       item.base_id = item.id
  139.       item.id = $data_armors.size
  140.       $data_armors << item
  141.     end
  142.     return item
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 物品(装备)重生
  146.   #    item_id: 物品id
  147.   #    type:    类型
  148.   #    *gift:   附加属性(留空表示无属性,数字表示指定数量随机属性)
  149.   #--------------------------------------------------------------------------
  150.   def self.reini_id(item_id, type, *gift)
  151.     ## 排除装备id为零的情况
  152.     return 0 if item_id == 0
  153.     case type
  154.     when 0
  155.       item = $base_weapons[item_id]
  156.     when 1
  157.       item = $base_armors[item_id]
  158.     end
  159.     return self.reini(item, *gift).id
  160.   end
  161. end

  162. #==============================================================================
  163. # ■ Game_Gift 装备附加能力
  164. #==============================================================================
  165. class Game_Gift
  166.   include Game_Equip
  167.   #--------------------------------------------------------------------------
  168.   # ● 读取口
  169.   #--------------------------------------------------------------------------
  170.   attr_reader   :type
  171.   attr_reader   :value
  172.   attr_reader   :name
  173.   #--------------------------------------------------------------------------
  174.   # ● 初始化
  175.   #--------------------------------------------------------------------------
  176.   def initialize(type = nil, value = nil)
  177.     get_type(type)
  178.     get_value(value)
  179.     get_name
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 获取属性
  183.   #--------------------------------------------------------------------------
  184.   def get_type(type)
  185.     unless type.nil? or type > Gifts.size or type < 0
  186.       @type = type
  187.     else
  188.       @type = rand(Gifts.size - 1)
  189.     end
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● 获取品质值
  193.   #--------------------------------------------------------------------------
  194.   def get_value(value)
  195.     unless value.nil? or value.abs > max
  196.       @value = value
  197.     else
  198.       @value = $game_variables[3]+rand(1+$game_variables[4])
  199.       @value = linear_rand(max) + 1 if percent==true
  200.     end
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 获取名称
  204.   #--------------------------------------------------------------------------
  205.   def get_name
  206.     names = Gifts[@type].name.split(/,/)
  207.     n = (@value.abs-1)/(max.to_f/names.size)
  208.     @name = names[n.truncate]
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● 获取最大值
  212.   #--------------------------------------------------------------------------
  213.   def max
  214.     return Gifts[@type].max
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ● 获取权重
  218.   #--------------------------------------------------------------------------
  219.   def weight
  220.     return @value > 0 ? @value / max.to_f * Gifts[@type].weight : 0
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ● 获取是否百分比
  224.   #--------------------------------------------------------------------------
  225.   def percent
  226.     return Gifts[@type].percent
  227.   end
  228.   
  229.   #--------------------------------------------------------------------------
  230.   # ● 攻击力
  231.   #--------------------------------------------------------------------------
  232.   def atk(actor_id)
  233.     # 无角色信息时返回
  234.     return 0 unless actor_id
  235.     # 数据类型不符时返回
  236.     return 0 if @type != 0 and @type != 1
  237.     if percent
  238.       return $game_actors[actor_id].self_atk * @value / 100
  239.     else
  240.       return @value
  241.     end
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● 防御力
  245.   #--------------------------------------------------------------------------
  246.   def def(actor_id)
  247.     # 无角色信息时返回
  248.     return 0 unless actor_id
  249.     # 数据类型不符时返回
  250.     return 0 if @type != 2 and @type != 3
  251.     if percent
  252.       return $game_actors[actor_id].self_def * @value / 100
  253.     else
  254.       return @value
  255.     end
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 精神
  259.   #--------------------------------------------------------------------------
  260.   def spi(actor_id)
  261.     # 无角色信息时返回
  262.     return 0 unless actor_id
  263.     # 数据类型不符时返回
  264.     return 0 if @type != 4 and @type != 5
  265.     if percent
  266.       return $game_actors[actor_id].self_spi * @value / 100
  267.     else
  268.       return @value
  269.     end
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 敏捷
  273.   #--------------------------------------------------------------------------
  274.   def agi(actor_id)
  275.     # 无角色信息时返回
  276.     return 0 unless actor_id
  277.     # 数据类型不符时返回
  278.     return 0 if @type != 6 and @type != 7
  279.     if percent
  280.       return $game_actors[actor_id].self_agi * @value / 100
  281.     else
  282.       return @value
  283.     end
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● maxhp
  287.   #--------------------------------------------------------------------------
  288.   def maxhp(actor_id)
  289.     # 无角色信息时返回
  290.     return 0 unless actor_id
  291.     # 数据类型不符时返回
  292.     return 0 if @type != 8 and @type != 9
  293.     if percent
  294.       return $game_actors[actor_id].self_maxhp * @value / 100
  295.     else
  296.       return @value
  297.     end
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● maxmp
  301.   #--------------------------------------------------------------------------
  302.   def maxmp(actor_id)
  303.     # 无角色信息时返回
  304.     return 0 unless actor_id
  305.     # 数据类型不符时返回
  306.     return 0 if @type != 10 and @type != 11
  307.     if percent
  308.       return $game_actors[actor_id].self_maxmp * @value / 100
  309.     else
  310.       return @value
  311.     end
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ● 命中
  315.   #--------------------------------------------------------------------------
  316.   def hit
  317.     # 数据类型不符时返回
  318.     return 0 if @type != 12
  319.     return @value
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 闪避
  323.   #--------------------------------------------------------------------------
  324.   def eva
  325.     # 数据类型不符时返回
  326.     return 0 if @type != 13
  327.     return @value
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ● 暴击
  331.   #--------------------------------------------------------------------------
  332.   def cri
  333.     # 数据类型不符时返回
  334.     return 0 if @type != 14
  335.     return @value
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 经验(百分比)
  339.   #--------------------------------------------------------------------------
  340.   def exp
  341.     # 数据类型不符时返回
  342.     return 0 if @type != 15
  343.     return @value
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ● 高级装备暴率(百分比)
  347.   #--------------------------------------------------------------------------
  348.   def equip_chance
  349.     # 数据类型不符时返回
  350.     return 0 if @type != 16
  351.     return @value
  352.   end
  353. end
  354. #==============================================================================
  355. # ■ RPG::BaseItem
  356. #==============================================================================
  357. module RPG
  358.   class BaseItem
  359.     ## 颜色
  360.     attr_accessor :text_color
  361.   end
  362. end
  363. #==============================================================================
  364. # ■ RPG::Weapon
  365. #==============================================================================
  366. module RPG
  367.   class Weapon < BaseItem
  368.     #------------------------------------------------------------------------
  369.     # 附加属性
  370.     #------------------------------------------------------------------------
  371.     attr_accessor :base_id
  372.     attr_accessor :actor_id
  373.     attr_accessor :gifts
  374.     #------------------------------------------------------------------------
  375.     # 攻击力(合)
  376.     #------------------------------------------------------------------------
  377.     def atk
  378.       n = @atk
  379.       @gifts = [] if @gifts.nil?
  380.       for g in @gifts.compact do n += g.atk(actor_id) end
  381.       return n
  382.     end
  383.     #------------------------------------------------------------------------
  384.     # 防御力(合)
  385.     #------------------------------------------------------------------------
  386.     def def
  387.       n = @def
  388.       @gifts = [] if @gifts.nil?
  389.       for g in @gifts.compact do n += g.def(actor_id) end
  390.       return n
  391.     end
  392.     #------------------------------------------------------------------------
  393.     # 魔力(合)
  394.     #------------------------------------------------------------------------
  395.     def spi
  396.       n = @spi
  397.       @gifts = [] if @gifts.nil?
  398.       for g in @gifts.compact do n += g.spi(actor_id) end
  399.       return n
  400.     end
  401.     #------------------------------------------------------------------------
  402.     # 敏捷(合)
  403.     #------------------------------------------------------------------------
  404.     def agi
  405.       n = @agi
  406.       @gifts = [] if @gifts.nil?
  407.       for g in @gifts.compact do n += g.agi(actor_id) end
  408.       return n
  409.     end
  410.     #------------------------------------------------------------------------
  411.     # 最大hp(合)
  412.     #------------------------------------------------------------------------
  413.     def maxhp
  414.       n = 0
  415.       @gifts = [] if @gifts.nil?
  416.       for g in @gifts.compact do n += g.maxhp(actor_id) end
  417.       return n
  418.     end
  419.     #------------------------------------------------------------------------
  420.     # 最大mp(合)
  421.     #------------------------------------------------------------------------
  422.     def maxmp
  423.       n = 0
  424.       @gifts = [] if @gifts.nil?
  425.       for g in @gifts.compact do n += g.maxmp(actor_id) end
  426.       return n
  427.     end
  428.     #------------------------------------------------------------------------
  429.     # 命中率(合)
  430.     #------------------------------------------------------------------------
  431.     def hit
  432.       n = @hit
  433.       @gifts = [] if @gifts.nil?
  434.       for g in @gifts.compact do n += g.hit end
  435.       return n
  436.     end
  437.     #------------------------------------------------------------------------
  438.     # 闪避率(合)
  439.     #------------------------------------------------------------------------
  440.     def eva
  441.       n = 0
  442.       @gifts = [] if @gifts.nil?
  443.       for g in @gifts.compact do n += g.eva end
  444.       return n
  445.     end
  446.     #------------------------------------------------------------------------
  447.     # 暴击率(合)
  448.     #------------------------------------------------------------------------
  449.     def cri
  450.       n = 0
  451.       @gifts = [] if @gifts.nil?
  452.       for g in @gifts.compact do n += g.cri end
  453.       return n
  454.     end
  455.     #--------------------------------------------------------------------------
  456.     # ● 经验(百分比)
  457.     #--------------------------------------------------------------------------
  458.     def exp
  459.       n = 0
  460.       @gifts = [] if @gifts.nil?
  461.       for g in @gifts.compact do n += g.exp end
  462.       return n
  463.     end
  464.     #--------------------------------------------------------------------------
  465.     # ● 高级装备暴率(百分比)
  466.     #--------------------------------------------------------------------------
  467.     def equip_chance
  468.       n = 0
  469.       @gifts = [] if @gifts.nil?
  470.       for g in @gifts.compact do n += g.equip_chance end
  471.       return n
  472.     end
  473.   end
  474. end
  475. #==============================================================================
  476. # ■ RPG::Armor
  477. #==============================================================================
  478. module RPG
  479.   class Armor < BaseItem
  480.     #------------------------------------------------------------------------
  481.     # 附加属性
  482.     #------------------------------------------------------------------------
  483.     attr_accessor :base_id
  484.     attr_accessor :actor_id
  485.     attr_accessor :gifts
  486.     #------------------------------------------------------------------------
  487.     # 攻击力(合)
  488.     #------------------------------------------------------------------------
  489.     def atk
  490.       n = @atk
  491.       @gifts = [] if @gifts.nil?
  492.       for g in @gifts.compact do n += g.atk(actor_id) end
  493.       return n
  494.     end
  495.     #------------------------------------------------------------------------
  496.     # 防御力(合)
  497.     #------------------------------------------------------------------------
  498.     def def
  499.       n = @def
  500.       @gifts = [] if @gifts.nil?
  501.       for g in @gifts.compact do n += g.def(actor_id) end
  502.       return n
  503.     end
  504.     #------------------------------------------------------------------------
  505.     # 魔力(合)
  506.     #------------------------------------------------------------------------
  507.     def spi
  508.       n = @spi
  509.       @gifts = [] if @gifts.nil?
  510.       for g in @gifts.compact do n += g.spi(actor_id) end
  511.       return n
  512.     end
  513.     #------------------------------------------------------------------------
  514.     # 敏捷(合)
  515.     #------------------------------------------------------------------------
  516.     def agi
  517.       n = @agi
  518.       @gifts = [] if @gifts.nil?
  519.       for g in @gifts.compact do n += g.agi(actor_id) end
  520.       return n
  521.     end
  522.     #------------------------------------------------------------------------
  523.     # 最大hp(合)
  524.     #------------------------------------------------------------------------
  525.     def maxhp
  526.       n = 0
  527.       @gifts = [] if @gifts.nil?
  528.       for g in @gifts.compact do n += g.maxhp(actor_id) end
  529.       return n
  530.     end
  531.     #------------------------------------------------------------------------
  532.     # 最大mp(合)
  533.     #------------------------------------------------------------------------
  534.     def maxmp
  535.       n = 0
  536.       @gifts = [] if @gifts.nil?
  537.       for g in @gifts.compact do n += g.maxmp(actor_id) end
  538.       return n
  539.     end
  540.     #------------------------------------------------------------------------
  541.     # 命中率(合)
  542.     #------------------------------------------------------------------------
  543.     def hit
  544.       n = 0
  545.       @gifts = [] if @gifts.nil?
  546.       for g in @gifts.compact do n += g.hit end
  547.       return n
  548.     end
  549.     #------------------------------------------------------------------------
  550.     # 闪避率(合)
  551.     #------------------------------------------------------------------------
  552.     def eva
  553.       n = @eva
  554.       @gifts = [] if @gifts.nil?
  555.       for g in @gifts.compact do n += g.eva end
  556.       return n
  557.     end
  558.     #------------------------------------------------------------------------
  559.     # 暴击率(合)
  560.     #------------------------------------------------------------------------
  561.     def cri
  562.       n = 0
  563.       @gifts = [] if @gifts.nil?
  564.       for g in @gifts.compact do n += g.cri end
  565.       return n
  566.     end
  567.     #--------------------------------------------------------------------------
  568.     # ● 经验(百分比)
  569.     #--------------------------------------------------------------------------
  570.     def exp
  571.       n = 0
  572.       @gifts = [] if @gifts.nil?
  573.       for g in @gifts.compact do n += g.exp end
  574.       return n
  575.     end
  576.     #--------------------------------------------------------------------------
  577.     # ● 高级装备暴率(百分比)
  578.     #--------------------------------------------------------------------------
  579.     def equip_chance
  580.       n = 0
  581.       @gifts = [] if @gifts.nil?
  582.       for g in @gifts.compact do n += g.equip_chance end
  583.       return n
  584.     end
  585.   end
  586. end
  587. #==============================================================================
  588. # ■ Game_Actor
  589. #==============================================================================
  590. class Game_Actor < Game_Battler
  591.   #--------------------------------------------------------------------------
  592.   # ● 基本 MaxHP の取得
  593.   #--------------------------------------------------------------------------
  594.   def base_maxhp
  595.     n = actor.parameters[0, @level]
  596.     for item in equips.compact do n += item.maxhp end
  597.     return n
  598.   end
  599.   #--------------------------------------------------------------------------
  600.   # ● 获取基本 MaxMP
  601.   #--------------------------------------------------------------------------
  602.   def base_maxmp
  603.     n = actor.parameters[1, @level]
  604.     for item in equips.compact do n += item.maxmp end
  605.     return n
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● 获取自身 MaxHP
  609.   #--------------------------------------------------------------------------
  610.   def self_maxhp
  611.     return actor.parameters[0, @level]
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # ● 获取自身 MaxMP
  615.   #--------------------------------------------------------------------------
  616.   def self_maxmp
  617.     return actor.parameters[1, @level]
  618.   end
  619.   #--------------------------------------------------------------------------
  620.   # ● 获取自身攻击力
  621.   #--------------------------------------------------------------------------
  622.   def self_atk
  623.     return actor.parameters[2, @level]
  624.   end
  625.   #--------------------------------------------------------------------------
  626.   # ● 获取自身防御力
  627.   #--------------------------------------------------------------------------
  628.   def self_def
  629.     return actor.parameters[3, @level]
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ● 获取自身精神力
  633.   #--------------------------------------------------------------------------
  634.   def self_spi
  635.     return actor.parameters[4, @level]
  636.   end
  637.   #--------------------------------------------------------------------------
  638.   # ● 获取自身敏捷性
  639.   #--------------------------------------------------------------------------
  640.   def self_agi
  641.     return actor.parameters[5, @level]
  642.   end
  643.   #--------------------------------------------------------------------------
  644.   # ● 获取命中率
  645.   #--------------------------------------------------------------------------
  646.   def hit
  647.     n = 95
  648.     for e in equips.compact do n += e.hit end
  649.     return n
  650.   end
  651.   #--------------------------------------------------------------------------
  652.   # ● 获取回避率
  653.   #--------------------------------------------------------------------------
  654.   def eva
  655.     n = 5
  656.     for e in equips.compact do n += e.eva end
  657.     return n
  658.   end
  659.   #--------------------------------------------------------------------------
  660.   # ● 获取会心一击概率
  661.   #--------------------------------------------------------------------------
  662.   def cri
  663.     n = 4
  664.     n += 4 if actor.critical_bonus
  665.     for e in equips.compact do n += e.cri end
  666.     return n
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ● 获取更多经验值
  670.   #--------------------------------------------------------------------------
  671.   def exp_added
  672.     exp = 100
  673.     for equip in equips.compact
  674.       exp += equip.exp
  675.     end
  676.     return exp
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ● 获取高级物品暴率
  680.   #--------------------------------------------------------------------------
  681.   def equip_chance
  682.     equip_chance = 50
  683.     for equip in equips.compact
  684.       equip_chance += equip.equip_chance
  685.     end
  686.     return equip_chance
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ● 获得经验值 (考虑到附加经验值)
  690.   #     exp  : 经验值增加量
  691.   #     show : 显示升级标志
  692.   #--------------------------------------------------------------------------
  693.   def gain_exp(exp, show)
  694.     change_exp(@exp + exp * exp_added, show)
  695.   end
  696. end
  697. #==============================================================================
  698. # ■ Game_Actor
  699. #==============================================================================
  700. class Game_Actor < Game_Battler
  701.   #--------------------------------------------------------------------------
  702.   # ● 初始化对象
  703.   #     actor_id : 角色 ID
  704.   #--------------------------------------------------------------------------
  705.   def initialize(actor_id)
  706.     super()
  707.     setup(actor_id)
  708.     @last_skill_id = 0
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ● 设置
  712.   #     actor_id : 角色 ID
  713.   #--------------------------------------------------------------------------
  714.   def setup(actor_id)
  715.     actor = $data_actors[actor_id]
  716.     @actor_id = actor_id
  717.     @name = actor.name
  718.     @character_name = actor.character_name
  719.     @character_index = actor.character_index
  720.     @face_name = actor.face_name
  721.     @face_index = actor.face_index
  722.     @class_id = actor.class_id
  723.     @weapon_id = actor.weapon_id
  724.     @armor1_id = actor.armor1_id
  725.     @armor2_id = actor.armor2_id
  726.     @armor3_id = actor.armor3_id
  727.     @armor4_id = actor.armor4_id
  728.     @level = actor.initial_level
  729.     @exp_list = Array.new(101)
  730.     make_exp_list
  731.     @exp = @exp_list[@level]
  732.     @skills = []
  733.     for i in self.class.learnings
  734.       learn_skill(i.skill_id) if i.level <= @level
  735.     end
  736.     clear_extra_values
  737.     recover_all
  738.     ## 生成新装备id
  739.     reset_equip_id
  740.   end
  741.   #--------------------------------------------------------------------------
  742.   # ● 装备重设
  743.   #--------------------------------------------------------------------------
  744.   def reset_equip_id
  745.     @weapon_id = Game_Equip.reini_id(@weapon_id, 0)
  746.     @armor1_id = Game_Equip.reini_id(@armor1_id, two_hands_legal? ? 0 : 1)
  747.     @armor2_id = Game_Equip.reini_id(@armor2_id, 1)
  748.     @armor3_id = Game_Equip.reini_id(@armor3_id, 1)
  749.     @armor4_id = Game_Equip.reini_id(@armor4_id, 1)
  750.   end
  751.   #--------------------------------------------------------------------------
  752.   # ● 判断是否可以装备
  753.   #     item : 物品
  754.   #     base : 是否读取母版数据
  755.   #--------------------------------------------------------------------------
  756.   def equippable?(item, base = true)
  757.     id = base ? item.base_id : item.id
  758.     if item.is_a?(RPG::Weapon)
  759.       return self.class.weapon_set.include?(id)
  760.     elsif item.is_a?(RPG::Armor)
  761.       return false if two_swords_style and item.kind == 0
  762.       return self.class.armor_set.include?(id)
  763.     end
  764.     return false
  765.   end
  766.   #--------------------------------------------------------------------------
  767.   # ● 更改装备 (指定对象)
  768.   #     equip_type : 装备部位 (0..4)
  769.   #     item       : 武器 or 防具 (nil 为解除装备)
  770.   #     test       : 测试标志 (战斗测试、以及装备画面的临时装备)
  771.   #--------------------------------------------------------------------------
  772.   def change_equip(equip_type, item, test = false)
  773.     last_item = equips[equip_type]
  774.     unless test
  775.       return if $game_party.item_number(item) == 0 if item != nil
  776.       $game_party.gain_item(last_item, 1)
  777.       $game_party.lose_item(item, 1)
  778.       last_item.actor_id = nil unless last_item.nil?
  779.     end
  780.     item_id = item == nil ? 0 : item.id
  781.     case equip_type
  782.     when 0  # 武器
  783.       @weapon_id = item_id
  784.       unless two_hands_legal?             # 违反双手拿取的情况下
  785.         change_equip(1, nil, test)        # 解除反手的装备
  786.       end
  787.     when 1  # 盾
  788.       @armor1_id = item_id
  789.       unless two_hands_legal?             # 违反双手拿取的情况下
  790.         change_equip(0, nil, test)        # 解除反手的装备
  791.       end
  792.     when 2  # 头
  793.       @armor2_id = item_id
  794.     when 3  # 身体
  795.       @armor3_id = item_id
  796.     when 4  # 装饰品
  797.       @armor4_id = item_id
  798.     end
  799.     item.actor_id = self.id unless item.nil?
  800.   end
  801. end
  802. #==============================================================================
  803. # ■ Game_Party
  804. #==============================================================================
  805. class Game_Party < Game_Unit
  806.   #--------------------------------------------------------------------------
  807.   # ● 判断持有的物品
  808.   #     item          : 物品
  809.   #     include_equip : 包括装备品
  810.   #--------------------------------------------------------------------------
  811.   def has_item_by_base_id?(item, include_equip = false)
  812.     for i in items
  813.       return true if i.base_id == item.id
  814.     end
  815.     if include_equip
  816.       for actor in members
  817.         for e in actor.equips
  818.           return true if e.base_id == item.id
  819.         end  
  820.       end
  821.     end
  822.     return false
  823.   end
  824.   #--------------------------------------------------------------------------
  825.   # ● 获得物品
  826.   #     item          : 物品
  827.   #     n             : 个数
  828.   #--------------------------------------------------------------------------
  829.   def gain_reini(item, n, include_equip = false, *gift)
  830.     if n < 0
  831.       lose_item(item, -n, include_equip = false)
  832.     else
  833.       case item
  834.       when RPG::Item
  835.         number = item_number(item)
  836.         @items[item.id] = [[number + n, 0].max, 99].min
  837.       when RPG::Weapon
  838.         for i in 0...n
  839.           w = Game_Equip.reini(item, *gift)
  840.           @weapons[w.id] = 1
  841.         end
  842.       when RPG::Armor
  843.         for i in 0...n
  844.           a = Game_Equip.reini(item, *gift)
  845.           @armors[a.id] = 1
  846.         end
  847.       end
  848.     end
  849.   end
  850.   #--------------------------------------------------------------------------
  851.   # ● 减少物品 (减少)
  852.   #     item          : 物品
  853.   #     n             : 个数
  854.   #     include_equip : 包括装备品
  855.   #--------------------------------------------------------------------------
  856.   def lose_reini(item, n, include_equip = false)
  857.     number = item_number(item)
  858.     case item
  859.     when RPG::Item
  860.       @items[item.id] = [[number - n, 0].max, 99].min
  861.     when RPG::Weapon
  862.       @weapons[item.id] = [[number - n, 0].max, 99].min
  863.     when RPG::Armor
  864.       @armors[item.id] = [[number - n, 0].max, 99].min
  865.     end
  866.     n -= number
  867.     if include_equip and n > 0
  868.       for actor in members
  869.         while n > 0 and actor.equips.include?(item)
  870.           actor.discard_equip(item)
  871.           n -= 1
  872.         end
  873.       end
  874.     end
  875.   end
  876.   #--------------------------------------------------------------------------
  877.   # ● 获得物品
  878.   #     item_id       : 物品id
  879.   #     type          : 类型(0物品, 1武器, 2防具)
  880.   #     n             : 个数
  881.   #--------------------------------------------------------------------------
  882.   def gain_reini_byid(item_id, type, n, include_equip = false, *gift)
  883.     case type
  884.     when 0
  885.       item = $data_items[item_id]
  886.     when 1
  887.       item = $base_weapons[item_id]
  888.     when 2
  889.       item = $base_armors[item_id]
  890.     end
  891.     gain_reini(item, n, include_equip, *gift)
  892.   end
  893.   #--------------------------------------------------------------------------
  894.   # ● 极品爆率
  895.   #--------------------------------------------------------------------------
  896.   def equip_chance
  897.     chance = Game_Equip::Equip_Chance[0]
  898.     members.each {|actor| chance += actor.equip_chance}
  899.     return chance
  900.   end
  901. end
  902. #==============================================================================
  903. # ■ Game_Troop
  904. #==============================================================================
  905. class Game_Troop < Game_Unit
  906.   #--------------------------------------------------------------------------
  907.   # ● 敌人角色名称后的文字表
  908.   #--------------------------------------------------------------------------
  909.   LETTER_TABLE = [ 'A','B','C','D','E','F','G','H','I','J',
  910.                    'K','L','M','N','O','P','Q','R','S','T',
  911.                    'U','V','W','X','Y','Z']
  912.   #--------------------------------------------------------------------------
  913.   # ● 生成掉落物品队列
  914.   #--------------------------------------------------------------------------
  915.   def make_drop_items
  916.     drop_items = []
  917.     for enemy in dead_members
  918.       for di in [enemy.drop_item1, enemy.drop_item2]
  919.         next if di.kind == 0
  920.         next if rand(di.denominator) != 0
  921.         if di.kind == 1
  922.           drop_items.push($data_items[di.item_id])
  923.         elsif di.kind == 2
  924.           item = reini_chance($base_weapons[di.weapon_id], $game_party.equip_chance)
  925.           drop_items.push(item)
  926.         elsif di.kind == 3
  927.           item = reini_chance($base_armors[di.weapon_id], $game_party.equip_chance)
  928.           drop_items.push(item)
  929.         end
  930.       end
  931.     end
  932.     return drop_items
  933.   end
  934.   #--------------------------------------------------------------------------
  935.   # ● 处理极品爆率
  936.   #--------------------------------------------------------------------------
  937.   def reini_chance(item, chance)
  938.     @item = item
  939.     @chance = [chance/100.0, Game_Equip::Equip_Chance[1]/100.0].min
  940.     @gifts = []
  941.     loop do
  942.       if rand(0) < @chance and @gifts.size < Game_Equip::GiftMax
  943.         @gifts << Game_Gift.new
  944.         @chance /= 2
  945.       else
  946.         return Game_Equip.reini(@item, @gifts)
  947.       end
  948.     end
  949.   end
  950. end
  951. #==============================================================================
  952. # ■ Game_Interpreter
  953. #==============================================================================
  954. class Game_Interpreter
  955.   #--------------------------------------------------------------------------
  956.   # ● 计算操作的值
  957.   #     operation    : 操作 (0:增加 1:减少)
  958.   #     operand_type : 运算域类型 (0:常量 1:变量)
  959.   #     operand      : 运算域 (数值为变量 ID)
  960.   #--------------------------------------------------------------------------
  961.   def operate_value(operation, operand_type, operand)
  962.     if operand_type == 0
  963.       value = operand
  964.     else
  965.       value = $game_variables[operand]
  966.     end
  967.     if operation == 1
  968.       value = -value
  969.     end
  970.     return value
  971.   end
  972.   #--------------------------------------------------------------------------
  973.   # ● 条件分歧
  974.   #--------------------------------------------------------------------------
  975.   def command_111
  976.     result = false
  977.     case @params[0]
  978.     when 0  # 开关
  979.       result = ($game_switches[@params[1]] == (@params[2] == 0))
  980.     when 1  # 变量
  981.       value1 = $game_variables[@params[1]]
  982.       if @params[2] == 0
  983.         value2 = @params[3]
  984.       else
  985.         value2 = $game_variables[@params[3]]
  986.       end
  987.       case @params[4]
  988.       when 0  # 相等
  989.         result = (value1 == value2)
  990.       when 1  # 大于等于
  991.         result = (value1 >= value2)
  992.       when 2  # 小于等于
  993.         result = (value1 <= value2)
  994.       when 3  # 大于
  995.         result = (value1 > value2)
  996.       when 4  # 小于
  997.         result = (value1 < value2)
  998.       when 5  # 不等于
  999.         result = (value1 != value2)
  1000.       end
  1001.     when 2  # 自我开关
  1002.       if @original_event_id > 0
  1003.         key = [@map_id, @original_event_id, @params[1]]
  1004.         if @params[2] == 0
  1005.           result = ($game_self_switches[key] == true)
  1006.         else
  1007.           result = ($game_self_switches[key] != true)
  1008.         end
  1009.       end
  1010.     when 3  # 计时器
  1011.       if $game_system.timer_working
  1012.         sec = $game_system.timer / Graphics.frame_rate
  1013.         if @params[2] == 0
  1014.           result = (sec >= @params[1])
  1015.         else
  1016.           result = (sec <= @params[1])
  1017.         end
  1018.       end
  1019.     when 4  # 角色
  1020.       actor = $game_actors[@params[1]]
  1021.       if actor != nil
  1022.         case @params[2]
  1023.         when 0  # 是同伴
  1024.           result = ($game_party.members.include?(actor))
  1025.         when 1  # 姓名
  1026.           result = (actor.name == @params[3])
  1027.         when 2  # 特技
  1028.           result = (actor.skill_learn?($data_skills[@params[3]]))
  1029.         when 3  # 武器
  1030.           ## 判断是否符合母版id
  1031.           actor.weapons.each do |weapon|
  1032.             next if weapon.nil?
  1033.             if weapon.base_id == @params[3]
  1034.               result = true
  1035.               break
  1036.             end
  1037.           end
  1038.         when 4  # 防具
  1039.           ## 判断是否符合母版id
  1040.           actor.armors.each do |armor|
  1041.             next if armor.nil?
  1042.             if armor.base_id == @params[3]
  1043.               result = true
  1044.               break
  1045.             end
  1046.           end
  1047.         when 5  # 状态
  1048.           result = (actor.state?(@params[3]))
  1049.         end
  1050.       end
  1051.     when 5  # 敌方角色
  1052.       enemy = $game_troop.members[@params[1]]
  1053.       if enemy != nil
  1054.         case @params[2]
  1055.         when 0  # 出现
  1056.           result = (enemy.exist?)
  1057.         when 1  # 状态
  1058.           result = (enemy.state?(@params[3]))
  1059.         end
  1060.       end
  1061.     when 6  # 角色
  1062.       character = get_character(@params[1])
  1063.       if character != nil
  1064.         result = (character.direction == @params[2])
  1065.       end
  1066.     when 7  # 金钱
  1067.       if @params[2] == 0
  1068.         result = ($game_party.gold >= @params[1])
  1069.       else
  1070.         result = ($game_party.gold <= @params[1])
  1071.       end
  1072.     when 8  # 物品
  1073.       result = $game_party.has_item?($data_items[@params[1]])
  1074.     when 9  # 武器
  1075.       result = $game_party.has_item_by_base_id?($base_weapons[@params[1]], @params[2])
  1076.     when 10  # 防具
  1077.       result = $game_party.has_item_by_base_id?($base_armors[@params[1]], @params[2])
  1078.     when 11  # 按钮
  1079.       result = Input.press?(@params[1])
  1080.     when 12  # 脚本
  1081.       result = eval(@params[1])
  1082.     when 13  # 交通工具
  1083.       result = ($game_player.vehicle_type == @params[1])
  1084.     end
  1085.     @branch[@indent] = result     # 将判断结果放置在缓存中
  1086.     if @branch[@indent] == true
  1087.       @branch.delete(@indent)
  1088.       return true
  1089.     end
  1090.     return command_skip
  1091.   end
  1092.   
  1093.   
  1094.   #--------------------------------------------------------------------------
  1095.   # ● 计算装备操作的值
  1096.   #     operand_type : 运算域类型 (0:常量 1:变量)
  1097.   #     operand      : 运算域 (数值为变量 ID)
  1098.   #--------------------------------------------------------------------------
  1099.   def opera_equip_value(operation, operand_type, operand)
  1100.     if operand_type == 0
  1101.       value = operand
  1102.     else
  1103.       value = $game_variables[operand]
  1104.     end
  1105.     return value
  1106.   end
  1107.   #--------------------------------------------------------------------------
  1108.   # ● 增减武器
  1109.   #--------------------------------------------------------------------------
  1110.   def command_127
  1111.     value = operate_value(@params[1], @params[2], @params[3])
  1112.     if @params[1] == 0
  1113.       $game_party.gain_reini($base_weapons[@params[0]], value.abs, @params[4])
  1114.     else
  1115.       $game_party.lose_reini($base_weapons[@params[0]], value.abs, @params[4])
  1116.     end
  1117.     return true
  1118.   end
  1119.   #--------------------------------------------------------------------------
  1120.   # ● 增减防具
  1121.   #--------------------------------------------------------------------------
  1122.   def command_128
  1123.     value = operate_value(@params[1], @params[2], @params[3])
  1124.     if @params[1] == 0
  1125.       $game_party.gain_reini($base_armors[@params[0]], value.abs, @params[4])
  1126.     else
  1127.       $game_party.lose_reini($base_armors[@params[0]], value.abs, @params[4])
  1128.     end
  1129.     return true
  1130.   end
  1131.   #--------------------------------------------------------------------------
  1132.   # ● 更改装备
  1133.   #--------------------------------------------------------------------------
  1134.   def command_319
  1135.     actor = $game_actors[@params[0]]
  1136.     if actor != nil
  1137.       actor.change_equip_by_id(@params[1], @params[2])
  1138.     end
  1139.     return true
  1140.   end
  1141.   #--------------------------------------------------------------------------
  1142.   # ● 增减武器
  1143.   #--------------------------------------------------------------------------
  1144.   def get_weapon(id, n, *gift)
  1145.     $game_party.gain_reini($base_weapons[id], n, false, *gift)
  1146.   end
  1147.   #--------------------------------------------------------------------------
  1148.   # ● 增减防具
  1149.   #--------------------------------------------------------------------------
  1150.   def get_armor(id, n, *gift)
  1151.     $game_party.gain_reini($base_armors[id], n, false, *gift)
  1152.   end
  1153. end
  1154. #==============================================================================
  1155. # ■ Window_Base
  1156. #==============================================================================
  1157. class Window_Base < Window
  1158.   def draw_item_name(item, x, y, enabled = true)
  1159.     if item != nil
  1160.       draw_icon(item.icon_index, x, y, enabled)
  1161.       self.contents.font.color = text_color(item.text_color.to_i)
  1162.       self.contents.font.color.alpha = enabled ? 255 : 128
  1163.       self.contents.draw_text(x + 24, y, 172, WLH, item.name)
  1164.     end
  1165.   end
  1166. end
  1167. #==============================================================================
  1168. # ■ Window_ShopBuy
  1169. #==============================================================================
  1170. class Window_ShopBuy < Window_Selectable
  1171.   #--------------------------------------------------------------------------
  1172.   # ● 刷新
  1173.   #--------------------------------------------------------------------------
  1174.   def refresh
  1175.     @data = []
  1176.     for goods_item in @shop_goods
  1177.       case goods_item[0]
  1178.       when 0
  1179.         item = $base_items[goods_item[1]]
  1180.       when 1
  1181.         item = $base_weapons[goods_item[1]]
  1182.       when 2
  1183.         item = $base_armors[goods_item[1]]
  1184.       end
  1185.       if item != nil
  1186.         @data.push(item)
  1187.       end
  1188.     end
  1189.     @item_max = @data.size
  1190.     create_contents
  1191.     for i in 0...@item_max
  1192.       draw_item(i)
  1193.     end
  1194.   end
  1195. end
  1196. #==============================================================================
  1197. # ■ Window_ShopStatus
  1198. #==============================================================================
  1199. class Window_ShopStatus < Window_Base
  1200.   #--------------------------------------------------------------------------
  1201.   # ● 描绘角色现在装备的能力值变化
  1202.   #     actor : 角色
  1203.   #     x     : 描画目标 X 坐标
  1204.   #     y     : 描画目标 Y 坐标
  1205.   #--------------------------------------------------------------------------
  1206.   def draw_actor_parameter_change(actor, x, y)
  1207.     return if @item.is_a?(RPG::Item)
  1208.     enabled = actor.equippable?(@item, false)
  1209.     self.contents.font.color = normal_color
  1210.     self.contents.font.color.alpha = enabled ? 255 : 128
  1211.     self.contents.draw_text(x, y, 200, WLH, actor.name)
  1212.     if @item.is_a?(RPG::Weapon)
  1213.       item1 = weaker_weapon(actor)
  1214.     elsif actor.two_swords_style and @item.kind == 0
  1215.       item1 = nil
  1216.     else
  1217.       item1 = actor.equips[1 + @item.kind]
  1218.     end
  1219.     if enabled
  1220.       if @item.is_a?(RPG::Weapon)
  1221.         atk1 = item1 == nil ? 0 : item1.atk
  1222.         atk2 = @item == nil ? 0 : @item.atk
  1223.         change = atk2 - atk1
  1224.       else
  1225.         def1 = item1 == nil ? 0 : item1.def
  1226.         def2 = @item == nil ? 0 : @item.def
  1227.         change = def2 - def1
  1228.       end
  1229.       self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2)
  1230.     end
  1231.     draw_item_name(item1, x, y + WLH, enabled)
  1232.   end
  1233. end
  1234. #==============================================================================
  1235. # ■ Scene_File
  1236. #==============================================================================
  1237. class Scene_File < Scene_Base
  1238.   #--------------------------------------------------------------------------
  1239.   # ● 写入存档数据
  1240.   #     file : 写入文件用对象 (已经打开)
  1241.   #--------------------------------------------------------------------------
  1242.   def write_save_data(file)
  1243.     characters = []
  1244.     for actor in $game_party.members
  1245.       characters.push([actor.character_name, actor.character_index])
  1246.     end
  1247.     $game_system.save_count += 1
  1248.     $game_system.version_id = $data_system.version_id
  1249.     @last_bgm = RPG::BGM::last
  1250.     @last_bgs = RPG::BGS::last
  1251.     Marshal.dump(characters,           file)
  1252.     Marshal.dump(Graphics.frame_count, file)
  1253.     Marshal.dump(@last_bgm,            file)
  1254.     Marshal.dump(@last_bgs,            file)
  1255.     Marshal.dump($game_system,         file)
  1256.     Marshal.dump($game_message,        file)
  1257.     Marshal.dump($game_switches,       file)
  1258.     Marshal.dump($game_variables,      file)
  1259.     Marshal.dump($game_self_switches,  file)
  1260.     Marshal.dump($game_actors,         file)
  1261.     Marshal.dump($game_party,          file)
  1262.     Marshal.dump($game_troop,          file)
  1263.     Marshal.dump($game_map,            file)
  1264.     Marshal.dump($game_player,         file)
  1265.     Marshal.dump($data_weapons,        file)
  1266.     Marshal.dump($data_armors,         file)
  1267.   end
  1268.   #--------------------------------------------------------------------------
  1269.   # ● 读取存档数据
  1270.   #     file : 读取文件用对象 (已经打开)
  1271.   #--------------------------------------------------------------------------
  1272.   def read_save_data(file)
  1273.     characters           = Marshal.load(file)
  1274.     Graphics.frame_count = Marshal.load(file)
  1275.     @last_bgm            = Marshal.load(file)
  1276.     @last_bgs            = Marshal.load(file)
  1277.     $game_system         = Marshal.load(file)
  1278.     $game_message        = Marshal.load(file)
  1279.     $game_switches       = Marshal.load(file)
  1280.     $game_variables      = Marshal.load(file)
  1281.     $game_self_switches  = Marshal.load(file)
  1282.     $game_actors         = Marshal.load(file)
  1283.     $game_party          = Marshal.load(file)
  1284.     $game_troop          = Marshal.load(file)
  1285.     $game_map            = Marshal.load(file)
  1286.     $game_player         = Marshal.load(file)
  1287.     $data_weapons        = Marshal.load(file)
  1288.     $data_armors         = Marshal.load(file)
  1289.     if $game_system.version_id != $data_system.version_id
  1290.       $game_map.setup($game_map.map_id)
  1291.       $game_player.center($game_player.x, $game_player.y)
  1292.     end
  1293.   end
  1294. end
  1295. #==============================================================================
  1296. # ■ Scene_Shop
  1297. #==============================================================================
  1298. class Scene_Shop < Scene_Base
  1299.   #--------------------------------------------------------------------------
  1300.   # ● 确定输入个数
  1301.   #--------------------------------------------------------------------------
  1302.   def decide_number_input
  1303.     Sound.play_shop
  1304.     @number_window.active = false
  1305.     @number_window.visible = false
  1306.     case @command_window.index
  1307.     when 0  # 购买
  1308.       $game_party.lose_gold(@number_window.number * @item.price)
  1309.       $game_party.gain_reini(@item, @number_window.number)
  1310.       @gold_window.refresh
  1311.       @buy_window.refresh
  1312.       @status_window.refresh
  1313.       @buy_window.active = true
  1314.       @buy_window.visible = true
  1315.     when 1  # 卖出
  1316.       $game_party.gain_gold(@number_window.number * (@item.price / 2))
  1317.       $game_party.lose_reini(@item, @number_window.number)
  1318.       @gold_window.refresh
  1319.       @sell_window.refresh
  1320.       @status_window.refresh
  1321.       @sell_window.active = true
  1322.       @sell_window.visible = true
  1323.       @status_window.visible = false
  1324.     end
  1325.   end
  1326. end
  1327. #==============================================================================
  1328. # ■ Scene_Title
  1329. #==============================================================================
  1330. class Scene_Title < Scene_Base
  1331.   #--------------------------------------------------------------------------
  1332.   # ● 载入数据库
  1333.   #--------------------------------------------------------------------------
  1334.   def load_database
  1335.     $data_actors        = load_data("Data/Actors.rvdata")
  1336.     $data_classes       = load_data("Data/Classes.rvdata")
  1337.     $data_skills        = load_data("Data/Skills.rvdata")
  1338.     $data_items         = load_data("Data/Items.rvdata")
  1339.     $base_weapons       = load_data("Data/Weapons.rvdata")
  1340.     $base_armors        = load_data("Data/Armors.rvdata")
  1341.     $data_enemies       = load_data("Data/Enemies.rvdata")
  1342.     $data_troops        = load_data("Data/Troops.rvdata")
  1343.     $data_states        = load_data("Data/States.rvdata")
  1344.     $data_animations    = load_data("Data/Animations.rvdata")
  1345.     $data_common_events = load_data("Data/CommonEvents.rvdata")
  1346.     $data_system        = load_data("Data/System.rvdata")
  1347.     $data_areas         = load_data("Data/Areas.rvdata")
  1348.     $data_weapons       = [nil]
  1349.     $data_armors        = [nil]
  1350.   end
  1351.   #--------------------------------------------------------------------------
  1352.   # ● 载入战斗测试用的数据库
  1353.   #--------------------------------------------------------------------------
  1354.   def load_bt_database
  1355.     $data_actors        = load_data("Data/BT_Actors.rvdata")
  1356.     $data_classes       = load_data("Data/BT_Classes.rvdata")
  1357.     $data_skills        = load_data("Data/BT_Skills.rvdata")
  1358.     $data_items         = load_data("Data/BT_Items.rvdata")
  1359.     $data_weapons       = load_data("Data/BT_Weapons.rvdata")
  1360.     $data_armors        = load_data("Data/BT_Armors.rvdata")
  1361.     $data_enemies       = load_data("Data/BT_Enemies.rvdata")
  1362.     $data_troops        = load_data("Data/BT_Troops.rvdata")
  1363.     $data_states        = load_data("Data/BT_States.rvdata")
  1364.     $data_animations    = load_data("Data/BT_Animations.rvdata")
  1365.     $data_common_events = load_data("Data/BT_CommonEvents.rvdata")
  1366.     $data_system        = load_data("Data/BT_System.rvdata")
  1367.     $base_weapons       = $data_weapons
  1368.     $base_armors        = $data_armors
  1369.   end
  1370. end
复制代码

作者: 各种压力的猫君    时间: 2011-9-18 22:11
本帖最后由 各种压力的猫君 于 2011-9-19 10:07 编辑

附件没坏 = = |b 2L你又误导我

改好了 - - 用这个脚本替换你原来的得失物品

问题不在得失物品 = = 帖下原脚本的链接

原脚本:http://rpg.blue/forum.php?mod=viewthread&tid=123046

解答无力 = = 这脚本写得太乱了……BUG一箩筐啊……等高人……
作者: 怪蜀黍    时间: 2011-9-19 10:23
本帖最后由 protosssonny 于 2011-9-19 10:26 编辑
各种压力的猫君 发表于 2011-9-18 22:11
附件没坏 = = |b 2L你又误导我

改好了 - - 用这个脚本替换你原来的得失物品


我昨天琢磨了一下午,发现其实问题就在于以下脚本中的2句话怎么写:
  1. #--------------------------------------------------------------------------
  2.   # ● 增減武器
  3.   #--------------------------------------------------------------------------
  4.   def command_127
  5.     value = operate_value(@params[1], @params[2], @params[3])
  6.     if @params[1] == 0
  7.       $game_party.gain_reini($base_weapons[@params[0]], value.abs, @params[4])
  8.     else
  9.       $game_party.lose_reini($base_weapons[@params[0]], value.abs, @params[4])
  10.     end
  11.     if $game_switches[$noshowweapon]==false
  12.       show_gain_window(2, value)
  13.     end
  14.     return true
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 增減防具
  18.   #--------------------------------------------------------------------------
  19.   def command_128
  20.     value = operate_value(@params[1], @params[2], @params[3])
  21.     if @params[1] == 0
  22.       $game_party.gain_reini($base_armors[@params[0]], value.abs, @params[4])
  23.     else
  24.       $game_party.lose_reini($base_armors[@params[0]], value.abs, @params[4])   
  25.     end
  26.     if $game_switches[$noshowarmor]==false
  27.       show_gain_window(3, value)
  28.     end
  29.     return true
  30.   end
复制代码
这2句话分别是:
$game_party.lose_reini($base_weapons[@params[0]], value.abs, @params[4])
$game_party.lose_reini($base_armors[@params[0]], value.abs, @params[4])

因为商店卖东西的时候,这样写是可以减少物品的:
$game_party.lose_reini(@item, @number_window.number)
商店脚本贴出:
  1. #==============================================================================
  2. # ■ Scene_Shop
  3. #==============================================================================
  4. class Scene_Shop < Scene_Base
  5.   #--------------------------------------------------------------------------
  6.   # ● 确定输入个数
  7.   #--------------------------------------------------------------------------
  8.   def decide_number_input
  9.     Sound.play_shop
  10.     @number_window.active = false
  11.     @number_window.visible = false
  12.     case @command_window.index
  13.     when 0  # 购买
  14.       $game_party.lose_gold(@number_window.number * @item.price)
  15.       $game_party.gain_reini(@item, @number_window.number)
  16.       @gold_window.refresh
  17.       @buy_window.refresh
  18.       @status_window.refresh
  19.       @buy_window.active = true
  20.       @buy_window.visible = true
  21.     when 1  # 卖出
  22.       $game_party.gain_gold(@number_window.number * (@item.price / 2))
  23.       $game_party.lose_reini(@item, @number_window.number)
  24.       @gold_window.refresh
  25.       @sell_window.refresh
  26.       @status_window.refresh
  27.       @sell_window.active = true
  28.       @sell_window.visible = true
  29.       @status_window.visible = false
  30.     end
  31.   end
  32. end
复制代码
本脚本中 lose_reini的定义贴出:
  1. #--------------------------------------------------------------------------
  2.   # ● 减少物品 (减少)
  3.   #     item          : 物品
  4.   #     n             : 个数
  5.   #     include_equip : 包括装备品
  6.   #--------------------------------------------------------------------------
  7.   def lose_reini(item, n, include_equip = false)
  8.     number = item_number(item)
  9.     case item
  10.     when RPG::Item
  11.       @items[item.id] = [[number - n, 0].max, 9999].min
  12.     when RPG::Weapon
  13.       @weapons[item.id] = [[number - n, 0].max, 9999].min
  14.     when RPG::Armor
  15.       @armors[item.id] = [[number - n, 0].max, 9999].min
  16.     end
  17.     n -= number
  18.     if include_equip and n > 0
  19.       for actor in members
  20.         while n > 0 and actor.equips.include?(item)
  21.           actor.discard_equip(item)
  22.           n -= 1
  23.         end
  24.       end
  25.     end
  26.   end
复制代码
请求帮助啊:handshake


protosssonny于2011-9-19 16:59补充以下内容:
经过近一天的努力修改和测试,终于达到减少防具目的了。因为我只需要事件“减少防具”命令生效,所以关于减少武器的脚本我就懒得去修改了,只改了防具的。:P
  1. class Game_Party < Game_Unit
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像,我增加最后两行
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super
  7.     @gold = 0
  8.     @steps = 0
  9.     @last_item_id = 0
  10.     @last_actor_index = 0
  11.     @last_target_index = 0
  12.     @actors = []      # 队员(角色ID)
  13.     @items = {}       # 物品哈希列表(物品ID)
  14.     @weapons = {}     # 物品哈希列表(武器ID)
  15.     @armors = {}      # 物品哈希列表(防具ID)
  16.     @armor = []       #我加的,配合下面的def [](armor_id)
  17.     @item = []        #我加的,配合下面的def [](armor_id)
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # 我加的,随机属性减少防具时调用
  21.   #--------------------------------------------------------------------------
  22.   def [](armor_id)                  
  23.     if @armor[armor_id] == nil
  24.       return 0
  25.     else
  26.       return @armor[armor_id]
  27.     end
  28.   end
  29. end

  30. class Game_Party < Game_Unit
  31.   #--------------------------------------------------------------------------
  32.   # ● 获得物品
  33.   #     item          : 物品
  34.   #     n             : 个数
  35.   #--------------------------------------------------------------------------
  36.   def gain_reini(item, n, include_equip = false, *gift)
  37.     if n < 0
  38.       lose_item(item, -n, include_equip = false)
  39.     else
  40.       case item
  41.       when RPG::Item
  42.         number = item_number(item)
  43.         @items[item.id] = [[number + n, 0].max, 9999].min
  44.       when RPG::Weapon
  45.         for i in 0...n
  46.           w = Game_Equip.reini(item, *gift)
  47.           @weapons[w.id] = 1
  48.         end
  49.       when RPG::Armor
  50.         j = 1
  51.         for i in 0...n
  52.           while @item[j] != 0
  53.             break if @item[j] == nil
  54.             j += 1
  55.           end
  56.           @item[j] = item
  57.           @armor[j] = a = Game_Equip.reini(item, *gift)
  58.           @armors[a.id] = 1
  59.         end
  60.       end
  61.     end
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 减少物品 (减少),我追加定义的,只对防具减少有效,为了不与商店卖东西冲突
  65.   #     item          : 物品
  66.   #     n             : 个数
  67.   #     include_equip : 包括装备品
  68.   #--------------------------------------------------------------------------
  69.   def armor_lose_reini(item, n, include_equip = false)
  70.     number = item_number(item)
  71.     case item
  72.     when RPG::Item
  73.       @items[item.id] = [[number - n, 0].max, 9999].min
  74.     when RPG::Weapon
  75.       @weapons[item.id] = [[number - n, 0].max, 9999].min
  76.     when RPG::Armor
  77.       for i in 1...100000    #设置足够大的数,一般经手的防具总数不可能超过十万
  78.         unless @armor[i] == nil
  79.           if @armor[i].base_id == item.id and @armors[@armor[i].id] == 1
  80.             @armors[@armor[i].id] = 0
  81.             n -= 1
  82.             break if n == 0
  83.           end
  84.         end  
  85.       end
  86.     end
  87.     n -= number
  88.     if include_equip and n > 0
  89.       for actor in members
  90.         while n > 0 and actor.equips.include?(item)
  91.           actor.discard_equip(item)
  92.           n -= 1
  93.         end
  94.       end
  95.     end
  96.   end
  97. end

  98. class Game_Interpreter
  99.   #--------------------------------------------------------------------------
  100.   # ● 增減防具
  101.   #--------------------------------------------------------------------------
  102.   def command_128
  103.     value = operate_value(@params[1], @params[2], @params[3])
  104.     if @params[1] == 0
  105.       $game_party.gain_reini($base_armors[@params[0]], value.abs, @params[4])
  106.     else
  107.       $game_party.armor_lose_reini($base_armors[@params[0]], value.abs, @params[4])
  108.     end
  109.     if $game_switches[$noshowarmor]==false
  110.       show_gain_window(3, value)
  111.     end
  112.     return true
  113.   end
  114. end
复制代码
虽然最后不是依靠您的帮助搞定的,但是还是要感谢您的热心回答,至少您是愿意帮助我的。呵呵。
答案以我的为准吧,但是分给您。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1