查看: 2137|回复: 0

[已经过期] 关于Emerald老师的装备套装 v2.1e

[复制链接]
梦石
0
星屑
319
在线时间
27 小时
注册时间
2021-8-13
回帖
2
发表于 2021-9-6 12:40:12 | 显示全部楼层 |阅读模式

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

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

×
Emerald老师的装备套装 v2.1e 套装的加成至少需要50,如果更低的话就无效,有什么解决办法吗
脚本#============================================================================
# 装备套装 v2.1e
# By Emerald
#----------------------------------------------------------------------------
# You're free to use the script for any game, as long as you give credits
#----------------------------------------------------------------------------
# Version History
# 1.0 -> Script fully ready for public use. Addes sets, unlimited set items,
#        set bonuses for the 8 basic stats, set bonuses requirement (how many
#        items of the set is the actor wearing?)
# 1.1 -> a. changed the set bonuses work. Instead of [parameter, bonus] you now
#        use [sort, parameter, bonus]. Also added sorts 0 and 2. Check SPECIAL
#        VALUES for their corresponding parameters.
#        b. Added sort 1: Standard Parameters (Percentage). The corresponding
#        parameters are the same as for sort 0. See SPECIAL VALUES for extra
#        notes.
# 1.2 -> Added Sort 3: Special Parameters. The values for the parameters can be
#        found in SPECIAL VALUES, just as usual. Addes Sort 4: Skills!! These
#        use a different syntax than the other bonuses, so be sure to check
#        SPECIAL VALUES if you are unfamiliar with them.
# 1.3 -> a. rewritten most of the code to remove so major bugs. Also cleaned
#        code (about 140 lines less this time, WITH 4 added Sorts). Added
#        Module Emerald (EME). Sets and Set_Bonuses move to Module EME. Added
#        MAX_ELEMENTS to Module EME. Added Sort 5 (Elemental Efficiency), Sort
#        6 (Debuff Rate), Sort 7 (State Rate), Sort 8 (State Resist) and Sort 9
#        (Attack Elements). See SPECIAL VALUES for instructions.
#        WARNING these are still in Beta Stage, so report all bugs found.  
#        b. removed many, MANY major bugs! Removed a bug where unequipping
#        resulted in an undefined array, removed some typos, fixed the bonuses
#        for almost EVERY Sort, removed some more typos, shortened code a little
#        bit, removed some more minor bugs regarding change_equip.
# 1.4 -> More bug fixes. Also added Sort 10 (Attack States), Sort 11 (Equipment
#        Types) and Sort 12 (Attack Specials). Refer to SPECIAL VALUES for
#        all needed information.
# 1.5 -> Bug fix to discard_equip(...). Added the foruth value of Sort 11
#        (Dual Wielding), added Sort 13, Sort 14, Sort 15, Sort 16 and Sort 17
#        which are Additional Skill Types, Sealed Skill Types, Sealed Skills,
#        Fixed Equip Types and Sealed Equip Types respectively. As usual, go to
#        SPECIAL VALUES for the needed instructions.
# 1.6 -> Added a compatibility patch for Fomar's Dual Wield -> Free Hands script.
# 1.7 -> Added Sorts 18 (special flags), 19 (party abilities) and 20 (other
#        traits). See SPECIAL VALUES for the instructions.
# 1.8a-> Added sounds to be played when a certain amount of set pieces has been
#        equipped. Also removed a bug regarding skipping amounts of pieces.
# 1.8b-> Small bugfix regarding set sounds.
# 1.8c-> Small bugfix regarding attack states.
#
# 2.0 -> MAJOR REWRITE. Aliased a few more methods than before, to further
#        increases compatability. Added a method which initializes sets which
#        are worn by actors at the start of the game. Halved the code used to
#        determine if items belong to sets. Scraped a few uneccessairy methods.
#        Practically removed 2/3 of my version of release_unequipable_equips,
#        and made the EES + Fomar123's Dual Wield -> Free Hands script patch
#        1 line instead of 10. Almost entirely changed the way Set Skills and
#        Set Equipment Options work. Also fixed a few bugs in the progress
#        (for example additions of variable 2 which I accidentally left in the
#        script.)
# 2.1a-> Start of the debugging patch. Added a function to remove bonuses when
#        unequipping stuff, like usual. Forgot to re-add in 2.0 >.<
# 2.1b-> Fixed a small typo.
# 2.1c-> Fixed initalizition of set equips.
# 2.1d-> Fixed a bug regarding bonuses not being applied upon optimizing equips
#        and a bug regarding the removing of bonuses when unequipping stuff.
# 2.1e-> Removed something which I should have added (regarding the BaseItem
#        class) in release_unequippable_items. This also fixed the compatibility
#        issues with Tsukihime's Effect Manager.
#----------------------------------------------------------------------------
# 开局一把铁剑? 还不错. 找到一把金剑?爽! 获得一个完整的青铜套?真是垃圾..
# 除非, 青铜套属性更强! 所以, 本脚本可以让玩家在装备一套装备时获得额外加成
# 有趣吧...
#----------------------------------------------------------------------------
#
# 使用方法:
#
# 和平常一样,将脚本放在“插件脚本”之下,Main之上,但是要放在所有重写
# change_equip 之下,放在所有别名Game_Actor中的'param'之上(一般在Game_BattlerBase
# 但是它只有在Game_Actor中重写或别名时才需要考虑)
#
# 在下面 module EME 中的 MAX_ELEMENTS 里设定最大属性数量,脚本会无视任何高于此
# 值的属性.
#
# 在下面的“▼设置套装”中设置套装id,套装包含哪些装备。
#
# 然后在下面的“▼设置套装加成”中设定套装加成。
#----------------------------------------------------------------------------
# Credits to:
# Lettuce, if it wasn't for his RMVX Item Sets script, I would not have learned
# how Arrays and Hashes work.
# Many members at www.rpgmakervxace.net for pointing out various bugs and whatnot.
# You for reading through the wall of text ^^ (at least... I hope you did that..)
#----------------------------------------------------------------------------
# If you have any issues with this script, contact me at
# http://www.rpgmakervxace.net/index.php?/topic/1092-ees-emeralds-equipment-sets/
#============================================================================
#
# 设定
#
#============================================================================
module EME
  
  MAX_ELEMENTS = 10  #最大属性数量(水、火这些)
  
