Esempio n. 1
0
    public MiniGameCombatBean InitCombat(UserInfiniteTowersBean infiniteTowersData)
    {
        SceneInfiniteTowersManager infiniteTowersManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInfiniteTowersManager>();

        //设置标牌
        infiniteTowersManager.SetSignForLayer(infiniteTowersData.layer);
        //设置战斗数据
        MiniGameCombatBean miniGameCombat = (MiniGameCombatBean)MiniGameEnumTools.GetMiniGameData(MiniGameEnum.Combat);

        //设置战斗地点
        miniGameCombat.miniGamePosition = infiniteTowersManager.GetCombatPostionByLayer(infiniteTowersData.layer);
        //获取战斗成员数据
        //获取友方数据
        List <CharacterBean> listUserData = new List <CharacterBean>();
        int          totalLucky           = 0;
        GameDataBean gameData             = GameDataHandler.Instance.manager.GetGameData();

        foreach (string memberId in infiniteTowersData.listMembers)
        {
            CharacterBean itemCharacterData = gameData.GetCharacterDataById(memberId);
            if (itemCharacterData != null)
            {
                listUserData.Add(itemCharacterData);
                itemCharacterData.GetAttributes(out CharacterAttributesBean characterAttributes);
                totalLucky += characterAttributes.lucky;
            }
        }

        //如果没有就启动测试数据
        if (listUserData.Count == 0)
        {
            CharacterBean itemCharacterData = NpcInfoHandler.Instance.manager.GetCharacterDataById(10001);
            listUserData.Add(itemCharacterData);
            listUserData.Add(itemCharacterData);
            listUserData.Add(itemCharacterData);
        }

        //获取敌方数据
        List <CharacterBean> listEnemyData = infiniteTowersManager.GetCharacterDataByInfiniteTowersLayer(infiniteTowersData.layer);

        //设置敌方能力
        foreach (CharacterBean itemEnemyData in listEnemyData)
        {
            CharacterAttributesBean enemyAttributes = infiniteTowersManager.GetEnemyAttributesByLayer(itemEnemyData, infiniteTowersData.layer);
            if (enemyAttributes != null)
            {
                itemEnemyData.attributes.InitAttributes(enemyAttributes);
            }
        }

        //初始化战斗数据
        miniGameCombat.gameReason         = MiniGameReasonEnum.Fight;
        miniGameCombat.winSurvivalNumber  = 1;
        miniGameCombat.winBringDownNumber = listEnemyData.Count;
        miniGameCombat.InitData(listUserData, listEnemyData);

        //添加奖励装备
        List <RewardTypeBean> listRewardEquip = RewardTypeEnumTools.GetRewardEnemyEquipForInfiniteTowers(listEnemyData, infiniteTowersData.layer, totalLucky);

        if (!CheckUtil.ListIsNull(listRewardEquip))
        {
            miniGameCombat.listReward.AddRange(listRewardEquip);
        }
        //添加奖励物品
        List <RewardTypeBean> listRewardItems = RewardTypeEnumTools.GetRewardItemsForInfiniteTowers(listEnemyData, infiniteTowersData.layer, totalLucky, false);

        if (!CheckUtil.ListIsNull(listRewardItems))
        {
            miniGameCombat.listReward.AddRange(listRewardItems);
        }
        return(miniGameCombat);
    }
