yyl
2025-10-31 39001a600fcae2bcf27c225df8752d75fb92fef4
Main/System/Team/TeamHero.cs
@@ -1,15 +1,143 @@
using UnityEngine;
public partial class TeamHero
{
    public HeroInfo heroInfo;
    public TeamBase teamBase;
    public int heroIndex;
    public int heroId;
    public HeroCountry Country;
    public int SkinID;
    public HeroSkinConfig skinConfig;
    public string guid;
    public float modelScale = 1f;
    public int level = 0;
    public string name;
    public TeamBase teamBase
    {
        get; private set;
    }
    public int positionNum; //注意服务端的1号位是1,客户端在使用时是0,通信和策划沟通用1
    //  战场数据
    public int ObjID = 0;// 战斗单位唯一ID
    public int NPCID = 0;// 战斗NPCID,不同的实例ID对应的NPCID可能一样 (目前只用来区别玩家跟NPC)
    //  服务器来的构造
    public TeamHero(HB424_tagSCTurnFightInit.tagSCTurnFightObj fightObj, TeamBase _teamBase)
    {
        //  判断一下是npc还是玩家
        heroId = (int)fightObj.HeroID;
        // B4 24 回合战斗初始化 #tagSCTurnFightInit
        // 封包中的 HeroID、SkinID 字段不再是玩家阵容独有,NPC阵容也可能有值,一般是关联武将的NPC有值
        // 如果 HeroID、SkinID 不为空,则可认为是关联武将的NPC,外观相关默认通过HeroID读取武将相关,如名称
        // 皮肤 SkinID 不为空时,则模型默认使用该皮肤
        // 如果 HeroID、SkinID 为空, NPCID不为空,则走原NPC默认规则
        //  补充 skinid跟heroid要么同时没有 要么同时有 如果这三个id都没有的话 那就是配置严重错误 无法弥补
        if (fightObj.SkinID > 0 && fightObj.HeroID > 0)
        {
            // 走玩家逻辑
            var heroConfig = HeroConfig.Get(heroId);
            if (null == heroConfig)
            {
                Debug.LogError("hero config is null, heroId : " + heroId);
                return;
            }
            Country = (HeroCountry)heroConfig.Country;
            SkinID = (int)fightObj.SkinID;
            modelScale = 1f;
            name = heroConfig.Name;
        }
        else
        {
            throw new System.Exception("hero id and skin id are both invalid, npc id is invalid too (all <= 0)");
        }
        if (fightObj.NPCID > 0)
        {
            NPCConfig npcConfig = NPCConfig.Get((int)fightObj.NPCID);
            if (null != npcConfig)
            {
                modelScale = npcConfig.ModelScale;
            }
        }
        level = (int)fightObj.LV;
        skinConfig = HeroSkinConfig.Get(SkinID);
        teamBase = _teamBase;
        ObjID = (int)fightObj.ObjID;
        NPCID = (int)fightObj.NPCID;
        // HPEx * 1亿 + HP
        curHp = (long)fightObj.HPEx * (long)Constants.ExpPointValue + (long)fightObj.HP;
        maxHp = (long)fightObj.MaxHPEx * (long)Constants.ExpPointValue + (long)fightObj.MaxHP;
        rage = (int)fightObj.AngreXP;
        positionNum = fightObj.PosNum - 1;
        //  【重要】战斗构成里没有卡牌的guid
        guid = string.Empty;
        Update();
    }
    private static int DecreasingObjID = 0;
    //  布阵时的构造
    public TeamHero(HeroInfo heroInfo, int posNum, TeamBase _teamBase)
    {
        heroId = heroInfo.itemHero.config.ID;
        SkinID = heroInfo.SkinID;
        skinConfig = heroInfo.skinConfig;
        Country = heroInfo.heroCountry;
        teamBase = _teamBase;
        ObjID = --DecreasingObjID;
        NPCID = 0;
        curHp = heroInfo.hp;
        maxHp = heroInfo.hp;
        rage = 0;
        positionNum = posNum;
        //  【重要】布阵里的要guid
        guid = heroInfo.itemHero.guid;
        Update();
    }
    public void OnSwapPosition(TeamHero teamHero)
    {
        teamBase.SwapPosition(positionNum, teamHero.positionNum);
        Update();
    }
    public void Update()
    {
    }
    //  最终属性 当前属性应该是要在这一层的
   public int GetPower()
   {
      return heroInfo.CalculatePower();
   }
    public int GetPower()
    {
        // 计算战斗力YYL TODO
        return 0;
    }
}