#----------------------------------------------------------------------------
# ▼设置套装
#----------------------------------------------------------------------------
# Sets = {
#          套装id => [[装备类型, id]]
#        }
#
# 套装id必须大于0
# 装备类型可以是 0 (武器) 或 1 (护甲)
# 如果这一条不是最后一个,请在 ']' 后添加一个英文逗号
# 不要忘记在最后添加一个无法得到的物品! 否则,最后一个物品将计为两个!
#
#----------------------------------------------------------------------------
Sets = {
  1 => [[0, 1], [1, 1]], # 1号套装由:1号武器、2号护甲组成
  2 => [[0, 5], [0, 6], [1, 5], [1,7]]  # 2号套装由:5号武器、6号武器、5号护甲、
                                        # 7号护甲组成
       }
#----------------------------------------------------------------------------
# ▼设置套装加成
#----------------------------------------------------------------------------
# Set_Bonuses = {
#       套装id => {
#         需要最小部件数量 => [[类型, 参数, 加成]], [类型, 随机参数, 0]]
#                 }
#                }
# 套装id :顾名思义
# 需要最小部件数量:这一行加成只在玩家装备套装中至少n个装备时有效
#                   如果你希望跳过一个数量,使用 [0, 0, 0] 就好.
# 类型:设定加成的类型(说白了就是为角色添加某个特性)
#       所有可用类型数字请在下面的“★ 类型一览”中查看:
# 参数:替换为数字,不同的类型有不同的参数含义,详情请在下面的'★ 类型参数一览
#       中查看 .
# 加成:“参数”的变化量,如果等于0,则不改变参数,正值时则为正面加成
#        负值时为负面加成(或许就不能叫加成了).
# 随机参数:就是一个随机值,防止最后的加成翻倍,请确保后面是0
#
# 如果某一条不是最后一条,请在']' 或 '}' 的后面加上英文逗号,否则恭喜你报错了
#
# 别忘了在最后添加一个 [0, 0, 0] 的加成! 否则,最后的加成会翻倍 !
#==========================================
# ★ 类型一览:
#==========================================
# 0  - 普通能力
# 1  - 普通能力 (按百分比)
# 2  - 添加能力
# 3  - 特殊能力
# 4  - 添加技能 (警告, 格式不同!! 请在下面的“类型参数一览”中查看)
# 5  - 属性抗性
# 6  - 弱化抗性
# 7  - 状态抗性
# 8  - 状态免疫 (警告, 参数的功能不同!!)
# 9  - 攻击附加属性 (警告, 参数的功能不同!!)
# 10 - 攻击附加状态
# 11 - 装备类型 (警告, 格式不同!!请在下面的“装备类型”中查看)
# 12 - 攻击类
# 13 - 添加技能类型 (警告, 参数的功能不同!!)
# 14 - 禁用技能类型 (警告, 参数的功能不同!!)
# 15 - 禁用技能 (警告, 参数的功能不同!!)
# 16 - 固定装备 (警告, 参数的功能不同!!)
# 17 - 禁用装备 (警告, 参数的功能不同!!)
# 18 - 特殊标志 (警告, 参数的功能不同!!)
# 19 - 队伍能力 (警告, 参数的功能不同!!)
# 20 - 其他特性
#==========================================
#==========================================
# ★ 类型参数一览:
#==========================================
# 普通能力: (类型 0)
# 0 - 最大Hp
# 1 - 最大Mp
# 2 - 物理攻击
# 2 - 物理防御
# 4 - 魔法攻击
# 5 - 魔法防御
# 6 - 敏捷值
# 7 - 幸运值
#
# 普通能力 (按百分比): (类型 1)
# 0 - 最大Hp
# 1 - 最大Mp
# 2 - 物理攻击
# 2 - 物理防御
# 4 - 魔法攻击
# 5 - 魔法防御
# 6 - 敏捷值
# 7 - 幸运值
# 请注意最终能力值的计算方式:
# 基础值 + 装备加成 + 套装加成 (普通) + 套装加成 (按百分比,即 加成%
# (在 [1, 参数, 加成]) * 基础值 + 装备加成)
#
# 添加能力: (类型 2)
# 0 - 命中率
# 1 - 回避率
# 2 - 必杀几率
# 3 - 必杀闪避率
# 4 - 魔法闪避率
# 5 - 魔法反射率
# 6 - 物理反击几率
# 7 - HP 再生速度
# 8 - MP 再生速度
# 9 - TP 再生速度
#
# 特殊能力: (类型 3)
# 0 - 受到攻击几率
# 1 - 防御效果比率
# 2 - 恢复效果比率
# 3 - 药理知识
# 4 - 魔力值消耗率
# 5 - 特技值补充率
# 6 - 物理伤害加成
# 7 - 魔法伤害加成
# 8 - 地形伤害加成
# 9 - 经验获取加成
#
# 添加技能: (类型 4)
# 这些技能没有参数值。 相反,它们的数组中的最后两个元素具有与通常不同的效果:
# 添加技能没有参数,并且数组中的最后两个元素有特殊效果 :
# [类型 (4), -----, 技能id]
# 类型 = 你懂的
# ----- = 生效前, 但现在不需要了. 为了绕过将其更改为技能id的需要
#  (因为某些人使用了 v2.0 之前的版本), 这个变量被废弃了,并且没有被删除,
# 所以你填入任何东西都是可以的,甚至不是整数都行
# 技能Id = 角色将会领悟的技能的id
#
# 属性抗性: (类型 5)
# 参数 = 属性id . (所以不要用 0!!)
# 如果加成是负值, 角色对该属性抗性提升.
# 如果加成是正值, 角色对该属性抗性减弱. (= =)
#
# 弱化抗性: (类型 6)
# 0 - 最大Hp
# 1 - 最大Mp
# 2 - 物理攻击
# 3 - 物理防御
# 4 - 魔法攻击
# 5 - 魔法防御
# 6 - 敏捷值
# 7 - 幸运值
# 如果加成是负值, 角色对某个能力值弱化的抗性会增强
# 如果加成是正值, 角色对某个能力值弱化的抗性会减弱
#
# 状态抗性: (类型 7)
# 参数 = 状态id (所以不要用 0!!)
# 如果加成是负值, 角色对状态的抗性增强
# 如果加成是正值, 角色对状态的抗性减弱
#
# 状态免疫: (类型 8)
# 参数 = 状态id (所以不要用 0!!)
# 如果加成是正值, 角色对该状态完全免疫
# 如果加成是负值, 角色对该状态完全不免疫
#
# 攻击附加属性: (类型 9)
# 参数 = 属性id (所以不要用 0!!)
# 如果加成是正值, 攻击时有该属性
# 如果加成是负值, 攻击时无该属性
#
# 攻击附加状态: (类型 10)
# 参数 = 状态id (所以不要用 0!!)
# 加成 = 附加状态的几率.
#
# 装备类型: (类型 11)
# 0 = 添加武器类型
# 1 = 移除武器类型
# 2 = 添加护甲类型
# 3 = 移除护甲类型
# 4 = 允许武器双持
# 加成 = 装备类型id
# 请注意“移除”类型的效果会覆盖“添加”类型的效果.   
#
# 攻击类: (类型 12)
# 0 - 攻击速度
# 1 - 攻击次数
# 都为百分比. 所以如果要增加一次攻击次数, not 1 but 100.
#
# 添加技能类型: (类型 13)
# 参数 = 技能类型id (所以不要用 0!!)
# 如果加成是正值, 添加技能类型
# 如果加成是负值, 移除技能类型
#
# 禁用技能类型: (类型 14)
# 参数 = 技能类型id (所以不要用 0!!)
# 如果加成是正值,该技能类型被禁用,
# 如果加成是负值,该技能类型不会被禁用
#
# 禁用技能: (类型 15)
# 参数 = 技能id (所以不要用 0!!)
# 如果加成是正值,该技能被禁用,
# 如果加成是负值,该技能不会被禁用
#
# 固定装备类型: (类型 16)
# 参数 = 装备类型id (所以不要用 0!!)
# 如果加成是正值,该装备类型被固定,
# 如果加成是负值,该装备类型不会被固定
#
# 禁用装备类型: (类型 17)
# 参数 = 装备类型id (所以不要用 0!!)
# 如果加成是正值,该装备类型被禁用,
# 如果加成是负值,该装备类型不会被禁用
#
# 特殊标志: (类型 18)
# 0 - 自动战斗
# 1 - 擅长防御
# 2 - 保护弱者
# 3 - 特技专注
# 如果加成是正值或0,添加该特殊标志,
# 如果加成是负值,移除该特殊标志
#
# 队伍能力: (类型 19)
# 0 - 遇敌几率减半
# 1 - 随机遇敌无效
# 2 - 敌人偷袭无效
# 3 - 先制攻击几率上升
# 4 - 获得金钱翻倍
# 5 - 获得物品几率翻倍
# 如果加成是正值或0,添加该队伍能力,
# 如果加成是负值,移除该队伍能力
#
# 其他特性: (类型 20)
# 0 - 增加最大TP
# 1 - 普通攻击变为使用技能 / 所以如果设定为 [20, 1, 10] 则角色的普通攻击会使用10
#     号技能
# 2 - 防御变为使用技能/ 所以如果设定为 [20, 2, 10] 则角色的防御会使用10
#     号技能
#----------------------------------------------------------------------------
Set_Bonuses =
{
# 套装id => {
#    需要最小部件数量 => [[类型, 参数, 加成]], [类型, 随机参数, 0]]
  1 => {
    1 => [[0, 0, 500]],
    2 => [[0, 0, 500]]
       },

  2 => {
    1 => [[0, 1, 500]],
    2 => [[0, 1, 500]]
       }
}

