| | |
| | | using UnityEngine; |
| | | using LitJson; |
| | | |
| | | // 武将信息:实际获得的武将,不包含图鉴数据 |
| | | public partial class HeroInfo |
| | | { |
| | | // 武将服务器唯一ID |
| | | public long sid; |
| | | |
| | | // 武将配置表ID |
| | | public int heroId |
| | | { |
| | | get |
| | | { |
| | | #if UNITY_EDITOR |
| | | if (null == itemHero) |
| | | { |
| | | return 520001; |
| | | } |
| | | #endif |
| | | public int heroId; |
| | | |
| | | return itemHero.config.ID; |
| | | } |
| | | } |
| | | |
| | | // 武将等级 |
| | | public int heroLevel; |
| | | |
| | | // 武将星级 |
| | | public int heroStar; |
| | | |
| | | // 武将突破等级 |
| | | public int breakLevel; |
| | | |
| | | // 武将觉醒等级 |
| | | public int awakeLevel; |
| | | |
| | | // 武将配置 |
| | | public HeroConfig heroConfig { get; private set; } |
| | | public ItemModel itemHero; //引用背包里的 数据同步 |
| | | |
| | | public HeroCountry heroCountry |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | // 品质配置 |
| | | public HeroQualityConfig qualityConfig { get; private set; } |
| | | |
| | | public int Quality |
| | | { |
| | | get |
| | |
| | | } |
| | | } |
| | | |
| | | public ItemModel itemHero; |
| | | |
| | | // public readonly CB122_tagSCHeroInfo.tagSCHero scHeroInfo; |
| | | |
| | | // 武将配置 |
| | | public HeroConfig heroConfig; |
| | | // 觉醒配置 |
| | | public HeroAwakeConfig awakeConfig; |
| | | // 突破配置 |
| | | public HeroBreakConfig breakConfig; |
| | | // 羁绊配置 |
| | | public HeroFetterConfig fetterConfig; |
| | | // 品质觉醒配置 |
| | | public HeroQualityAwakeConfig qualityAwakeConfig; |
| | | // 品质配置 |
| | | public HeroQualityConfig qualityConfig; |
| | | // 品质突破配置 |
| | | public HeroQualityBreakConfig qualityBreakConfig; |
| | | |
| | | public List<HeroFetterInfo> fetterInfoList = new List<HeroFetterInfo>(); |
| | | public List<HeroTalentInfo> talentList = new List<HeroTalentInfo>(); |
| | | |
| | | |
| | | public HeroInfo(/*CB122_tagSCHeroInfo.tagSCHero _scHeroInfo, */ItemModel _itemHero) |
| | | // 武将等级 |
| | | public int heroLevel |
| | | { |
| | | // scHeroInfo = _scHeroInfo; |
| | | get |
| | | { |
| | | if (itemHero == null) |
| | | return 0; |
| | | return itemHero.GetUseDataFirstValue(70); |
| | | } |
| | | } |
| | | |
| | | |
| | | public bool isLock |
| | | { |
| | | get |
| | | { |
| | | return itemHero.itemInfo.isLock; |
| | | } |
| | | } |
| | | |
| | | |
| | | //已学习的所有技能取最高级的技能 |
| | | Dictionary<int, int> allSkillTypeIDToID = new Dictionary<int, int>(); //技能类型ID: 最高技能ID |
| | | |
| | | |
| | | public HeroInfo(ItemModel _itemHero) |
| | | { |
| | | UpdateHero(_itemHero); |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | #if UNITY_EDITOR |
| | | public HeroInfo() |
| | | { |
| | | heroLevel = 1; |
| | | heroStar = 1; |
| | | breakLevel = 1; |
| | | awakeLevel = 1; |
| | | SkinIndex = 0; |
| | | heroConfig = HeroConfig.Get(heroId); |
| | | awakeConfig = HeroAwakeConfig.GetHeroAwakeConfig(heroId, awakeLevel); |
| | | breakConfig = HeroBreakConfig.GetHeroBreakConfig(heroId, breakLevel); |
| | | qualityAwakeConfig = HeroQualityAwakeConfig.GetQualityAwakeConfig(Quality, awakeLevel); |
| | | qualityConfig = HeroQualityConfig.Get(Quality); |
| | | qualityBreakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(Quality, awakeLevel); |
| | | CalculateProperties(); |
| | | } |
| | | #endif |
| | | |
| | | // public HeroInfo Clone() => JsonMapper.ToObject<HeroInfo>(JsonMapper.ToJson(this)); |
| | | |
| | | // 图鉴信息 |
| | | public void UpdateSCHero(CB122_tagSCHeroInfo.tagSCHero _scHeroInfo) |
| | | { |
| | | |
| | | } |
| | | |
| | | public void UpdateHero(ItemModel _itemHero) |
| | | { |
| | | itemHero = _itemHero; |
| | | // HeroConfigUtility |
| | | |
| | | // 70 # 英雄等级 |
| | | heroLevel = itemHero.GetUseData(70)[0]; |
| | | // 72 # 英雄星级 |
| | | heroStar = itemHero.GetUseData(72)[0]; |
| | | // 74 # 英雄突破等级 |
| | | breakLevel = itemHero.GetUseData(74)[0]; |
| | | // 76 # 英雄觉醒等级 |
| | | awakeLevel = itemHero.GetUseData(76)[0]; |
| | | // 78 # 英雄使用的皮肤索引 |
| | | SkinIndex = itemHero.GetUseData(78)[0]; |
| | | |
| | | |
| | | // 71 # 英雄天赋ID列表 |
| | | List<int> talentSkillList = itemHero.GetUseData(71); |
| | | // 73 # 英雄天赋ID等级列表,对应71天赋ID的等级 |
| | | List<int> talentLvList = itemHero.GetUseData(73); |
| | | // 75 # 英雄天赋洗炼锁定索引列表,对应71天赋ID索引 |
| | | List<int> talentLockList = itemHero.GetUseData(75); |
| | | heroId = itemHero.config.ID; |
| | | |
| | | InitConfigs(); |
| | | |
| | | if (talentLockList.Count != talentLvList.Count || talentLvList.Count != talentSkillList.Count) |
| | | { |
| | | Debug.LogError("天赋ID列表及后续的数据数量没对上"); |
| | | } |
| | | CalculateProperties(); |
| | | // // 羁绊 |
| | | // fetterInfoList.Clear(); |
| | | // for (int i = 0; i < heroConfig.FetterIDList.Length; i++) |
| | | // { |
| | | // fetterInfoList.Add(new HeroFetterInfo(this, heroConfig.FetterIDList[i])); |
| | | // } |
| | | |
| | | // 天赋 |
| | | talentList.Clear(); |
| | | for (int i = 0; i < talentSkillList.Count; i++) |
| | | { |
| | | talentList.Add(new HeroTalentInfo(this, talentSkillList[i], talentLvList[i], talentLockList[i])); |
| | | } |
| | | |
| | | // 羁绊 |
| | | fetterInfoList.Clear(); |
| | | for (int i = 0; i < heroConfig.FetterIDList.Length; i++) |
| | | { |
| | | fetterInfoList.Add(new HeroFetterInfo(this, heroConfig.FetterIDList[i])); |
| | | } |
| | | |
| | | // 77 # 英雄天赋洗炼随机ID列表 |
| | | // 79 # 英雄觉醒时随机天赋选项ID列表 |
| | | // 80 # 主阵型上阵位置 |
| | | // 80 # 主阵型上阵位置 |
| | | } |
| | | |
| | | protected void InitConfigs() |
| | | { |
| | | // 武将配置 |
| | | heroConfig = HeroConfig.Get(heroId); |
| | | |
| | | // 觉醒配置 (满级为空) |
| | | awakeConfig = HeroAwakeConfig.GetHeroAwakeConfig(heroId, awakeLevel); |
| | | |
| | | // 突破配置 |
| | | breakConfig = HeroBreakConfig.GetHeroBreakConfig(heroId, breakLevel); |
| | | |
| | | // 羁绊配置 可能需要fetterid 去检索效率太低 |
| | | // fetterConfig; |
| | | |
| | | // 品质觉醒配置 |
| | | qualityAwakeConfig = HeroQualityAwakeConfig.GetQualityAwakeConfig(Quality, awakeLevel); |
| | | |
| | | // 品质配置 |
| | | qualityConfig = HeroQualityConfig.Get(Quality); |
| | | |
| | | // 品质突破配置 |
| | | qualityBreakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(Quality, awakeLevel); |
| | | qualityBreakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(Quality, breakLevel); |
| | | |
| | | breakConfig = HeroBreakConfig.GetHeroBreakConfig(heroId, breakLevel); |
| | | awakeConfig = HeroAwakeConfig.GetHeroAwakeConfig(heroId, awakeLevel); |
| | | qualityAwakeConfig = HeroQualityAwakeConfig.GetQualityAwakeConfig(Quality, awakeLevel); |
| | | |
| | | } |
| | | |
| | | public int GetInheritRate(HeroAttrType attrType) |
| | | |
| | | |
| | | //是否上x阵 服务端队伍 |
| | | public bool IsInTeamByTeamType(TeamType teamType) |
| | | { |
| | | return heroConfig.GetInheritPercent(attrType); |
| | | return TeamManager.Instance.GetTeam(teamType).HasHeroInServer(itemHero.guid); |
| | | } |
| | | |
| | | //是否上任何阵容 |
| | | public bool IsInAnyTeam() |
| | | { |
| | | for (int i = 1; i < (int)TeamType.Max; i++) |
| | | { |
| | | if (TeamManager.Instance.GetTeam((TeamType)i).HasHeroInServer(itemHero.guid)) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //是否上任何阵容,且只有一只 |
| | | public bool IsInAnyTeamJustOne() |
| | | { |
| | | for (int i = 1; i < (int)TeamType.Max; i++) |
| | | { |
| | | var team = TeamManager.Instance.GetTeam((TeamType)i); |
| | | if (team.HasHeroInServer(itemHero.guid)) |
| | | { |
| | | if (team.GetTeamHeroCount() == 1) |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //下阵所有阵容 |
| | | public void LeaveAllTeam() |
| | | { |
| | | for (int i = 1; i < (int)TeamType.Max; i++) |
| | | { |
| | | int pos; |
| | | var team = TeamManager.Instance.GetTeam((TeamType)i); |
| | | if (TeamManager.Instance.GetTeam((TeamType)i).RemoveHero(this, out pos)) |
| | | { |
| | | //如果是最后一个武将,则默认上阵一个 |
| | | team.SaveTeam(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public long GetSkillsFightPower() |
| | | { |
| | | long fightPower = 0; |
| | | foreach (var skillID in allSkillTypeIDToID.Values) |
| | | { |
| | | fightPower += SkillConfig.Get(skillID).FightPower; |
| | | } |
| | | return fightPower; |
| | | } |
| | | |
| | | |
| | | public void ChangeLockState() |
| | | { |
| | | var pack = new CB238_tagCSHeroLock(); |
| | | pack.ItemIndex = (ushort)itemHero.gridIndex; |
| | | pack.IsLock = isLock ? (byte)0 : (byte)1; |
| | | GameNetSystem.Instance.SendInfo(pack); |
| | | } |
| | | |
| | | } |