NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Unit/Data/UnitFightData.cs

500 lines
13 KiB
C#

using System.Collections.Generic;
using CodeStage.AntiCheat.ObscuredTypes;
namespace Gameplay.Unit.Data
{
public class UnitFightData
{
public GameUnit owner;
/// <summary>
/// 照亮区域
/// </summary>
public ObscuredInt lightUpArea = 1;
/// <summary>
/// 特殊普通逻辑id
/// 为0表示没有特殊逻辑
/// </summary>
public ObscuredInt specialAttakcLogicId = 0;
/// <summary>
///
/// </summary>
public ObscuredInt extraDamageOnNormalAttack = 0;
/// <summary>
/// 攻击力
/// </summary>
public ObscuredFloat attack
{
get;
set;
} = 0;
public ObscuredFloat baseAttack
{
get;
set;
} = 0;
/// <summary>
/// 命中率根据距离的值
/// </summary>
public List<float> distanceHitRate = new List<float>()
{
1f
};
public List<float> baseDistanceHitRate = new List<float>()
{
1f
};
/// <summary>
/// 防御力
/// </summary>
public float defense
{
get;
set;
}
public float baseDefense
{
get;
set;
}
/// <summary>
/// 护甲防御等级
/// </summary>
public ObscuredInt defensePowerLevel
{
get;
set;
}
/// <summary>
/// 护甲穿透等级
/// </summary>
public ObscuredInt attackPowerLevel
{
get;
set;
}
/// <summary>
/// 技能倍率
/// </summary>
public ObscuredFloat skillRate = 1;
/// <summary>
/// 对人类的伤害倍率
/// </summary>
public ObscuredFloat scaleForHuman = 1;
/// <summary>
/// 对载具的伤害倍率
/// </summary>
public ObscuredFloat scaleForVehicle = 1;
/// <summary>
/// 对建筑的伤害倍率
/// </summary>
public ObscuredFloat scaleForBuilding = 1;
/// <summary>
/// 最终伤害提升倍率
/// </summary>
public ObscuredFloat finalDamageScale = 1;
/// <summary>
/// 杀伤系数
/// </summary>
public ObscuredFloat attackScaleForHp = 1;
/// <summary>
/// 穿甲系数
/// </summary>
public ObscuredFloat attackScaleForShiled = 1;
/// <summary>
/// 攻击距离
/// </summary>
public int attackDistance
{
get
{
if (specialAttakcLogicId == 0)
{
return normalAttackDistance;
}
return specialAttackDistance;
}
}
/// <summary>
/// 平A是否无视阻挡
/// </summary>
public bool isAttackIgnoreBlock = false;
public ObscuredInt normalAttackDistance;
public ObscuredInt specialAttackDistance;
/// <summary>
/// 攻击距离-基础值
/// </summary>
public ObscuredInt baseAttackDistance = 0;
public ObscuredFloat baseAttackDistanceScale = 1f;
public ObscuredInt baseAttackDistanceFixed = 0;
/// <summary>
/// 技能释放距离缩放
/// </summary>
public ObscuredFloat skillReleaseDistanceScale = 1;
/// <summary>
/// 移动速度
/// </summary>
public ObscuredFloat moveSpeed = 0;
/// <summary>
/// 移动速度-基础值
/// </summary>
public ObscuredFloat baseMoveSpeed = 0;
/// <summary>
/// 非战斗移动速度
/// </summary>
public ObscuredFloat noFightMoveSpeed = 0f;
/// <summary>
/// 逃跑速度
/// </summary>
public ObscuredFloat retreatSpeed = 0;
/// <summary>
/// 逃跑速度-基础值
/// </summary>
public ObscuredFloat baseRetreatSpeed = 0;
/// <summary>
/// 转身速度
/// </summary>
public ObscuredFloat turnSpeed = 0;
/// <summary>
/// 索敌范围
/// </summary>
public float findEnemyRange;
/// <summary>
/// 追踪范围 只更新NPC
/// </summary>
public int trackRange;
/// <summary>
/// 攻击间隔
/// </summary>
public ObscuredFloat shootCd;
/// <summary>
/// 攻击间隔加成
/// </summary>
public ObscuredFloat p_shootCdScale = 0f;
/// <summary>
/// 基础攻击间隔
/// </summary>
public ObscuredFloat baseShootCd = 1f;
public void InitShootCd(float setShootCd)
{
shootCd = setShootCd;
baseShootCd = setShootCd;
}
/// <summary>
/// 最大弹药量
/// </summary>
public ObscuredInt maxBulletCount
{
get;
set;
}
public ObscuredInt baseMaxBulletCount;
/// <summary>
/// 单次换弹补充数量
/// </summary>
public ObscuredInt perReloadCount
{
get;
set;
}
public ObscuredInt basePerReloadCount
{
get;
set;
}
/// <summary>
/// 是否允许换弹过程中未满子弹攻击
/// </summary>
public bool canAttackNoReloadFull = true;
public ObscuredFloat criticalRate = 0f;
public ObscuredFloat criticalScale = 1f;
/// <summary>
/// 是否可以撤离
/// </summary>
public bool canEvacuate
{
get;
set;
}
/// <summary>
/// 士气攻击
/// </summary>
public ObscuredFloat moraleAttack;
/// <summary>
/// 士气恢复缩放
/// </summary>
public ObscuredFloat moraleRecoverScale = 1f;
/// <summary>
/// 装弹时间
/// </summary>
public ObscuredFloat reloadTime
{
get;
set;
}
/// <summary>
/// 装弹时间-基础值
/// </summary>
public ObscuredFloat baseReloadTime;
/// <summary>
/// 自动恢复护盾延迟时间
/// </summary>
public ObscuredFloat autoRecoverShiledDealy = 1f;
/// <summary>
/// 自动恢复护盾值-固定值
/// </summary>
public ObscuredFloat autoRecoverShiledValueFixed = 1;
/// <summary>
/// 自动恢复护盾值-百分比
/// </summary>
public ObscuredFloat autoRecoverShiledValuePercent = 0f;
/// <summary>
/// 最大过量护盾值
/// </summary>
public ObscuredInt overflowShiledMaxValue = 0;
/// <summary>
/// 自动恢复HP延迟时间
/// </summary>
public ObscuredFloat autoRecoverHPDealy
{
get;
set;
} = 1f;
/// <summary>
/// 自动恢复HP值-固定值
/// </summary>
public ObscuredFloat autoRecoverHPValueFixed = 1;
/// <summary>
/// 自动恢复HP值-百分比
/// </summary>
public ObscuredFloat autoRecoverHPValuePercent = 0f;
/// <summary>
/// 受到伤害的倍率
/// ps:承伤系数
/// </summary>
public ObscuredFloat beDamageScale = 1f;
/// <summary>
/// 士气攻击的倍率
/// </summary>
public ObscuredFloat moraleDamageScale = 1f;
public ObscuredFloat baseMoraleDamageScale = 1f;
/// <summary>
/// 士气受到伤害的倍率
/// </summary>
public ObscuredFloat moraleBeDamageScale = 1f;
/// <summary>
/// 最后移动的时间
/// </summary>
public ObscuredFloat lastMoveTime = 0f;
/// <summary>
/// 攻击时无视护盾的概率
/// </summary>
public ObscuredFloat ignoreShieldRate
{
get;
set;
} = 0f;
/// <summary>
/// 抵抗debuff的概率
/// </summary>
public ObscuredFloat ignoreDebuffRate = 0f;
/// <summary>
/// 逃跑时间
/// </summary>
public ObscuredFloat retreateTime = 10f;
public ObscuredFloat baseRetreateTime = 10f;
/// <summary>
/// 最后一发子弹的伤害缩放
/// </summary>
public ObscuredFloat lastBulletDamageScale = 1f;
/// <summary>
/// 技能cd缩减比例
/// </summary>
public ObscuredFloat skillCdReduceScale = 1f;
/// <summary>
/// 受伤累积值
/// </summary>
public ObscuredInt hurtAccumulate = 0;
/// <summary>
/// 攻击之后的等待时间
/// </summary>
public ObscuredFloat attackEndTime
{
get;
set;
} = 0;
public ObscuredFloat baseAttackEndTime
{
get;
set;
}
/// <summary>
/// 攻击循环次数
/// </summary>
public ObscuredInt attackLoopCount
{
get;
set;
} = 1;
/// <summary>
/// 是否跳过举枪
/// </summary>
public bool skipRaiseWeapon
{
get;
set;
} = false;
public UnitFightData(GameUnit owner)
{
this.owner = owner;
}
public ObscuredFloat GetMoveSpeed()
{
if (owner.statusData.isInFight)
{
if (moveSpeed < 0)
{
return 0;
}
return moveSpeed;
}
else
{
return noFightMoveSpeed;
}
}
public void InitAttack(int attackPower, int setPowerLevel)
{
attack = attackPower;
baseAttack = attackPower;
attackPowerLevel = setPowerLevel;
}
public float GetAttackRate(int distance)
{
if (distance >= distanceHitRate.Count)
{
return distanceHitRate[^1];
}
if (distance < 0)
{
return distanceHitRate[0];
}
return distanceHitRate[distance];
}
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.trackRange = trackRange;
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.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.attackLoopCount = attackLoopCount;
}
}
}