示例#1
0
    public void init(FightPlayerModel data, int myTeam)
    {
        this.data = data;
        title.init(data, data.team == myTeam);

        head.material.SetTexture("_MainTex", Resources.Load <Texture>("HeroIcon/" + data.code));

        //如果不是己方单位移除遮罩
        //是友方单位 移除战争视野处理
        if (data.team != myTeam)
        {
            mask.SetActive(false);

            root.SetActive(false);

            title.gameObject.SetActive(false);

            gameObject.layer = LayerMask.NameToLayer("enemy");
        }
        else
        {
            gameObject.layer = LayerMask.NameToLayer("friend");
            Destroy(GetComponentInChildren <Eye>());
        }

        if (data.id < -20)
        {
            //进行怪物寻路
        }
    }
示例#2
0
        internal static Dictionary <int, KeyValuePair <AbsFightModel, BuildingModel> > ReadBuildingModel(string dir, int sheetIndex)
        {
            FileInfo     file    = new FileInfo(dir);
            ExcelPackage package = new ExcelPackage(file);
            Dictionary <int, KeyValuePair <AbsFightModel, BuildingModel> > buildingModelList = null;

            if (package.Workbook.Worksheets.Count > 0)
            {
                buildingModelList = new Dictionary <int, KeyValuePair <AbsFightModel, BuildingModel> >();
                ExcelWorksheet excelWorksheet = package.Workbook.Worksheets[sheetIndex];
                for (int m = excelWorksheet.Dimension.Start.Row + 1, n = excelWorksheet.Dimension.End.Row; m <= n; m++)
                {
                    BuildingModel buildingModel = new BuildingModel();
                    AbsFightModel fightModel    = new AbsFightModel();
                    fightModel.category         = excelWorksheet.GetValue <byte>(m, 1);
                    fightModel.specieId         = excelWorksheet.GetValue <int>(m, 3);
                    fightModel.name             = excelWorksheet.GetValue <string>(m, 4);
                    fightModel.maxHp            = excelWorksheet.GetValue <int>(m, 7);
                    fightModel.atk              = excelWorksheet.GetValue <int>(m, 8);
                    fightModel.def              = excelWorksheet.GetValue <int>(m, 9);
                    fightModel.atkSpeed         = excelWorksheet.GetValue <int>(m, 10);
                    fightModel.atkRange         = excelWorksheet.GetValue <int>(m, 11);
                    fightModel.eyeRange         = excelWorksheet.GetValue <int>(m, 12);
                    buildingModel.couldAttack   = excelWorksheet.GetValue <bool>(m, 13);
                    buildingModel.isAntiStealth = excelWorksheet.GetValue <bool>(m, 14);
                    buildingModel.isReborn      = excelWorksheet.GetValue <bool>(m, 15);
                    buildingModel.rebornTime    = excelWorksheet.GetValue <int>(m, 16);

                    buildingModelList.Add(fightModel.category.GetHashCode() + fightModel.specieId.GetHashCode(), new KeyValuePair <AbsFightModel, BuildingModel>(fightModel, buildingModel));
                }
            }

            package.Dispose();
            return(buildingModelList);
        }