Esempio n. 2
0
    /// <summary>
    /// 增加爬塔进度
    /// </summary>
    /// <param name="time"></param>
    public void AddInfiniteTowers(int time)
    {
        GameDataBean gameData = manager.GetGameData();
        List <UserInfiniteTowersBean> listInfiniteTowersData = gameData.listInfinteTowers;

        if (CheckUtil.ListIsNull(listInfiniteTowersData))
        {
            return;
        }
        float addTime = 0.01f * time;
        List <UserInfiniteTowersBean> listSendData = new List <UserInfiniteTowersBean>();

        for (int i = 0; i < listInfiniteTowersData.Count; i++)
        {
            UserInfiniteTowersBean itemInfiniteTowerData = listInfiniteTowersData[i];
            if (itemInfiniteTowerData.isSend == false)
            {
                //如果不是派遣数据则不处理
                continue;
            }
            listSendData.Add(itemInfiniteTowerData);
            itemInfiniteTowerData.proForSend += addTime;
            if (itemInfiniteTowerData.proForSend >= 1)
            {
                //计算总计攀登层数
                int addLayer = (int)Mathf.Floor(itemInfiniteTowerData.proForSend);
                List <CharacterBean> listCharacterData = gameData.GetCharacterDataByIds(itemInfiniteTowerData.listMembers);
                for (int f = 0; f < addLayer; f++)
                {
                    itemInfiniteTowerData.proForSend = 0;
                    bool isSuccessNextLayer = itemInfiniteTowerData.CheckIsSccessNextLayer();
                    if (isSuccessNextLayer)
                    {
                        //如果是成功攻略
                        //弹出提示
                        if (manager.gameConfig.isShowDetailsForTower)
                        {
                            AudioHandler.Instance.PlaySound(AudioSoundEnum.Reward);
                            ToastHandler.Instance.ToastHint(string.Format(TextHandler.Instance.manager.GetTextById(1331), itemInfiniteTowerData.layer + ""));
                        }
                        else
                        {
                            if (itemInfiniteTowerData.layer % 10 == 0)
                            {
                                AudioHandler.Instance.PlaySound(AudioSoundEnum.Reward);
                                ToastHandler.Instance.ToastHint(string.Format(TextHandler.Instance.manager.GetTextById(1331), itemInfiniteTowerData.layer + ""));
                            }
                        }

                        //添加奖励物品
                        int totalLucky = 0;
                        for (int c = 0; c < listCharacterData.Count; c++)
                        {
                            CharacterBean itemCharacterData = listCharacterData[c];
                            itemCharacterData.GetAttributes(out CharacterAttributesBean characterAttributes);
                            totalLucky += characterAttributes.lucky;
                        }
                        List <RewardTypeBean> listRewardItems = RewardTypeEnumTools.GetRewardItemsForInfiniteTowers(null, itemInfiniteTowerData.layer, totalLucky, true);
                        if (!CheckUtil.ListIsNull(listRewardItems))
                        {
                            RewardTypeEnumTools.CompleteReward(listCharacterData, listRewardItems);
                        }
                        //增加层数
                        itemInfiniteTowerData.layer++;
                        //达到最大层数
                        UserAchievementBean userAchievement = gameData.GetAchievementData();
                        if (itemInfiniteTowerData.layer > userAchievement.maxInfiniteTowersLayer - 1)
                        {
                            //弹出提示
                            AudioHandler.Instance.PlaySound(AudioSoundEnum.Reward);
                            ToastHandler.Instance.ToastHint(string.Format(TextHandler.Instance.manager.GetTextById(1332), (itemInfiniteTowerData.layer - 1) + ""));
                            itemInfiniteTowerData.proForSend = -1;
                            //还原员工状态
                            for (int c = 0; c < listCharacterData.Count; c++)
                            {
                                CharacterBean itemCharacterData = listCharacterData[c];
                                itemCharacterData.baseInfo.SetWorkerStatus(WorkerStatusEnum.Rest);
                            }
                            //移除数据
                            listInfiniteTowersData.Remove(itemInfiniteTowerData);
                            i--;
                            break;
                        }
                    }
                    else
                    {
                        //弹出提示
                        AudioHandler.Instance.PlaySound(AudioSoundEnum.Passive);
                        ToastHandler.Instance.ToastHint(string.Format(TextHandler.Instance.manager.GetTextById(1333), itemInfiniteTowerData.layer + ""));
                        //如果是失败攻略
                        itemInfiniteTowerData.proForSend = -1;
                        //还原员工状态
                        for (int c = 0; c < listCharacterData.Count; c++)
                        {
                            CharacterBean itemCharacterData = listCharacterData[c];
                            itemCharacterData.baseInfo.SetWorkerStatus(WorkerStatusEnum.Rest);
                        }
                        //移除数据
                        listInfiniteTowersData.Remove(itemInfiniteTowerData);
                        i--;
                        break;
                    }
                }
            }
        }
        notifyForData?.Invoke(NotifyTypeEnum.InfiniteTowerProChange, new object[] { listSendData });
    }