2024-03-19 18:37:00 +08:00
|
|
|
using System;
|
2023-12-14 14:42:27 +08:00
|
|
|
using System.Collections.Generic;
|
2023-10-19 15:00:19 +08:00
|
|
|
using Framework;
|
2024-11-11 12:07:48 +08:00
|
|
|
using Gameplay.Common;
|
2024-06-11 19:36:19 +08:00
|
|
|
using Gameplay.Unit.Data;
|
2024-01-15 12:39:20 +08:00
|
|
|
using Gameplay.Utils;
|
2023-12-14 14:42:27 +08:00
|
|
|
using UnityEngine;
|
2023-10-19 15:00:19 +08:00
|
|
|
namespace Gameplay.Character.Utils
|
|
|
|
|
{
|
|
|
|
|
public static class CharacterDataHelper
|
|
|
|
|
{
|
|
|
|
|
public static int GetCharacterSkillId(CharacterDataInfo characterInfo)
|
|
|
|
|
{
|
|
|
|
|
var skillLevelInfo = TableManager.Instance.Tables.CharacterSkillLevel.Get(characterInfo.Cfg.RoleID, (int)characterInfo.UltraSkillLevel);
|
2024-01-03 13:17:27 +08:00
|
|
|
if (skillLevelInfo == null)
|
|
|
|
|
{
|
|
|
|
|
DebugUtil.LogError($"角色ID:{characterInfo.Cfg.RoleID} 等级:{characterInfo.UltraSkillLevel} 无法找到对应的技能等级配置");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
var skillGroupId = skillLevelInfo.SkillGroupId;
|
|
|
|
|
var breakLevel = characterInfo.AwakeLevel;
|
|
|
|
|
var skillReferInfo = TableManager.Instance.Tables.SkillReferConfig.Get(skillGroupId);
|
|
|
|
|
var breakLevelIndex = (int)breakLevel;
|
|
|
|
|
var skillId = skillReferInfo.SkillIds[^1];
|
|
|
|
|
if (breakLevelIndex < 0 || breakLevelIndex >= skillReferInfo.SkillIds.Count)
|
|
|
|
|
{
|
|
|
|
|
DebugUtil.LogError("技能组ID:{0} 突破等级:{1} 无法找到对应的技能ID" , skillGroupId, breakLevel);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
skillId = skillReferInfo.SkillIds[breakLevelIndex];
|
|
|
|
|
}
|
|
|
|
|
return skillId;
|
|
|
|
|
}
|
2023-12-14 14:42:27 +08:00
|
|
|
|
2024-11-11 13:16:43 +08:00
|
|
|
private static void _InitGlobalConfigBefore(CharacterConfigData configData)
|
2024-11-11 12:07:48 +08:00
|
|
|
{
|
|
|
|
|
configData.defenseScale = GLConfig.Inst.data.FightDefenceStatusPara;
|
|
|
|
|
configData.shiledRecoverDelay = GLConfig.Inst.data.FightShieldRecoverDelay;
|
2024-11-11 13:03:45 +08:00
|
|
|
configData.shieldRecoverFix = GLConfig.Inst.data.FightShiledRecoverValueFixed;
|
|
|
|
|
configData.shiledRecoverPercent = GLConfig.Inst.data.FightShiledRecoverValuePercent;
|
2024-11-11 13:16:43 +08:00
|
|
|
configData.hpRecoverDelay = GLConfig.Inst.data.FightHPRecoverDelay;
|
|
|
|
|
configData.hpRecoverFix = GLConfig.Inst.data.FightHPRecoverValueFixed;
|
|
|
|
|
configData.hpRecoverPercent = GLConfig.Inst.data.FightHPRecoverValuePercent;
|
2024-11-11 19:36:00 +08:00
|
|
|
configData.turnSpeed = GLConfig.Inst.data.FightCharacterTurnSpeed;
|
2024-11-11 13:16:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void _InitGlobalConfigAfter(CharacterConfigData configData)
|
|
|
|
|
{
|
|
|
|
|
configData.overflowShield = Mathf.FloorToInt(GLConfig.Inst.data.FightOverFlowShiledMaxPercent * configData.maxShield);
|
2024-11-11 19:21:33 +08:00
|
|
|
configData.suppressMorale = Mathf.FloorToInt(configData.maxMorale * GLConfig.Inst.data.FightSuppressMoralePercent);
|
|
|
|
|
configData.retreatMorale = Mathf.FloorToInt(configData.maxMorale * GLConfig.Inst.data.FightRetreateMoralePercent);
|
2024-11-11 12:07:48 +08:00
|
|
|
}
|
|
|
|
|
|
2024-11-11 13:52:53 +08:00
|
|
|
private static void _SetConfigAttackValue(CharacterConfigData configData, int weaponId, float weaponDegree)
|
|
|
|
|
{
|
|
|
|
|
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.GetOrDefault(weaponId);
|
|
|
|
|
if (weaponConfig == null)
|
|
|
|
|
{
|
|
|
|
|
configData.attack = 0;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var weaponAttack = weaponConfig.AttackPower;
|
|
|
|
|
configData.attack = Mathf.CeilToInt(weaponAttack * weaponDegree);
|
|
|
|
|
}
|
2024-11-14 13:21:34 +08:00
|
|
|
|
|
|
|
|
public static CharacterConfigData CombineSelfNpcConfigData(int configId, int localId, int npcLevel)
|
|
|
|
|
{
|
|
|
|
|
var npcConfig = TableManager.Instance.Tables.FightNPCConfig.GetOrDefault(configId);
|
|
|
|
|
|
|
|
|
|
var configData = new CharacterConfigData();
|
|
|
|
|
_InitGlobalConfigBefore(configData);
|
|
|
|
|
|
|
|
|
|
configData.localId = localId;
|
|
|
|
|
configData.debugShowInfo = new DebugShowInfo();
|
|
|
|
|
configData.debugShowInfo.name = npcConfig.NameRead;
|
|
|
|
|
configData.debugShowInfo.iconPath = "";
|
|
|
|
|
configData.debugShowInfo.configId = "FightNPCConfig@" + configId;
|
|
|
|
|
|
|
|
|
|
configData.level = npcLevel;
|
|
|
|
|
var weaponDegree = npcConfig.WeaponDegree;
|
|
|
|
|
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.GetOrDefault(npcConfig.WeaponId);
|
|
|
|
|
if (weaponConfig == null)
|
|
|
|
|
{
|
|
|
|
|
throw new Exception("己方NPC配置的武器ID无效");
|
|
|
|
|
}
|
|
|
|
|
_SetConfigAttackValue(configData, npcConfig.WeaponId, weaponDegree);
|
|
|
|
|
|
|
|
|
|
configData.defense = Mathf.CeilToInt(npcConfig.Defence);
|
|
|
|
|
|
|
|
|
|
configData.maxHp = Mathf.CeilToInt(npcConfig.Hp);
|
|
|
|
|
configData.maxShield = Mathf.CeilToInt(npcConfig.Shield);
|
|
|
|
|
configData.moveSpeed = npcConfig.Speed;
|
|
|
|
|
configData.retreatSpeed = npcConfig.RetreatSpeed;
|
|
|
|
|
configData.initMorale = npcConfig.MaxMorale;
|
|
|
|
|
configData.maxMorale = npcConfig.MaxMorale;
|
|
|
|
|
configData.moraleRecover = (int)npcConfig.CorrageRecover;
|
|
|
|
|
|
|
|
|
|
configData.criticalRate = npcConfig.CriticalRatio;
|
|
|
|
|
configData.criticalScale = npcConfig.CriticalDamage;
|
|
|
|
|
configData.moveShootType = npcConfig.MoveShootType;
|
|
|
|
|
configData.skillId = npcConfig.SkillId;
|
|
|
|
|
configData.job = npcConfig.Job;
|
|
|
|
|
|
|
|
|
|
configData.faction = npcConfig.Fraction;
|
|
|
|
|
configData.boundTags = new List<int>();
|
|
|
|
|
configData.boundTags.Add((int)npcConfig.Fraction);
|
|
|
|
|
|
|
|
|
|
configData.rarity = 0;
|
|
|
|
|
// configData.modelPath = monsterTConfig.PrefabPath;
|
|
|
|
|
configData.weaponId = npcConfig.WeaponId;
|
|
|
|
|
configData.crossLevel = npcConfig.MoveCrossLevel;
|
|
|
|
|
configData.standLevel = npcConfig.StandCrossLevel;
|
|
|
|
|
// 使用攻击距离作为索敌距离
|
|
|
|
|
configData.findEnemyRange = weaponConfig.AttackDistance;
|
|
|
|
|
configData.eyeBrowColor = npcConfig.EmojiEyeBowsColor;
|
|
|
|
|
configData.eyesColor = npcConfig.EmojiEyesColor;
|
|
|
|
|
|
|
|
|
|
configData.nameId = npcConfig.NameId;
|
|
|
|
|
|
|
|
|
|
configData.damagePepoleScale = weaponConfig.DamageScaleForHuman;
|
|
|
|
|
configData.damageCarsScale = weaponConfig.DamageScaleForVehicle;
|
|
|
|
|
configData.damageBuildingsScale = weaponConfig.DamageScaleForBuilding;
|
|
|
|
|
configData.attackShiledScale = weaponConfig.DamageScaleForShiled;
|
|
|
|
|
configData.attackHpScale = weaponConfig.DamageScaleForHp;
|
|
|
|
|
configData.moraleAttack = weaponConfig.MoraleDamage;
|
|
|
|
|
|
|
|
|
|
configData.attackEndTime = weaponConfig.AttackEndTime;
|
|
|
|
|
configData.raiseWeaponTime = weaponConfig.RaiseWeaponTime;
|
|
|
|
|
configData.attackLoopCount = weaponConfig.AttackLoopCount;
|
|
|
|
|
configData.reloadTime = weaponConfig.ReloadTime;
|
|
|
|
|
configData.maxBulletCount = weaponConfig.MaxBulletCount;
|
|
|
|
|
configData.shootDistance = weaponConfig.AttackDistance;
|
|
|
|
|
var shootCd = 1f / weaponConfig.ShootSpeed;
|
|
|
|
|
configData.shootCD = shootCd;
|
|
|
|
|
|
|
|
|
|
configData.isAttackIgnoreBlock = weaponConfig.AttackIgoreBlock;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: 目前没有怪物的被动技能
|
|
|
|
|
configData.breakPassiveSkillId = 0;
|
|
|
|
|
configData.awakePassiveSkillId = 0;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < npcConfig.PassiveBuffIds.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
var buffId = npcConfig.PassiveBuffIds[i];
|
|
|
|
|
configData.passiveBuffIds.Add(buffId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_InitGlobalConfigAfter(configData);
|
|
|
|
|
return configData;
|
|
|
|
|
}
|
2024-11-11 13:52:53 +08:00
|
|
|
|
2024-11-14 13:21:34 +08:00
|
|
|
public static CharacterConfigData CombineEnemyConfigData(int npcId, int localId, int npcLevel)
|
2023-12-14 14:42:27 +08:00
|
|
|
{
|
2023-12-20 13:47:28 +08:00
|
|
|
var monsterConfig = TableManager.Instance.Tables.Monster.Get(npcId);
|
2023-12-14 14:42:27 +08:00
|
|
|
var monsterTConfig = TableManager.Instance.Tables.MonsterClass.Get(monsterConfig.MonsterClassID);
|
|
|
|
|
var monsterLevelConfig = TableManager.Instance.Tables.MonsterLevelUp.Get(npcLevel);
|
|
|
|
|
|
|
|
|
|
var configData = new CharacterConfigData();
|
2024-11-11 13:16:43 +08:00
|
|
|
_InitGlobalConfigBefore(configData);
|
2024-11-11 12:07:48 +08:00
|
|
|
|
2024-11-07 15:31:32 +08:00
|
|
|
configData.localId = localId;
|
2024-06-11 19:36:19 +08:00
|
|
|
configData.debugShowInfo = new DebugShowInfo();
|
|
|
|
|
configData.debugShowInfo.name = monsterTConfig.Name;
|
|
|
|
|
configData.debugShowInfo.iconPath = "";
|
|
|
|
|
configData.debugShowInfo.configId = "MonsterClass@" + monsterTConfig.MonsterClassID;
|
|
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.level = npcLevel;
|
2024-11-11 13:52:53 +08:00
|
|
|
var weaponDegree = monsterTConfig.WeaponDegree * monsterLevelConfig.WeaponDegreeScale;
|
2024-11-11 19:21:33 +08:00
|
|
|
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.GetOrDefault(monsterTConfig.WeaponId);
|
|
|
|
|
if (weaponConfig == null)
|
|
|
|
|
{
|
|
|
|
|
throw new Exception("敌人配置的武器ID无效");
|
|
|
|
|
}
|
2024-11-11 13:52:53 +08:00
|
|
|
_SetConfigAttackValue(configData, monsterTConfig.WeaponId, weaponDegree);
|
2024-11-11 19:21:33 +08:00
|
|
|
|
|
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.defense = Mathf.CeilToInt(monsterTConfig.Defence * monsterConfig.DefenceFix * monsterLevelConfig.DefenceLevelUpTemplate);
|
2024-11-11 12:07:48 +08:00
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.maxHp = Mathf.CeilToInt(monsterTConfig.Hp * monsterConfig.HPFix * monsterLevelConfig.HpLevelUpTemplate);
|
|
|
|
|
configData.maxShield = Mathf.CeilToInt(monsterTConfig.Shield * monsterConfig.ShieldFix * monsterLevelConfig.ShieldLevelUpTemplate);
|
|
|
|
|
configData.moveSpeed = monsterTConfig.Speed;
|
|
|
|
|
configData.retreatSpeed = monsterTConfig.RetreatSpeed;
|
|
|
|
|
configData.initMorale = monsterTConfig.MaxMorale;
|
|
|
|
|
configData.maxMorale = monsterTConfig.MaxMorale;
|
|
|
|
|
configData.moraleRecover = (int)monsterTConfig.CorrageRecover;
|
2024-11-11 19:21:33 +08:00
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.criticalRate = monsterTConfig.CriticalRatio;
|
|
|
|
|
configData.criticalScale = monsterTConfig.CriticalDamage;
|
|
|
|
|
configData.moveShootType = monsterTConfig.MoveShootType;
|
|
|
|
|
configData.skillId = monsterTConfig.SkillId;
|
|
|
|
|
configData.job = monsterTConfig.Job;
|
2024-11-14 13:21:34 +08:00
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.faction = monsterTConfig.Fraction;
|
2024-11-14 13:21:34 +08:00
|
|
|
configData.boundTags = new List<int>();
|
|
|
|
|
configData.boundTags.Add((int)monsterTConfig.Fraction);
|
|
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.rarity = 0;
|
2024-01-15 12:47:59 +08:00
|
|
|
// configData.modelPath = monsterTConfig.PrefabPath;
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.weaponId = monsterTConfig.WeaponId;
|
|
|
|
|
configData.crossLevel = monsterTConfig.MoveCrossLevel;
|
|
|
|
|
configData.standLevel = monsterTConfig.StandCrossLevel;
|
|
|
|
|
configData.findEnemyRange = monsterConfig.FindEnemyRange;
|
|
|
|
|
configData.eyeBrowsType = monsterTConfig.EmojiEyeBowsType;
|
|
|
|
|
configData.eyeBrowColor = monsterTConfig.EmojiEyeBowsColor;
|
|
|
|
|
configData.eyesColor = monsterTConfig.EmojiEyesColor;
|
2023-12-26 16:44:52 +08:00
|
|
|
|
2023-12-20 13:47:28 +08:00
|
|
|
configData.nameId = monsterTConfig.NameId;
|
2024-11-11 19:21:33 +08:00
|
|
|
|
|
|
|
|
configData.damagePepoleScale = weaponConfig.DamageScaleForHuman;
|
|
|
|
|
configData.damageCarsScale = weaponConfig.DamageScaleForVehicle;
|
|
|
|
|
configData.damageBuildingsScale = weaponConfig.DamageScaleForBuilding;
|
|
|
|
|
configData.attackShiledScale = weaponConfig.DamageScaleForShiled;
|
|
|
|
|
configData.attackHpScale = weaponConfig.DamageScaleForHp;
|
2024-11-14 13:21:34 +08:00
|
|
|
configData.moraleAttack = weaponConfig.MoraleDamage;
|
2023-12-20 13:47:28 +08:00
|
|
|
|
2024-11-11 19:21:33 +08:00
|
|
|
configData.attackEndTime = weaponConfig.AttackEndTime;
|
|
|
|
|
configData.raiseWeaponTime = weaponConfig.RaiseWeaponTime;
|
|
|
|
|
configData.attackLoopCount = weaponConfig.AttackLoopCount;
|
|
|
|
|
configData.reloadTime = weaponConfig.ReloadTime;
|
|
|
|
|
configData.maxBulletCount = weaponConfig.MaxBulletCount;
|
2024-11-11 19:28:18 +08:00
|
|
|
configData.shootDistance = weaponConfig.AttackDistance;
|
2024-11-11 19:21:33 +08:00
|
|
|
var shootCd = 1f / weaponConfig.ShootSpeed;
|
|
|
|
|
configData.shootCD = shootCd;
|
2024-11-11 19:28:18 +08:00
|
|
|
|
|
|
|
|
configData.isAttackIgnoreBlock = weaponConfig.AttackIgoreBlock;
|
|
|
|
|
|
2024-10-17 14:50:33 +08:00
|
|
|
|
2024-04-12 13:05:20 +08:00
|
|
|
// TODO: 目前没有怪物的被动技能
|
|
|
|
|
configData.breakPassiveSkillId = 0;
|
|
|
|
|
configData.awakePassiveSkillId = 0;
|
|
|
|
|
|
2024-09-05 15:14:52 +08:00
|
|
|
for (int i = 0; i < monsterTConfig.PassiveBuffIds.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
var buffId = monsterTConfig.PassiveBuffIds[i];
|
|
|
|
|
configData.passiveBuffIds.Add(buffId);
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-11 13:16:43 +08:00
|
|
|
_InitGlobalConfigAfter(configData);
|
2023-12-14 14:42:27 +08:00
|
|
|
return configData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static CharacterConfigData CombineConfigData(CharacterDataInfo characterInfo)
|
|
|
|
|
{
|
|
|
|
|
var cId = characterInfo.Cfg.RoleID;
|
|
|
|
|
var characterData = TableManager.Instance.Tables.CharacterAttri.Get(cId);
|
2024-11-11 19:21:33 +08:00
|
|
|
if (characterData == null)
|
|
|
|
|
{
|
|
|
|
|
DebugUtil.LogError($"角色ID:{cId} 无法找到对应的角色配置");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.GetOrDefault(characterInfo.WeaponId());
|
|
|
|
|
if (weaponConfig == null)
|
|
|
|
|
{
|
|
|
|
|
DebugUtil.LogError($"角色ID:{cId} 无法找到对应的武器配置: {characterInfo.WeaponId()}");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2023-12-14 14:42:27 +08:00
|
|
|
var fakeLevel = (int)characterInfo.Level;
|
|
|
|
|
|
|
|
|
|
var levelIndex = fakeLevel - 1;
|
|
|
|
|
var defenceDataList = characterData.Defence;
|
|
|
|
|
var hpDataList = characterData.Hp;
|
|
|
|
|
var shieldDataList = characterData.Shield;
|
2024-11-11 13:52:53 +08:00
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
var levelDefence = defenceDataList[levelIndex];
|
|
|
|
|
var levelHp = hpDataList[levelIndex];
|
|
|
|
|
var levelShield = shieldDataList[levelIndex];
|
|
|
|
|
|
|
|
|
|
var skillId = GetCharacterSkillId(characterInfo);
|
|
|
|
|
|
|
|
|
|
var configData = new CharacterConfigData();
|
2024-11-11 13:16:43 +08:00
|
|
|
_InitGlobalConfigBefore(configData);
|
2024-07-02 13:45:19 +08:00
|
|
|
|
|
|
|
|
configData.cfgId = cId;
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.level = fakeLevel;
|
2024-11-11 13:52:53 +08:00
|
|
|
|
|
|
|
|
// TODO: 等待从角色养成数据中读取
|
2024-11-11 19:21:33 +08:00
|
|
|
_SetConfigAttackValue(configData, characterInfo.WeaponId(), characterData.WeaponDegree);
|
2024-11-11 13:52:53 +08:00
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.defense = levelDefence;
|
|
|
|
|
configData.maxHp = levelHp;
|
|
|
|
|
configData.maxShield = levelShield;
|
|
|
|
|
configData.moveSpeed = characterData.Speed;
|
|
|
|
|
configData.retreatSpeed = characterData.RetreatSpeed;
|
2024-11-11 19:28:18 +08:00
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.initMorale = characterData.MaxMorale;
|
|
|
|
|
configData.maxMorale = characterData.MaxMorale;
|
|
|
|
|
configData.moraleRecover = (int)characterData.CorrageRecover;
|
2024-11-11 19:21:33 +08:00
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.criticalRate = characterData.CriticalRatio;
|
|
|
|
|
configData.criticalScale = characterData.CriticalDamage;
|
|
|
|
|
configData.moveShootType = characterData.MoveShootType;
|
2024-11-11 19:36:00 +08:00
|
|
|
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.skillId = skillId;
|
|
|
|
|
configData.job = characterData.Job;
|
2024-11-14 15:44:17 +08:00
|
|
|
configData.faction = CommonUtils.GetEfactionByCfg(characterData);
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.rarity = characterData.StartStar;
|
2024-06-24 13:02:03 +08:00
|
|
|
var skinId = (int)characterInfo.SkinID;
|
|
|
|
|
var skinConfig = TableManager.Instance.Tables.SkinCfg.Get(skinId, characterData.RoleID);
|
2024-01-03 13:17:27 +08:00
|
|
|
if (skinConfig == null)
|
|
|
|
|
{
|
2024-06-24 13:02:03 +08:00
|
|
|
DebugUtil.LogError($"{characterData.NameRead} 无有效皮肤配置: {skinId}");
|
2024-01-03 13:17:27 +08:00
|
|
|
configData.nameId = characterData.NameID;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
configData.nameId = skinConfig.NameID;
|
|
|
|
|
}
|
2023-12-14 14:42:27 +08:00
|
|
|
configData.weaponId = characterData.WeaponId;
|
|
|
|
|
configData.crossLevel = characterData.MoveCrossLevel;
|
|
|
|
|
configData.standLevel = characterData.StandCrossLevel;
|
2024-11-14 15:44:17 +08:00
|
|
|
configData.boundTags = new List<int>
|
|
|
|
|
{
|
|
|
|
|
(int)CommonUtils.GetEfactionByCfg(characterData)
|
|
|
|
|
};
|
2023-12-14 14:42:27 +08:00
|
|
|
|
|
|
|
|
configData.eyeBrowsType = characterData.EmojiEyeBowsType;
|
|
|
|
|
configData.eyesColor = characterData.EmojiEyesColor;
|
|
|
|
|
configData.eyeBrowColor = characterData.EmojiEyeBowsColor;
|
2024-05-17 12:24:55 +08:00
|
|
|
|
2024-11-11 19:21:33 +08:00
|
|
|
configData.attackHpScale = characterInfo.DamageScaleToHp();
|
|
|
|
|
configData.attackShiledScale = characterInfo.DamageScaleToShiled();
|
|
|
|
|
configData.damagePepoleScale = characterInfo.DamageScaleToHuman();
|
|
|
|
|
configData.damageCarsScale = characterInfo.DamageScaleToCarrier();
|
|
|
|
|
configData.damageBuildingsScale = characterInfo.DamageScaleToBuilding();
|
2024-11-14 13:21:34 +08:00
|
|
|
configData.moraleAttack = Mathf.FloorToInt(characterInfo.YaZhi());
|
2024-11-11 19:21:33 +08:00
|
|
|
|
|
|
|
|
configData.raiseWeaponTime = weaponConfig.RaiseWeaponTime;
|
|
|
|
|
configData.attackEndTime = weaponConfig.AttackEndTime;
|
|
|
|
|
configData.attackLoopCount = weaponConfig.AttackLoopCount;
|
|
|
|
|
configData.reloadTime = characterInfo.ChangeBulletTime();
|
|
|
|
|
configData.maxBulletCount = characterInfo.BulletCapacity();
|
2024-11-11 19:28:18 +08:00
|
|
|
configData.shootDistance = characterInfo.AttackDistance();
|
|
|
|
|
// TODO: 角色单位使用攻击距离作为索敌距离
|
|
|
|
|
configData.findEnemyRange = configData.shootDistance;
|
2024-11-11 19:21:33 +08:00
|
|
|
|
|
|
|
|
var shootCd = 1f / characterInfo.ShootSpeed();
|
|
|
|
|
configData.shootCD = shootCd;
|
2024-11-11 19:28:18 +08:00
|
|
|
|
|
|
|
|
configData.isAttackIgnoreBlock = weaponConfig.AttackIgoreBlock;
|
|
|
|
|
|
2024-10-17 14:50:33 +08:00
|
|
|
|
2024-05-17 12:24:55 +08:00
|
|
|
if (characterInfo.BreakCfg == null)
|
|
|
|
|
{
|
|
|
|
|
configData.breakPassiveSkillId = 0;
|
|
|
|
|
DebugUtil.LogError("角色ID:{0} 突破配置为空, 当前突破等级: {1}", cId, characterInfo.BreakLevel);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
configData.breakPassiveSkillId = characterInfo.BreakCfg.PassiveSkillID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (characterInfo.AwakeCfg == null)
|
|
|
|
|
{
|
|
|
|
|
configData.awakePassiveSkillId = 0;
|
|
|
|
|
DebugUtil.LogError("角色ID:{0} 觉醒配置为空, 当前觉醒等级: {1}", cId, characterInfo.AwakeLevel);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
configData.awakePassiveSkillId = characterInfo.AwakeCfg.PassiveSkillID;
|
|
|
|
|
}
|
2024-01-03 13:17:27 +08:00
|
|
|
|
2024-06-11 19:36:19 +08:00
|
|
|
|
|
|
|
|
configData.debugShowInfo = new DebugShowInfo();
|
|
|
|
|
configData.debugShowInfo.name = characterData.NameRead;
|
|
|
|
|
// Assets/Art/UI/Texture/Icon/HeadPic/Icon_HeadPic_A00001.png
|
|
|
|
|
configData.debugShowInfo.iconPath = skinConfig == null ? "Null" : skinConfig.PIcHeadPath;
|
|
|
|
|
configData.debugShowInfo.iconPath = $"Assets/Art/UI/Texture/Icon/HeadPic/{configData.debugShowInfo.iconPath}.png";
|
|
|
|
|
configData.debugShowInfo.configId = "CharacterDefault@" + cId;
|
2024-06-12 19:09:10 +08:00
|
|
|
configData.debugShowInfo.cacheConfigId = characterInfo.Cfg.RoleID;
|
2024-06-11 19:36:19 +08:00
|
|
|
|
2024-11-11 13:16:43 +08:00
|
|
|
_InitGlobalConfigAfter(configData);
|
2023-12-14 14:42:27 +08:00
|
|
|
return configData;
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
}
|
|
|
|
|
}
|