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

236 lines
10 KiB
C#
Raw Normal View History

2023-10-19 15:00:19 +08:00
using System.Collections.Generic;
using cfg.BuffCfg;
2023-11-06 16:50:41 +08:00
using CodeStage.AntiCheat.ObscuredTypes;
2023-10-19 15:00:19 +08:00
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;
2023-11-06 16:28:35 +08:00
case EPropType.MoveSpeedPercent:
2023-11-16 17:46:29 +08:00
owner.fightData.moveSpeed += creator.fightData.baseMoveSpeed * changeValue;
2023-11-06 16:28:35 +08:00
break;
2023-11-06 16:50:41 +08:00
case EPropType.RetretSpeedPercent:
2023-11-16 17:46:29 +08:00
owner.fightData.retreatSpeed += creator.fightData.baseRetreatSpeed * changeValue;
2023-11-06 16:50:41 +08:00
break;
case EPropType.AttackValuePercent:
2023-11-16 17:46:29 +08:00
owner.fightData.attack += (int)(creator.fightData.baseAttack * changeValue);
2023-11-06 16:50:41 +08:00
break;
case EPropType.DefenseValuePercent:
2023-11-16 17:46:29 +08:00
owner.fightData.defense += (int)(creator.fightData.baseDefense * changeValue);
2023-11-06 16:50:41 +08:00
break;
case EPropType.AttackDistancePercent:
2023-11-16 17:46:29 +08:00
owner.fightData.attackDistance += Mathf.CeilToInt(creator.fightData.baseAttackDistance * changeValue);
2023-11-06 16:50:41 +08:00
break;
case EPropType.SkillReleaseDistancePercent:
owner.fightData.skillReleaseDistanceScale += changeValue;
break;
2023-11-07 13:49:30 +08:00
case EPropType.ReloadTimePercent:
2023-11-16 17:46:29 +08:00
owner.fightData.reloadTime += creator.fightData.baseReloadTime * changeValue;
2023-11-07 13:49:30 +08:00
_UpdateViewReloadCd();
break;
2023-11-16 13:06:13 +08:00
case EPropType.MoraleRecoverScale:
owner.fightData.moraleRecoverScale += changeValue;
break;
2023-11-16 13:20:03 +08:00
case EPropType.DamageScaleForVehicle:
owner.fightData.damageScaleForVehicle += changeValue;
break;
2023-11-16 13:48:40 +08:00
case EPropType.IgnoreShieldRate:
owner.fightData.ignoreShieldRate += changeValue;
break;
2023-11-16 14:15:30 +08:00
case EPropType.ignoreDebuffRate:
owner.fightData.ignoreDebuffRate += changeValue;
break;
2023-10-19 15:00:19 +08:00
default:
DebugUtil.LogError("暂未处理的属性类型:{0}", propType);
break;
}
}
}
2023-11-06 16:28:35 +08:00
private void _UpdateViewReloadCd()
{
switch (owner.gameunitType)
{
case EGameUnitType.Character:
{
if (owner is Character.Character character)
{
character.cAnim.ResetReloadAnim();
}
}
break;
}
}
2023-10-19 15:00:19 +08:00
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;
2023-11-06 16:50:41 +08:00
case EPropType.MoveSpeedPercent:
2023-11-16 17:46:29 +08:00
owner.fightData.moveSpeed -= creator.fightData.baseMoveSpeed * changeValue;
2023-11-06 16:50:41 +08:00
break;
case EPropType.RetretSpeedPercent:
2023-11-16 17:46:29 +08:00
owner.fightData.retreatSpeed -= creator.fightData.baseRetreatSpeed * changeValue;
2023-11-06 16:50:41 +08:00
break;
case EPropType.AttackValuePercent:
2023-11-16 17:46:29 +08:00
owner.fightData.attack -= (int)(creator.fightData.baseAttack * changeValue);
2023-11-06 16:50:41 +08:00
break;
case EPropType.DefenseValuePercent:
2023-11-16 17:46:29 +08:00
owner.fightData.defense -= (int)(creator.fightData.baseDefense * changeValue);
2023-11-06 16:50:41 +08:00
break;
case EPropType.AttackDistancePercent:
2023-11-16 17:46:29 +08:00
owner.fightData.attackDistance -= Mathf.CeilToInt(creator.fightData.baseAttackDistance * changeValue);
2023-11-06 16:50:41 +08:00
break;
case EPropType.SkillReleaseDistancePercent:
owner.fightData.skillReleaseDistanceScale -= changeValue;
break;
2023-11-16 13:06:13 +08:00
case EPropType.ReloadTimePercent:
2023-11-16 17:46:29 +08:00
owner.fightData.reloadTime -= creator.fightData.baseReloadTime * changeValue;
2023-11-16 13:06:13 +08:00
_UpdateViewReloadCd();
break;
case EPropType.MoraleRecoverScale:
owner.fightData.moraleRecoverScale -= changeValue;
break;
2023-11-16 13:20:03 +08:00
case EPropType.DamageScaleForVehicle:
owner.fightData.damageScaleForVehicle -= changeValue;
break;
2023-11-16 13:48:40 +08:00
case EPropType.IgnoreShieldRate:
owner.fightData.ignoreShieldRate -= changeValue;
break;
2023-11-16 14:15:30 +08:00
case EPropType.ignoreDebuffRate:
owner.fightData.ignoreDebuffRate -= changeValue;
break;
2023-10-19 15:00:19 +08:00
default:
DebugUtil.LogError("暂未处理的属性类型:{0}", propType);
break;
}
}
}
}
}