#-----------------------------------------------------------------------------
# ▼设置套装音效
#-----------------------------------------------------------------------------
# Set_Sounds = {
#   set_id => {
#     amount_of_pieces_required => ["文件名", 音量, 音调]
#   }
# }
#
# 装备成套时,会播放一个se,再说一次,请注意英文逗号!!
#----------------------------------------------------------------------------
Set_Sounds =
{
  1 => {
    1 => ["Flash1", 100, 100], # <- 这一条不是最后一个,所以最后有英文逗号!
    2 => ["Flash1", 100, 100]  # <- 这一条是最后一个,所以最后没有英文逗号!
       }
}

end

# Only edit things past here if you know what you're doing

$imported = {} if $imported.nil?
$imported["Emerald's Equipment Sets"] = true

#============================================================================
# Game_Actor
# Handles everything for this script.
#============================================================================
class Game_Actor < Game_Battler
  
  attr_reader :active_sets
  attr_reader :item_sets
  
  alias eme_ees_setup setup
  def setup(actor_id)
    @non_set_skills = []
    @skill_from_sets = false
    reset_bonuses
    @active_sets = []
    @item_sets = [0] * (EME::Sets.size + 1)
    eme_ees_setup(actor_id)
  end

  alias eme_init_equips init_equips
  def init_equips(equips)
    eme_init_equips(equips)
    equips.each_with_index{|item_id, i|
      etype_id = index_to_etype_id(i)
      slot_id = empty_slot(etype_id)
      for set_id in 1..EME::Sets.size
        for ees_set_equip in EME::Sets[set_id]
          if item_id != nil and slot_id != nil and ees_is_the_set_item?(etype_id == 0 ? $data_weapons[item_id] : $data_armors[item_id], ees_set_equip)
            @item_sets[set_id] += 1
            @active_sets.push(set_id) unless @active_sets.include?(set_id)
          end
        end
      end
    }
    refresh
  end
   
  def ees_is_the_set_item?(item, ees_set_equip)
    return (((ees_set_equip[0] == 0 and item.is_a?(RPG::Weapon)) or (ees_set_equip[0] == 1 and item.is_a?(RPG::Armor))) and ees_set_equip[1] == item.id)
  end

  alias eme_ees_learn_skill learn_skill
  def learn_skill(skill_id)
    eme_ees_learn_skill(skill_id)
    @non_set_skills.push(skill_id) unless @skill_from_sets
    @skill_from_sets = false
  end

  alias eme_ebs_change_equip change_equip
  def change_equip(slot_id, item)
      for set_id in 1..EME::Sets.size
        for ees_set_equip in EME::Sets[set_id]
          if slot_id != nil and @equips[slot_id] != nil and @equips[slot_id].object != nil
            if ees_is_the_set_item?(@equips[slot_id].object, ees_set_equip)
              @item_sets[set_id] -= 1
              @active_sets.delete(set_id) if @item_sets[set_id] == 0
            end
          end
          if item != nil and ees_is_the_set_item?(item, ees_set_equip)
            @item_sets[set_id] += 1
            @active_sets.push(set_id) unless @active_sets.include?(set_id)
            if EME::Set_Sounds.has_key?(set_id) and EME::Set_Sounds[set_id].has_key?(set_amount_wearing(set_id))
              sound = EME::Set_Sounds[set_id][set_amount_wearing(set_id)]
              Audio.se_play("Audio/SE/" + sound[0], sound[1], sound[2])
            end
          end
        end
      end
    set_check
    eme_ebs_change_equip(slot_id, item)
  end

  def unlearn_set_skills(set_id)
    EME::Set_Bonuses[set_id].each_value{|bonus_array|
      bonus_array.each{|bonus|
        if bonus[0] == 4
          forget_skill(bonus[2]) unless @non_set_skills.include?(bonus[2])
          @ees_skills.delete(bonus[2])
        end
      }
    }
  end
  
  def item_set_reset_all
    @active_sets.each{|set_id| item_set_reset(set_id)}
  end
  
  def item_set_reset(set_id)
    return unless set_id > 0 and @item_sets[set_id] > 0
    unlearn_set_skills(set_id)
  end
  
  def release_unequippable_items(item_gain = true)
    @equips.each_with_index do |item, i|
      if !equippable?(item.object) || item.object.etype_id != equip_slots
        trade_item_with_party(nil, item.object) if item_gain
        item.object = nil
      end
    end
  end

  def release_unequippable_items(item_gain = true)
    loop do
      change_equips = 0
      @equips.each_with_index do |item, i|
        if !equippable?(item.object) or item.object.etype_id != equip_slots
          next if (RPG::Weapon.method_defined?(:two_handed?) and dual_wield? and (equip_slots == 1 and item.object.etype_id == 0))
          trade_item_with_party(nil, item.object) if item_gain
          change_equips += 1 unless item.object.nil?
          unless item.object.nil?
          for set_id in 1..EME::Sets.size
            for ees_set_equip in EME::Sets[set_id]
              if ees_is_the_set_item?(item.object, ees_set_equip)
                @item_sets[set_id] -= 1
                @active_sets.delete(set_id) if @item_sets[set_id] == 0
              end
            end
          end
          end
          item.object = nil
        end
      end
      set_check
      break if change_equips == 0
    end
  end

  alias eme_ebs_discard_equip discard_equip
  def discard_equip(item)
    slot_id = equips.index(item)
    if slot_id != nil
      for set_id in 1..EME::Sets.size
        for ees_set_equip in EME::Sets[set_id]
          if ees_is_the_set_item?(item, ees_set_equip)
            @item_sets[set_id] -= 1
            @active_sets.delete(set_id) if @item_sets[set_id] == 0
          end
        end
      end
    end
    eme_ebs_discard_equip(item)
    refresh
  end
  
  def set_amount_wearing(set_id)
    return @item_sets[set_id]
  end

  def set_check
    item_set_reset_all
    reset_bonuses
    @active_sets.each{|set| change_bonuses(set) unless set == nil}
  end
  
  def change_bonuses(set_id)
    return if set_id == 0 or set_amount_wearing(set_id) == 0
    EME::Set_Bonuses[set_id].each_key{|key|
      if set_amount_wearing(set_id) >= key
        for g in 0...EME::Set_Bonuses[set_id][key].size
          sort = EME::Set_Bonuses[set_id][key][g][0]
          stat = EME::Set_Bonuses[set_id][key][g][1]
          stat_bonus = EME::Set_Bonuses[set_id][key][g][2]
          case EME::Set_Bonuses[set_id][key][g][0]
          when 0
            sets_param_change(stat, stat_bonus)
          when 1
            sets_per_param_change(stat, stat_bonus)
          when 2
            sets_xparam_change(stat, stat_bonus)
          when 3
            sets_sparam_change(stat, stat_bonus)
          when 4
            next if skill_learn?(stat_bonus)
            @skill_from_sets = true
            learn_skill(stat_bonus)
            @ees_skills.push(stat_bonus)
          when 5
            stat -= 1
            sets_element_rate_change(stat, stat_bonus)
          when 6
            stat -= 1
            sets_debuff_rate_change(stat, stat_bonus)
          when 7
            stat -= 1
            sets_state_rate_change(stat, stat_bonus)
          when 8
            sets_state_resist_change(stat, stat_bonus)
          when 9
            sets_atk_elements_change(stat, stat_bonus)
          when 10
            sets_atk_states_change(stat) if stat_bonus > 0
            sets_atk_states_rate_change(stat, stat_bonus)
          when 11
            if stat < 2
              change_sets_additional_wtypes(stat_bonus, (stat == 0 ? true : false))
            elsif stat < 4
              change_sets_additional_atypes(stat_bonus, (stat == 2))
            elsif stat == 4
              @eme_ebs_two_swords_style = true
            end
          when 12
            sets_atk_specials_change(stat, stat_bonus)
          when 13
            add_sets_skill_types(stat, stat_bonus)
          when 14
            add_sets_sealed_skill_types(stat, stat_bonus)
          when 15
            add_sets_sealed_skills(stat, stat_bonus)
          when 16
            add_sets_fixed_equip_types(stat, stat_bonus)
          when 17
            add_sets_sealed_equip_types(stat, stat_bonus)
          when 18
            stat_bonus < 0 ? change_special_flags(stat, true) : change_special_flags(stat)
          when 19
            stat_bonus < 0 ? change_party_abilities(stat, true) : change_party_abilities(stat)
          when 20
            case stat
            when 0
              set_bonus_max_tp(stat_bonus)
            when 1
              set_atk_skill(stat_bonus)
            when 2
              set_grd_skill(stat_bonus)
            end
          end
        end
      end
    }
  end