示例#3
0
        private AbsFightInstance GetSoilderInstance(byte teamId, int posId)
        {
            entityMinIndex--;

            AbsFightModel    soilderModel    = SoilderData.SoilderModels[teamId];
            AbsFightInstance soilderInstance = new AbsFightInstance();

            soilderInstance.instanceId = entityMinIndex;
            soilderInstance.name       = soilderModel.name;
            soilderInstance.fightModel = soilderModel;
            soilderInstance.teamId     = teamId;
            soilderInstance.atk        = soilderModel.atk;
            soilderInstance.def        = soilderModel.def;
            soilderInstance.hp         = soilderModel.maxHp;
            soilderInstance.atkRange   = soilderModel.atkRange;
            soilderInstance.speed      = soilderModel.speed;
            soilderInstance.atkSpeed   = soilderModel.atkSpeed;
            soilderInstance.eyeRange   = soilderModel.eyeRange;

            if (teamId == 1)
            {
                soilderInstance.posX = MapData.soilderBornPointTeamOne[posId].x;
                soilderInstance.posY = MapData.soilderBornPointTeamOne[posId].y;
                soilderInstance.posZ = MapData.soilderBornPointTeamOne[posId].z;
            }
            else
            {
                soilderInstance.posX = MapData.soilderBornPointTeamTwo[posId].x;
                soilderInstance.posY = MapData.soilderBornPointTeamTwo[posId].y;
                soilderInstance.posZ = MapData.soilderBornPointTeamTwo[posId].z;
            }

            return(soilderInstance);
        }
示例#4
0
        //伤害计算
        public void damage(int level, ref AbsFightModel atk, ref AbsFightModel target, ref List <int[]> damages)
        {
            int value = atk.atk - target.def;

            value     = value > 0 ? value : 1;
            target.hp = target.hp - value <= 0 ? 0 : target.hp - value;
            damages.Add(new int[] { target.id, value, target.hp == 0 ? 0 : 1 });
        }
示例#5
0
        void damage(NetFrame.UserToken token, DamageDTO value)
        {
            int           userID = getUserID(token);
            AbsFightModel atkModel;
            int           skillLevel = 0;

            //判断攻击者
            if (value.userId >= 0)
            {
                if (value.userId != userID)
                {
                    return;
                }
                atkModel = getPlayer(userID);
                if (value.skill > 0)
                {
                    skillLevel = (atkModel as FightPlayerModel).SkillLevel(value.skill);
                    if (skillLevel == -1)
                    {
                        return;
                    }
                }
            }
            else
            {
                atkModel = getPlayer(userID);
            }
            //TODO
            //获取技能算法
            //循环获取目标数据 和攻击者数据 进行伤害计算 得出伤害数值
            if (!SkillProcessMap.has(value.skill))
            {
                return;
            }
            ISkill       skill   = SkillProcessMap.get(value.skill);
            List <int[]> damages = new List <int[]>();

            foreach (int[] item in value.target)
            {
                AbsFightModel target = getPlayer(item[0]);
                skill.damage(skillLevel, ref atkModel, ref target, ref damages);
                //Console.WriteLine("计算伤害值");
                if (target.hp == 0)
                {
                    switch (target.type)
                    {
                    case ModelType.HUMAN:
                        if (target.id > 0)
                        {
                            //击杀英雄
                            //启动定时任务 指定时间之后发送英雄复活信息 并且将英雄数据设置为满状态
                        }
                        else
                        {
                            //击杀小兵
                            //移除小兵数据
                        }
                        break;

                    case ModelType.BUILD:
                        //打破了建筑 给钱
                        break;
                    }
                }
            }
            value.target = damages.ToArray();
            brocast(FightProtocol.DAMAGE_BRO, value);
        }
