125 战斗 攻击类型被多次重新转换导致的bug问题 (焚血 免疫等)
| | |
| | | return parentSkill != null; |
| | | } |
| | | } |
| | | |
| | | public partial class tagSCUseSkillHurt { |
| | | public bool isChangedRawAttackType = false; |
| | | } |
| | | |
| | | public partial class tagSCUseSkillHurtEx |
| | | { |
| | | public bool isChangedRawAttackType = false; |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | public class tagSCUseSkillHurt { |
| | | public partial class tagSCUseSkillHurt { |
| | | public uint ObjID; // 技能自身目标ID |
| | | public uint AttackTypes; // 飘血类型汇总,支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;4-免疫;5-格挡;6-无视防御;7-暴击;8-击晕;9-闪避 |
| | | public uint HurtHP; // 飘血值,求余亿部分 |
| | |
| | | public tagSCUseSkillHurtEx[] HurtListEx; // 额外伤害目标列表,仅后端多次伤害的有效,如弹射的平摊伤害 |
| | | } |
| | | |
| | | public class tagSCUseSkillHurtEx { |
| | | public partial class tagSCUseSkillHurtEx { |
| | | public uint ObjID; // 额外目标,如溅射伤害、平摊伤害目标,非技能自身的主要目标 |
| | | public uint AttackTypes; // 飘血类型汇总,支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;4-免疫;5-格挡;6-无视防御;7-暴击;8-击晕;9-闪避 |
| | | public uint HurtHP; // 飘血值,求余亿部分 |
| | |
| | | |
| | | private void HandleDamageType() |
| | | { |
| | | if (hurt == null) return; |
| | | if (hurt == null || hurt.isChangedRawAttackType) return; |
| | | |
| | | hurt.isChangedRawAttackType = true; |
| | | |
| | | uint originalAttackTypes = hurt.AttackTypes; |
| | | int convertedAttackTypes = 0; |
| | |
| | | long suckHp = battleHurtParam.caster.suckHpList[segmentIndex]; |
| | | if (suckHp > 0) |
| | | { |
| | | bool isSuckReverse = IsType(DamageType.SuckHpReverse); |
| | | if (isCasterView) |
| | | { |
| | | // 施法者视角:吸血显示在自己身上(targetDamageList) |
| | | |
| | | targetDamageList.Add(new BattleDmg |
| | | { |
| | | damage = suckHp, |
| | | attackType = IsType(DamageType.SuckHpReverse) ? (int)DamageType.Damage : (int)DamageType.SuckHP |
| | | attackType = isSuckReverse ? (int)DamageType.Damage : (int)DamageType.SuckHP |
| | | }); |
| | | } |
| | | else |
| | |
| | | casterDamageList.Add(new BattleDmg |
| | | { |
| | | damage = suckHp, |
| | | attackType = IsType(DamageType.SuckHpReverse) ? (int)DamageType.Damage : (int)DamageType.SuckHP |
| | | attackType = isSuckReverse ? (int)DamageType.Damage : (int)DamageType.SuckHP |
| | | }); |
| | | } |
| | | } |
| | |
| | | attackType &= ~(int)DamageType.Stunned; |
| | | } |
| | | |
| | | if (IsType(DamageType.SuckHpReverse)) |
| | | { |
| | | attackType &= ~(int)DamageType.SuckHpReverse; |
| | | } |
| | | |
| | | if (DamageNumConfig.Get(attackType) != null) |
| | | return attackType; |
| | | |
| | |
| | | // 服务器拥有的DamageType |
| | | public enum ServerDamageType |
| | | { |
| | | Damage = 2,//普通伤害 |
| | | Recovery = 4,//治疗 |
| | | Damage = 2,//普通伤害 (2^1 序号1) |
| | | Recovery = 4,//治疗 (2^2 序号2) |
| | | |
| | | Reborn = 8,//复活 |
| | | Reborn = 8,//复活 (2^3 序号3) |
| | | |
| | | Immune = 16,//免疫 |
| | | Immune = 16,//免疫 (2^4 序号4) |
| | | |
| | | Block = 32, //格挡 |
| | | Block = 32, //格挡 (2^5 序号5) |
| | | |
| | | Realdamage = 64, //真伤 |
| | | Crit = 128, //暴击 |
| | | Realdamage = 64, //真伤/无视防伤 (2^6 序号6) |
| | | Crit = 128, //暴击 (2^7 序号7) |
| | | |
| | | Stunned = 256, //击晕 |
| | | Stunned = 256, //击晕 (2^8 序号8) |
| | | |
| | | Dodge = 512, //闪避 |
| | | Dodge = 512, //闪避 (2^9 序号9) |
| | | |
| | | DamageReverse = 1024,//治疗反转成伤害 |
| | | DamageReverse = 1024,//伤害变为 (2^10 序号10) |
| | | |
| | | SuckHpReverse = 2048,//吸血反转为伤害 |
| | | SelfHarm = 4096,//自残 |
| | | SuckHpReverse = 2048,//吸血毒药 (2^11 序号11) |
| | | SelfHarm = 4096,//自残 (2^12 序号12) |
| | | Protected = 8192,//本次伤害有受保护标记 (2^13 序号13) |
| | | } |
| | | |
| | | public enum DamageType |
| | |
| | | |
| | | CritRealdamage = Crit + Realdamage, //暴击真伤 |
| | | |
| | | SuckHpReverse, //吸血反转为伤害 |
| | | SuckHpReverse = 8192, //吸血反转为伤害 |
| | | } |
| | | |
| | |
| | | xpTween = sliderXp.DOValue(targetValue, 0.2f).SetAutoKill(false); |
| | | xpTween.OnComplete(() => |
| | | { |
| | | if (toXp >= maxXp) |
| | | { |
| | | maxXpGO.SetActive(true); |
| | | } |
| | | else |
| | | { |
| | | maxXpGO.SetActive(false); |
| | | } |
| | | maxXpGO.SetActive(toXp >= maxXp); |
| | | }); |
| | | battleObject.battleField.battleTweenMgr.OnPlayTween(xpTween); |
| | | } |