using System.Collections.Generic; using CodeStage.AntiCheat.ObscuredTypes; namespace Gameplay.Unit.Data { public class UnitFightData { public GameUnit owner; /// /// 照亮区域 /// public ObscuredInt lightUpArea = 1; /// /// 特殊普通逻辑id /// 为0表示没有特殊逻辑 /// public ObscuredInt specialAttakcLogicId = 0; /// /// /// public ObscuredInt extraDamageOnNormalAttack = 0; /// /// 攻击力 /// public ObscuredInt attack = 0; public ObscuredFloat baseAttack = 0; /// /// 防御力 /// public ObscuredInt defense = 0; public ObscuredFloat baseDefense = 0; /// /// 技能倍率 /// public ObscuredFloat skillRate = 1; /// /// 对人类的伤害倍率 /// public ObscuredFloat scaleForHuman = 1; /// /// 对载具的伤害倍率 /// public ObscuredFloat scaleForVehicle = 1; /// /// 最终伤害提升倍率 /// public ObscuredFloat finalDamageScale = 1; /// /// 杀伤系数 /// public ObscuredFloat attackScaleForHp = 1; /// /// 穿甲系数 /// public ObscuredFloat attackScaleForShiled = 1; /// /// 攻击距离 /// public int attackDistance { get { if (specialAttakcLogicId == 0) { return normalAttackDistance; } return specialAttackDistance; } } /// /// 平A是否无视阻挡 /// public bool isAttackIgnoreBlock = false; public ObscuredInt normalAttackDistance; public ObscuredInt specialAttackDistance; /// /// 攻击距离-基础值 /// public ObscuredInt baseAttackDistance = 0; public ObscuredFloat baseAttackDistanceScale = 1f; public ObscuredInt baseAttackDistanceFixed = 0; /// /// 技能释放距离缩放 /// public ObscuredFloat skillReleaseDistanceScale = 1; /// /// 移动速度 /// public ObscuredFloat moveSpeed = 0; /// /// 移动速度-基础值 /// public ObscuredFloat baseMoveSpeed = 0; /// /// 逃跑速度 /// public ObscuredFloat retreatSpeed = 0; /// /// 逃跑速度-基础值 /// public ObscuredFloat baseRetreatSpeed = 0; /// /// 转身速度 /// public ObscuredFloat turnSpeed = 0; /// /// 索敌范围 /// public ObscuredFloat findEnemyRange; /// /// 攻击间隔 /// public ObscuredFloat shootCd; /// /// 攻击间隔加成 /// public ObscuredFloat p_shootCdScale = 0f; /// /// 基础攻击间隔 /// public ObscuredFloat baseShootCd = 1f; /// /// 最大弹药量 /// public ObscuredInt maxBulletCount { get; set; } public ObscuredInt baseMaxBulletCount; public ObscuredFloat criticalRate = 0f; public ObscuredFloat criticalScale = 1f; /// /// 士气攻击 /// public ObscuredInt moraleAttack; /// /// 开枪时间百分比 /// public ObscuredFloat fireTimeProgress; /// /// 士气恢复缩放 /// public ObscuredFloat moraleRecoverScale = 1f; /// /// 装弹时间 /// public ObscuredFloat reloadTime; /// /// 装弹时间-基础值 /// public ObscuredFloat baseReloadTime; /// /// 自动恢复护盾延迟时间 /// public ObscuredFloat autoRecoverShiledDealy = 1f; /// /// 自动恢复护盾值-固定值 /// public ObscuredInt autoRecoverShiledValueFixed = 1; /// /// 自动恢复护盾值-百分比 /// public ObscuredFloat autoRecoverShiledValuePercent = 0f; /// /// 最大过量护盾值 /// public ObscuredInt overflowShiledMaxValue = 0; /// /// 自动恢复HP延迟时间 /// public ObscuredFloat autoRecoverHPDealy = 1f; /// /// 自动恢复HP值-固定值 /// public ObscuredInt autoRecoverHPValueFixed = 1; /// /// 自动恢复HP值-百分比 /// public ObscuredFloat autoRecoverHPValuePercent = 0f; /// /// 受到伤害的倍率 /// ps:承伤系数 /// public ObscuredFloat beDamageScale = 1f; /// /// 士气攻击的倍率 /// public ObscuredFloat moraleDamageScale = 1f; /// /// 士气受到伤害的倍率 /// public ObscuredFloat moraleBeDamageScale = 1f; /// /// 最后移动的时间 /// public ObscuredFloat lastMoveTime = 0f; /// /// 攻击时无视护盾的概率 /// public ObscuredFloat ignoreShieldRate = 0f; /// /// 抵抗debuff的概率 /// public ObscuredFloat ignoreDebuffRate = 0f; /// /// 逃跑时间 /// public ObscuredFloat retreateTime = 10f; public ObscuredFloat baseRetreateTime = 10f; /// /// 最后一发子弹的伤害缩放 /// public ObscuredFloat lastBulletDamageScale = 1f; /// /// 技能cd缩减比例 /// public ObscuredFloat skillCdReduceScale = 1f; /// /// 受伤累积值 /// public ObscuredInt hurtAccumulate = 0; /// /// 攻击之后的等待时间 /// public ObscuredFloat attackEndTime { get; set; } = 0; /// /// 攻击循环次数 /// public ObscuredInt attackLoopCount{ get; set; } = 1; public UnitFightData(GameUnit owner) { this.owner = owner; } public ObscuredFloat GetMoveSpeed() { if (moveSpeed < 0) { return 0; } return moveSpeed; } public void CopyTo(UnitFightData to) { to.specialAttakcLogicId = specialAttakcLogicId; to.attack = attack; to.baseAttack = baseAttack; to.defense = defense; to.baseDefense = baseDefense; to.skillRate = skillRate; to.scaleForHuman = scaleForHuman; to.scaleForVehicle = scaleForVehicle; to.finalDamageScale = finalDamageScale; to.attackScaleForHp = attackScaleForHp; to.attackScaleForShiled = attackScaleForShiled; to.normalAttackDistance = normalAttackDistance; to.specialAttackDistance = specialAttackDistance; to.baseAttackDistance = baseAttackDistance; to.skillReleaseDistanceScale = skillReleaseDistanceScale; to.moveSpeed = moveSpeed; to.baseMoveSpeed = baseMoveSpeed; to.retreatSpeed = retreatSpeed; to.baseRetreatSpeed = baseRetreatSpeed; to.turnSpeed = turnSpeed; to.findEnemyRange = findEnemyRange; to.shootCd = shootCd; to.p_shootCdScale = p_shootCdScale; to.baseShootCd = baseShootCd; to.maxBulletCount = maxBulletCount; to.baseMaxBulletCount = baseMaxBulletCount; to.criticalRate = criticalRate; to.criticalScale = criticalScale; to.moraleAttack = moraleAttack; to.fireTimeProgress = fireTimeProgress; to.moraleRecoverScale = moraleRecoverScale; to.reloadTime = reloadTime; to.baseReloadTime = baseReloadTime; to.autoRecoverShiledDealy = autoRecoverShiledDealy; to.autoRecoverShiledValueFixed = autoRecoverShiledValueFixed; to.autoRecoverShiledValuePercent = autoRecoverShiledValuePercent; to.overflowShiledMaxValue = overflowShiledMaxValue; to.autoRecoverHPDealy = autoRecoverHPDealy; to.autoRecoverHPValueFixed = autoRecoverHPValueFixed; to.autoRecoverHPValuePercent = autoRecoverHPValuePercent; to.beDamageScale = beDamageScale; to.moraleDamageScale = moraleDamageScale; to.moraleBeDamageScale = moraleBeDamageScale; to.lastMoveTime = lastMoveTime; to.ignoreShieldRate = ignoreShieldRate; to.ignoreDebuffRate = ignoreDebuffRate; to.retreateTime = retreateTime; to.baseRetreateTime = baseRetreateTime; to.extraDamageOnNormalAttack = extraDamageOnNormalAttack; to.lastBulletDamageScale = lastBulletDamageScale; to.attackEndTime = attackEndTime; to.attackLoopCount = attackLoopCount; } } }