#-------------------------------------------#
# LABEL FOR AUTHOR                          #
# Don't mind this ;)                        #
#-------------------------------------------#

  def reset_bonuses
    @sets_param_plus = [0] * 8
    @sets_per_param_plus = [0] * 8
    @sets_xparam_plus = [0] * 10
    @sets_sparam_plus = [0] * 10
    @sets_element_rate = [0] * (EME::MAX_ELEMENTS)
    @sets_debuff_rate = [0] * 8
    @sets_state_rate = [0] * ($data_states.size + 1)
    @sets_state_resist = []
    @sets_state_resist_remove = []
    @sets_atk_elements = []
    @sets_atk_elements_remove = []
    @sets_atk_states = []
    @sets_atk_states_rate = [0] * $data_states.size
    @sets_atk_speed_plus = 0
    @sets_atk_times_plus = 0
    @sets_skill_types = []
    @sets_skill_types_remove = []
    @sets_sealed_skill_types = []
    @sets_sealed_skill_types_remove = []
    @sets_sealed_skills = []
    @sets_sealed_skills_remove = []
    @sets_fixed_equip_types = []
    @sets_fixed_equip_types_remove = []
    @sets_sealed_equip_types = []
    @sets_sealed_equip_types_remove = []
   
    @ees_added_special_flags = []
    @ees_removed_special_flags = []
    @ees_added_party_abilities = []
    @ees_removed_party_abilities = []
    @ees_bonus_max_tp = 0
    @new_atk_skill = nil
    @new_grd_skill = nil
   
    @ees_skills = []
    @sets_wtypes = []
    @sets_atypes = []
    @sets_removed_wtypes = []
    @sets_removed_atypes = []
    @eme_ebs_two_swords_style = false
  end

  def sets_param_plus(param_id)
    @sets_param_plus[param_id]
  end

  def sets_param_change(param_id, value)
    @sets_param_plus[param_id] += value
  end

  def sets_per_param_plus(param_id)
    value = param_base(param_id) + param_plus(param_id)
    value *= @sets_per_param_plus[param_id] / 100
    return value
  end

  def sets_per_param_change(param_id, value)
    @sets_per_param_plus[param_id] += value
  end
  
  def sets_xparam_plus(param_id)
    @sets_xparam_plus[param_id]
  end

  def sets_xparam_change(param_id, value)
    @sets_xparam_plus[param_id] += value
  end

  def sets_sparam_plus(param_id)
    @sets_sparam_plus[param_id]
  end
  
  def sets_sparam_change(param_id, value)
    @sets_sparam_plus[param_id] += value
  end
  
  def sets_element_rate(element_id)
    @sets_element_rate[element_id]
  end
  
  def sets_element_rate_change(element_id, value)
    @sets_element_rate[element_id] += value
  end
  
  def sets_debuff_rate(param_id)
    @sets_debuff_rate[param_id]
  end

  def sets_debuff_rate_change(param_id, value)
    @sets_debuff_rate[param_id] += value
  end
  
  def sets_state_rate(state_id)
    @sets_state_rate[state_id]
  end

  def sets_state_rate_change(state_id, value)
    @sets_state_rate[state_id] += value
  end
  
  def sets_state_resist(state_id)
    @sets_state_resist[state_id]
  end
  
  def sets_state_resist_remove(state_id)
    @sets_state_resist_remove[state_id]
  end
  
  def sets_state_resist_change(state_id, value)
    value >= 0 ? (@sets_state_resist.push(state_id) unless @sets_state_resist.include?(state_id)) : (@sets_state_resist_remove.delete(state_id) unless @sets_state_resist_remove.include?(state_id))
  end
  
  def sets_atk_elements(element_id)
    @sets_atk_elements[element_id]
  end
  
  def sets_atk_elements_remove(element_id)
    @sets_atk_elements_remove[element_id]
  end

  def sets_atk_elements_change(element_id, value)
    value >= 0 ? (@sets_atk_elements.push(element_id) unless @sets_atk_elements.include?(element_id)) : (@sets_attack_elements_remove.delete(element_id) unless @sets_atk_elements_remove.include?(element_id))
  end
  
  def sets_atk_states(state_id)
    @sets_atk_states[state_id]
  end

  def sets_atk_states_change(state_id)
    @sets_atk_states.push(state_id) unless @sets_atk_states.include?(state_id)
  end
  
  def sets_atk_states_rate(state_id)
    @sets_atk_states_rate[state_id]
  end

  def sets_atk_states_rate_change(state_id, value)
    @sets_atk_states_rate[state_id] += value
  end
  
  def sets_atk_speed_plus
    @sets_atk_speed_plus
  end

  def sets_atk_times_plus
    @sets_atk_times_plus
  end
  
  def sets_atk_specials_change(parameter, value)
    parameter == 0 ? @sets_atk_speed_plus += value : @sets_atk_times_plus += value
  end
   
  def sets_skill_types(skill_type_id)
    @sets_skill_types[skill_type_id]
  end
  
  def sets_skill_types_remove(skill_type_id)
    @sets_skill_types_remove[skill_type_id]
  end

  def add_sets_skill_types(skill_type_id, value)
    value >= 0 ? (@sets_skill_types.push(skill_type_id) unless @sets_skill_types.include?(skill_type_id)) : (@sets_skill_types_remove.delete(skill_type_id) unless @sets_skill_types_remove.include?(skill_type_id))
  end
  
  def sets_sealed_skill_types(skill_type_id)
    @sets_sealed_skill_types[skill_type_id]
  end
  
  def sets_sealed_skill_types_remove(skill_type_id)
    @sets_sealed_skill_types_remove[skill_type_id]
  end

  def add_sealed_skill_types(skill_type_id, value)
    value >= 0 ? (@sets_sealed_skill_types.push(skill_type_id) unless @sets_sealed_skill_types.include?(skill_type_id)) : (@sets_sealed_skill_types_remove.delete(skill_type_id) unless @sets_sealed_skill_types_remove.include?(skill_type_id))
  end
  
  def sets_sealed_skills(skill_id)
    @sets_sealed_skills[skill_id]
  end
  
  def sets_sealed_skills_remove(skill_id)
    @sets_sealed_skills_remove[skill_id]
  end

  def add_sets_sealed_skills(skill_id, value)
    value > 0 ? (@sets_sealed_skills.push(skill_id) unless @sets_sealed_skills.include?(skill_id)) : (@sets_attack_elements_remove.delete(skill_id) unless @sets_sealed_skills_remove.include?(skill_id))
  end
  
  def sets_additional_wtypes
    @sets_wtypes
  end
  
  def sets_additional_atypes
    @sets_atypes
  end
  
  def sets_removed_wtypes
    @sets_removed_wtypes
  end
  
  def sets_removed_atypes
    @sets_removed_atypes
  end
  
  def change_sets_additional_wtypes(wtype_id, positive_change = true)
    positive_change ? @sets_wtypes.push(wtype_id) : @sets_removed_wtypes.push(wtype_id)
  end
  
  def change_sets_additional_atypes(atype_id, positive_change = true)
    positive_change ? @sets_atypes.push(atype_id) : @sets_removed_atypes.push(atype_id)
  end
  
  def sets_fixed_equip_types(equip_type_id)
    @sets_fixed_equip_types[equip_type_id]
  end
  
  def sets_fixed_equip_types_remove(equip_type_id)
    @sets_fixed_equip_types_remove[equip_type_id]
  end

  def add_fixed_equip_types(equip_type_id, value)
    value >= 0 ? @sets_fixed_equip_types.push(equip_type_id) : @sets_fixed_equip_types_remove.delete(sequip_type_id)
  end
  
  def sets_sealed_equip_types(equip_type_id)
    @sets_sealed_equip_types[equip_type_id]
  end
  
  def sets_sealed_equip_types_remove(equip_type_id)
    @sets_sealed_equip_types_remove[equip_type_id]
  end

  def add_sealed_equip_types(equip_type_id, value)
    value > 0 ? (@sets_sealed_equip_types.push(equip_type_id) unless @sets_sealed_equip_types.include?(equip_type_id)) : (@sets_sealed_equip_types_remove.delete(equip_type_id) unless @sets_sealed_equip_types_remove.include?(equip_type_id))
  end
  
  def change_special_flags(flag_id, negative = false)
    !negative ? @ees_added_special_flags.push(flag_id) : @ees_removed_special_flags.push(flag_id)
  end
  
  def change_party_abilities(ability_id, negative = false)
    !negative ? @ees_added_party_abilities.push(ability_id) : @ees_removed_party_abilities.push(ability_id)
  end
  
  def set_bonus_max_tp(value)
    @ees_bonus_max_tp += value
  end
  
  def set_atk_skill(skill_id)
    @new_atk_skill = skill_id
  end
  
  def set_grd_skill(skill_id)
    @new_grd_skill = skill_id
  end
  