示例#6
0
        private void damage(UserToken token, DamageDTO value)
        {
            AbsFightModel  atkPlayer  = null;
            int            userId     = getUserId(token);
            int            skillLevel = 0;
            int            atkTeam    = 0;
            FightModelType atkType;

            if (value.id > 0)
            {
                if (value.id != userId)
                {
                    return;
                }
                atkPlayer = getPlayer(userId);
                if (value.skill > 0)
                {
                    skillLevel = (atkPlayer as FightPlayerModel).skillLevel(value.skill);
                    if (skillLevel == -1)
                    {
                        return;
                    }
                }
                atkTeam = getPlayerTeam(userId);
                atkType = FightModelType.HUMAN;
            }
            else
            {
                //TODO 如果ID小于0的话 则为炮塔或者小兵 需要判断目标是否为用户
                if (value.id >= -20)
                {
                    atkType = FightModelType.BUILD;
                }
                else
                {
                    atkType = FightModelType.HUMAN;
                }
            }

            if (!SkillProcessMap.has(value.skill))
            {
                return;
            }



            ISkill       skill   = SkillProcessMap.get(value.skill);
            List <int[]> damages = new List <int[]>();

            foreach (int[] item in value.targetDamage)
            {
                AbsFightModel  beatk  = null;
                int            beTeam = 0;
                FightModelType beatkType;
                if (item[0] > 0)
                {
                    beatk     = getPlayer(item[0]);
                    beTeam    = getPlayerTeam(item[0]);
                    beatkType = FightModelType.HUMAN;
                }
                else
                {
                    if (item[0] >= -20)
                    {
                        if (item[0] >= -10)
                        {
                            beatk  = teamOneBuildMap[item[0]];
                            beTeam = 1;
                        }
                        else
                        {
                            beatk  = teamTwoBuildMap[item[0]];
                            beTeam = 2;
                        }
                        beatkType = FightModelType.BUILD;
                    }
                    else
                    {
                        //TODO这里是小兵了

                        beatkType = FightModelType.HUMAN;
                    }
                }
                skill.damage(skillLevel, ref atkPlayer, ref beatk, atkType, beatkType, atkTeam == beTeam, ref damages);
                if (beatk.hp == 0)
                {
                    if (beatk.id > 0)
                    {
                        //说明是英雄 给予击杀者奖金
                    }
                    else if (beatk.id < -20)
                    {
                        //说明是小兵 给予周围辅助 辅助金
                    }
                    else
                    {
                        //说明是炮台 判断是否拥有复活能力 给予全体奖金
                    }
                }
            }
            DamageDTO dto = new DamageDTO();

            dto.id           = value.id;
            dto.skill        = value.skill;
            dto.targetDamage = damages.ToArray();
            brocast(FightProtocol.DAMAGE_BRO, dto);
        }
示例#7
0
        private void Damage(UserToken token, DamageDTO value)
        {
            int           userId = GetUserId(token);
            AbsFightModel atkModel;
            int           skillLevel = 0;

            //判断攻击者是玩家英雄 还是小兵
            if (value.UserID >= 0)
            {
                if (value.UserID != userId)
                {
                    return;
                }
                atkModel = GetPlayer(userId);
                if (value.Skill > 0)
                {
                    skillLevel = (atkModel as FightPlayerModel).SkillLevel(value.Skill);
                    if (skillLevel == -1)
                    {
                        return;
                    }
                }
            }
            else
            {
                //TODO:
                atkModel = GetPlayer(userId);
            }
            //获取技能算法
            //循环获取目标数据 和攻击者数据 进行伤害计算 得出伤害数值
            if (!SkillProcessMap.Has(value.Skill))
            {
                return;
            }
            ISkill       skill   = SkillProcessMap.Get(value.Skill);
            List <int[]> damages = new List <int[]>();

            foreach (int[] item in value.Targets)
            {
                AbsFightModel target = GetPlayer(item[0]);
                skill.Damage(skillLevel, ref atkModel, ref target, ref damages);
                if (target.Hp == 0)
                {
                    switch (target.Type)
                    {
                    case ModelType.HUMAN:
                        if (target.Id > 0)
                        {
                            //击杀英雄
                            //启动定时任务 指定时间之后发送英雄复活信息 并且将英雄数据设置为满状态
                        }
                        else
                        {
                            //击杀小兵
                            //移除小兵数据
                        }
                        break;

                    case ModelType.BUILD:
                        //打破了建筑 给钱

                        break;
                    }
                }
            }
            value.Targets = damages.ToArray();
            Brocast(FightProtocol.DAMAGE_BRO, value);
        }
示例#8
0
 public void refreshView(AbsFightModel model)
 {
     hpSlider.value = model.hp / model.maxHp;
     levelText.text = ((FightPlayerModel)model).level.ToString();
 }