NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/Impl/BuffChangeProp.cs

236 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System.Collections.Generic;
using cfg.BuffCfg;
using CodeStage.AntiCheat.ObscuredTypes;
using Gameplay.Common;
using UnityEngine;
namespace Gameplay.Buff
{
public class BuffChangeProp : BaseBuff
{
private List<EPropType> _propList;
private List<float> _changeList;
private int _propCount;
protected override void _OnInit()
{
base._OnInit();
_propList = configData.PorpParams;
_changeList = configData.FloatParams;
if (_propList.Count != _changeList.Count)
{
DebugUtil.LogError("BuffChangeProp的属性数量和变化值数量不一致:{0}", configData.ID);
_propCount = Mathf.Min(_propList.Count, _changeList.Count);
}
else
{
// 数据一致
_propCount = _propList.Count;
}
}
protected override void _OnAdd()
{
base._OnAdd();
for (int i = 0; i < _propCount; i++)
{
var propType = _propList[i];
var changeValue = _changeList[i];
switch (propType)
{
case EPropType.MoveSpeed:
owner.fightData.moveSpeed += changeValue;
break;
case EPropType.BeDamageScale:
owner.fightData.beDamageScale += changeValue;
break;
case EPropType.FinalDamageScale:
owner.fightData.finalDamageScale += changeValue;
break;
case EPropType.MoraleDamageScale:
owner.fightData.moraleDamageScale += changeValue;
break;
case EPropType.BeMoraleDamageScale:
owner.fightData.moraleBeDamageScale += changeValue;
break;
case EPropType.AttackValue:
owner.fightData.attack += (int)changeValue;
break;
case EPropType.DefenseValue:
owner.fightData.defense += (int)changeValue;
break;
case EPropType.ShootRate:
// 射击间隔 * ( 1+ 1/(1+射速加成) -1) )
owner.fightData.p_shootCdScale += changeValue;
owner.fightData.shootCd = owner.fightData.p_shootCd * (1 + (1 / (1 + owner.fightData.p_shootCdScale) - 1));
_UpdateViewShootCd();
break;
case EPropType.MoveShoot:
// 只有角色才有移动射击
if (owner.gameunitType == EGameUnitType.Character)
{
if (owner is Character.Character character)
character.runtimeData.fightData.moveShootType += (int)changeValue;
}
break;
case EPropType.MoveSpeedPercent:
owner.fightData.moveSpeed += creator.fightData.baseMoveSpeed * changeValue;
break;
case EPropType.RetretSpeedPercent:
owner.fightData.retreatSpeed += creator.fightData.baseRetreatSpeed * changeValue;
break;
case EPropType.AttackValuePercent:
owner.fightData.attack += (int)(creator.fightData.baseAttack * changeValue);
break;
case EPropType.DefenseValuePercent:
owner.fightData.defense += (int)(creator.fightData.baseDefense * changeValue);
break;
case EPropType.AttackDistancePercent:
owner.fightData.attackDistance += Mathf.CeilToInt(creator.fightData.baseAttackDistance * changeValue);
break;
case EPropType.SkillReleaseDistancePercent:
owner.fightData.skillReleaseDistanceScale += changeValue;
break;
case EPropType.ReloadTimePercent:
owner.fightData.reloadTime += creator.fightData.baseReloadTime * changeValue;
_UpdateViewReloadCd();
break;
case EPropType.MoraleRecoverScale:
owner.fightData.moraleRecoverScale += changeValue;
break;
case EPropType.DamageScaleForVehicle:
owner.fightData.damageScaleForVehicle += changeValue;
break;
case EPropType.IgnoreShieldRate:
owner.fightData.ignoreShieldRate += changeValue;
break;
case EPropType.ignoreDebuffRate:
owner.fightData.ignoreDebuffRate += changeValue;
break;
default:
DebugUtil.LogError("暂未处理的属性类型:{0}", propType);
break;
}
}
}
private void _UpdateViewReloadCd()
{
switch (owner.gameunitType)
{
case EGameUnitType.Character:
{
if (owner is Character.Character character)
{
character.cAnim.ResetReloadAnim();
}
}
break;
}
}
private void _UpdateViewShootCd()
{
switch (owner.gameunitType)
{
case EGameUnitType.Character:
{
if (owner is Character.Character character)
{
character.cAnim.ResetShootAnim();
}
}
break;
}
}
protected override void _OnRemove()
{
base._OnRemove();
for (int i = 0; i < _propCount; i++)
{
var propType = _propList[i];
var changeValue = _changeList[i];
switch (propType)
{
case EPropType.MoveSpeed:
owner.fightData.moveSpeed -= changeValue;
break;
case EPropType.BeDamageScale:
owner.fightData.beDamageScale -= changeValue;
break;
case EPropType.FinalDamageScale:
owner.fightData.finalDamageScale -= changeValue;
break;
case EPropType.MoraleDamageScale:
owner.fightData.moraleDamageScale -= changeValue;
break;
case EPropType.BeMoraleDamageScale:
owner.fightData.moraleBeDamageScale -= changeValue;
break;
case EPropType.AttackValue:
owner.fightData.attack -= (int)changeValue;
break;
case EPropType.DefenseValue:
owner.fightData.defense -= (int)changeValue;
break;
case EPropType.ShootRate:
// 射击间隔 * ( 1+ 1/(1+射速加成) -1) )
owner.fightData.p_shootCdScale -= changeValue;
owner.fightData.shootCd = owner.fightData.p_shootCd * (1 + (1 / (1 + owner.fightData.p_shootCdScale) - 1));
_UpdateViewShootCd();
break;
case EPropType.MoveShoot:
// 只有角色才有移动射击
if (owner.gameunitType == EGameUnitType.Character)
{
if (owner is Character.Character character)
character.runtimeData.fightData.moveShootType -= (int)changeValue;
}
break;
case EPropType.MoveSpeedPercent:
owner.fightData.moveSpeed -= creator.fightData.baseMoveSpeed * changeValue;
break;
case EPropType.RetretSpeedPercent:
owner.fightData.retreatSpeed -= creator.fightData.baseRetreatSpeed * changeValue;
break;
case EPropType.AttackValuePercent:
owner.fightData.attack -= (int)(creator.fightData.baseAttack * changeValue);
break;
case EPropType.DefenseValuePercent:
owner.fightData.defense -= (int)(creator.fightData.baseDefense * changeValue);
break;
case EPropType.AttackDistancePercent:
owner.fightData.attackDistance -= Mathf.CeilToInt(creator.fightData.baseAttackDistance * changeValue);
break;
case EPropType.SkillReleaseDistancePercent:
owner.fightData.skillReleaseDistanceScale -= changeValue;
break;
case EPropType.ReloadTimePercent:
owner.fightData.reloadTime -= creator.fightData.baseReloadTime * changeValue;
_UpdateViewReloadCd();
break;
case EPropType.MoraleRecoverScale:
owner.fightData.moraleRecoverScale -= changeValue;
break;
case EPropType.DamageScaleForVehicle:
owner.fightData.damageScaleForVehicle -= changeValue;
break;
case EPropType.IgnoreShieldRate:
owner.fightData.ignoreShieldRate -= changeValue;
break;
case EPropType.ignoreDebuffRate:
owner.fightData.ignoreDebuffRate -= changeValue;
break;
default:
DebugUtil.LogError("暂未处理的属性类型:{0}", propType);
break;
}
}
}
}
}