#-------------------------------------------#
# 'NOTHER LABEL FOR AUTHOR                  #
# Don't mind this ;)                        #
#-------------------------------------------#

  def param(param_id)
    value = param_base(param_id) + param_plus(param_id) + sets_param_plus(param_id) #+ [sets_per_param_plus(param_id), 0].max
    value *= param_rate(param_id) * param_buff_rate(param_id)
    [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  end
  
  alias eme_ebs_xparam xparam
  def xparam(xparam_id)
    value = eme_ebs_xparam(xparam_id) + sets_xparam_plus(xparam_id) / 100
    return value
  end
  
  alias eme_ebs_sparam sparam
  def sparam(sparam_id)
    value = eme_ebs_sparam(sparam_id) + sets_sparam_plus(sparam_id) / 100
    return value
  end
  
  alias eme_ebs_element_rate element_rate
  def element_rate(element_id)
    value = eme_ebs_element_rate(element_id) + sets_element_rate(element_id) / 100
    return value
  end
  
  alias eme_ebs_debuff_rate debuff_rate
  def debuff_rate(param_id)
    value = eme_ebs_debuff_rate(param_id) + sets_debuff_rate(param_id) / 100
    return value
  end

  alias eme_ebs_state_rate state_rate
  def state_rate(state_id)
    value = eme_ebs_state_rate(state_id) + sets_state_rate(state_id) / 100
    return value
  end

  alias eme_ebs_state_resist_set state_resist_set
  def state_resist_set
    value = eme_ebs_state_resist_set
    @sets_state_resist.each{|state| value.push(state) unless value.include?(element)}
    @sets_state_resist_remove.each{|state| value.delete(state)}
    return value
  end
  
  alias eme_ebs_atk_elements atk_elements
  def atk_elements
    value = eme_ebs_atk_elements
    @sets_atk_elements.each{|element| value.push(element) unless value.include?(element)}
    @sets_atk_elements_remove.each{|element| value.delete(element)}
    return value
  end
  
  alias eme_ebs_atk_states atk_states
  def atk_states
    value = eme_ebs_atk_states
    @sets_atk_states.each{|state| value.push(@sets_atk_states) }
    return value
  end
  
  alias eme_ebs_atk_states_rate atk_states_rate
  def atk_states_rate(state_id)
    value = eme_ebs_atk_states_rate(state_id) + sets_atk_states_rate(state_id) / 100
    return value
  end
  
  alias eme_ebs_atk_speed atk_speed
  def atk_speed
    value = eme_ebs_atk_speed + sets_atk_speed_plus / 100
    return value
  end

  alias eme_ebs_atk_times atk_times_add
  def atk_times_add
    value = [eme_ebs_atk_times + sets_atk_times_plus / 100, 0].max
    return value
  end

  alias eme_ebs_dual_wield? dual_wield?
  def dual_wield?
    return true if @eme_ebs_two_swords_style
    eme_ebs_dual_wield?
  end
  
  alias eme_ebs_added_skill_types added_skill_types
  def added_skill_types
    value = eme_ebs_added_skill_types
    @sets_skill_types.each{|sk_type| value.push(sk_type)}
    @sets_skill_types_remove.each{|sk_type| value.delete(sk_type)}
    return value
  end
  
  def skill_type_sealed?(stype_id)
    value = features_set(FEATURE_STYPE_SEAL)
    @sets_sealed_skill_types.each{|sk_type| value.push(sk_type)}
    @sets_sealed_skill_types_remove.each{|sk_type| value.delete(sk_type)}
    return true if value.include?(stype_id)
  end

  def skill_sealed?(skill_id)
    value = features_set(FEATURE_SKILL_SEAL)
    @sets_sealed_skills.each{|skill| value.push(skill)}
    @sets_sealed_skills_remove.each{|skill| value.delete(skill)}
    return true if value.include?(skill_id)
  end
  
  def equip_wtype_ok?(wtype_id)
    value = features_set(FEATURE_EQUIP_WTYPE)
    @sets_wtypes.each{|w_type| value.push(w_type)}
    @sets_removed_wtypes.each{|w_type| value.delete(w_type)}
    return true if value.include?(wtype_id)
  end

  def equip_atype_ok?(atype_id)
    value = features_set(FEATURE_EQUIP_ATYPE)
    @sets_atypes.each{|a_type| value.push(a_type)}
    @sets_removed_atypes.each{|a_type| value.delete(a_type)}
    return true if value.include?(atype_id)
  end

  def equip_type_fixed?(etype_id)
    value = features_set(FEATURE_EQUIP_FIX)
    @sets_fixed_equip_types.each{|e_type| value.push(e_type)}
    @sets_fixed_equip_types_remove.each{|e_type| value.delete(e_type)}
    return true if value.include?(etype_id)
  end
  
  def equip_type_sealed?(etype_id)
    value = features_set(FEATURE_EQUIP_SEAL)
    @sets_sealed_equip_types.each{|e_type| value.push(e_type)}
    @sets_sealed_equip_types_remove.each{|e_type| value.delete(e_type)}
    return true if value.include?(etype_id)
  end
  
  alias eme_ees_special_flag special_flag
  def special_flag(flag_id)
    return false if @ees_removed_special_flags.include?(flag_id)
    return @ees_added_special_flags.include?(flag_id) ? true : eme_ees_special_flag(flag_id)
  end
  
  alias eme_ees_party_ability party_ability
  def party_ability(ability_id)
    return false if @ees_removed_party_abilities.include?(ability_id)
    return @ees_added_party_abilities.include?(ability_id) ? true : eme_ees_party_ability(ability_id)
  end
  
  alias eme_ees_max_tp max_tp
  def max_tp
    return eme_ees_max_tp + @ees_bonus_max_tp
  end
  
  alias eme_ees_attack_skill attack_skill_id
  def attack_skill_id
    return @new_atk_skill unless @new_atk_skill == nil
    return eme_ees_attack_skill
  end

  alias eme_ees_guard_skill guard_skill_id
  def guard_skill_id
    return @new_grd_skill unless @new_grd_skill == nil
    return eme_ees_guard_skill
  end

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部