| | |
| | | public SkillConfig skillConfig { get { return battleHurtParam.skillConfig; } } |
| | | |
| | | public bool isBlocked = false; |
| | | public bool isImmune = false; |
| | | public bool isLastHit = false; |
| | | |
| | | public List<BattleDmg> targetDamageList = new List<BattleDmg>(); |
| | |
| | | private void HandleDamageType() |
| | | { |
| | | if (hurt == null) return; |
| | | |
| | | int attackTypes = 0; |
| | | |
| | | uint originalAttackTypes = hurt.AttackTypes; |
| | | int convertedAttackTypes = 0; |
| | | |
| | | // 遍历服务器发来的所有伤害类型标记 |
| | | foreach (ServerDamageType serverDamageType in System.Enum.GetValues(typeof(ServerDamageType))) |
| | | { |
| | | int nsdt = (int)serverDamageType; |
| | | if ((hurt.AttackTypes & nsdt) == nsdt) |
| | | int serverValue = (int)serverDamageType; |
| | | |
| | | // 检查服务器类型是否存在 |
| | | if ((originalAttackTypes & serverValue) != serverValue) |
| | | continue; |
| | | |
| | | // 转换映射 |
| | | switch (serverDamageType) |
| | | { |
| | | attackTypes += nsdt; |
| | | case ServerDamageType.Damage: |
| | | convertedAttackTypes |= (int)DamageType.Damage; |
| | | break; |
| | | |
| | | case ServerDamageType.Recovery: |
| | | convertedAttackTypes |= (int)DamageType.Recovery; |
| | | break; |
| | | |
| | | case ServerDamageType.Immune: |
| | | convertedAttackTypes |= (int)DamageType.Immune; |
| | | break; |
| | | |
| | | case ServerDamageType.Block: |
| | | convertedAttackTypes |= (int)DamageType.Block; |
| | | break; |
| | | |
| | | case ServerDamageType.Realdamage: |
| | | convertedAttackTypes |= (int)DamageType.Realdamage; |
| | | break; |
| | | |
| | | case ServerDamageType.Crit: |
| | | convertedAttackTypes |= (int)DamageType.Crit; |
| | | break; |
| | | |
| | | case ServerDamageType.Dodge: |
| | | convertedAttackTypes |= (int)DamageType.Dodge; |
| | | break; |
| | | |
| | | case ServerDamageType.DamageReverse: |
| | | Debug.LogWarning($"[BattleDmgInfo] 服务器伤害类型 DamageReverse({serverValue}) 在客户端没有对应的枚举值"); |
| | | break; |
| | | |
| | | case ServerDamageType.SuckHpReverse: |
| | | Debug.LogWarning($"[BattleDmgInfo] 服务器伤害类型 SuckHpReverse({serverValue}) 在客户端没有对应的枚举值"); |
| | | break; |
| | | |
| | | case ServerDamageType.SelfHarm: |
| | | Debug.LogWarning($"[BattleDmgInfo] 服务器伤害类型 SelfHarm({serverValue}) 在客户端没有对应的枚举值"); |
| | | break; |
| | | |
| | | default: |
| | | Debug.LogError($"[BattleDmgInfo] 未知的服务器伤害类型: {serverDamageType}({serverValue})"); |
| | | break; |
| | | } |
| | | } |
| | | hurt.AttackTypes = (uint)attackTypes; |
| | | |
| | | // 检查是否包含占位符类型 |
| | | if ((convertedAttackTypes & (int)DamageType.TakePlace2) == (int)DamageType.TakePlace2) |
| | | { |
| | | Debug.LogWarning($"[BattleDmgInfo] 转换后的伤害类型包含占位符 TakePlace2(256)"); |
| | | } |
| | | |
| | | hurt.AttackTypes = (uint)convertedAttackTypes; |
| | | Debug.Log($"[BattleDmgInfo] 伤害类型转换: {originalAttackTypes} -> {hurt.AttackTypes}"); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | private void HandleAttackTypeAndDamage() |
| | | { |
| | | isBlocked = HaveBlockDamage(); |
| | | isImmune = IsImmune(); |
| | | int rawAttackType = hurt == null ? 0 : (int)hurt.AttackTypes; |
| | | |
| | | // 如果是免疫,直接添加免疫显示,不处理其他伤害 |
| | | if (isImmune) |
| | | { |
| | | targetDamageList.Add(new BattleDmg |
| | | { |
| | | damage = 0, |
| | | attackType = (int)DamageType.Immune |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | int maxCount = CalculateMaxDamageSegmentCount(); |
| | | |
| | |
| | | return IsType(DamageType.Block); |
| | | } |
| | | |
| | | public bool IsImmune() |
| | | { |
| | | return IsType(DamageType.Immune); |
| | | } |
| | | |
| | | public bool IsRealdamage() |
| | | { |
| | | return skillConfig.HurtType / 10 == 1; |
| | |
| | | public HB422_tagMCTurnFightObjDead deadPack; |
| | | public SkillConfig skillConfig; |
| | | public long maxHp; |
| | | |
| | | // 护盾值的变化应该从护盾2开始变化 也就是说 如果护盾2有值 则从护盾2开始变化 否则从护盾1开始变化 |
| | | // 再考虑护盾1 如果护盾1有值 则从护盾1开始变化 否则没有护盾变化 |
| | | // 但是其实可以从总血量下手 也就是说 |
| | | // from护盾值 + from血量 = 表现的开始 |
| | | // to护盾值 + to血量 = 表现的结束 |
| | | // 这样就不需要区分护盾1和护盾2了 只要在表现上做好就行 |
| | | |
| | | public long fromShieldValue; |
| | | public long toShieldValue; |