public static bool check(this HurtHitClass flags, HurtHitClass totest) { return((flags & totest) == totest); }
public static HurtHitClass set(this HurtHitClass flags, HurtHitClass totest) { return(flags | totest); }
/// /// 带AI的伤害技能的实现 /// 但是要不要减伤 /// /// 〖物理伤害〗_敌=〖物理攻击力〗_敌×(1-〖物理免伤〗_自 ) /// 〖法术伤害〗_敌=〖法术攻击力〗_敌×(1-〖法术免伤〗_自 ) /// 〖伤害〗_敌=〖物理伤害〗_敌+〖法术伤害〗_敌 /// /// Self 对 target的技能伤害 /// 只考虑了输出值,并不考虑后续的反弹,护盾等情况 /// public Dmg toTargetDmg(NPCData self, NPCData target, EffectConfigData cfg) { ///-------- 物理伤害强度------ ///先计算自己的物理伤害, float bphyselfhit = Physical_Hit(self, cfg); ///-------- 魔法伤害强度 ------- /// 先计算自己的魔法伤害, float bMagselfhit = Magical_Hit(self, cfg); ///-------- NPC的总攻击强度,是cfg.EffectClass 类型------- float hit = bphyselfhit + bMagselfhit + cfg.Param3; HurtHitClass hitType = (HurtHitClass)Enum.ToObject(typeof(HurtHitClass), cfg.Param7); /// /// --------- 检测 不计算减伤 ----------- /// bool forbidArmer = hitType.check(HurtHitClass.Forbid_Armer); float dmg = 0f; if (forbidArmer) { dmg = hit; } else { switch (cfg.EffectClass) { case SkillTypeClass.Holly: //神圣伤害不减少伤害 dmg = hit; break; case SkillTypeClass.Magical: float magenemyavoid = Magical_Avoid(target, self); dmg = hit * (1.0f - magenemyavoid); break; case SkillTypeClass.Physical: float avdenemyratio = Physical_Avoid(target, self); dmg = hit * (1.0f - avdenemyratio); break; } } dmg = dmg * (1 + cfg.Param4 * Consts.OneThousand); /// --------- 暴击伤害 ---------- /// float critialRatio = CriticalRatio(self, target, cfg); bool isCri = PseudoRandom.getInstance().happen(critialRatio); if (isCri) { float addtion = AdditionRatio(self, cfg); dmg = dmg * addtion; } Dmg final = new Dmg() { dmgValue = dmg, dmgType = cfg.EffectClass, isCritical = isCri, hitCls = hitType, }; return(final); }