Пример #1
0
    // 此章节是否可以选择(存在当前章节的关卡,或者上一个章节已通关)
    public bool IsChapterEnable(int chapterID, ChapterType chapterType)
    {
        // 第一个场景必然是可以打的(TODO 考虑精英副本)
        if (chapterID == 1)
        {
            return(true);
        }

        // 当前章节有已通关的关卡
        List <LevelInfo> list;

        if (LevelInfo.TryGetValue(chapterID, out list))
        {
            foreach (var item in list)
            {
                MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(item.levelID);
                if (cfg.MissionDegree == (int)chapterType)
                {
                    return(true);
                }
            }
        }

        // 上一个关卡已通关,则此关卡是可以打的
        if (IsFullPass(chapterID - 1, chapterType))
        {
            return(true);
        }
        return(false);
    }
Пример #2
0
    public int GetQuickFightCount(int levelID)
    {
        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);
        // 受体力限制
        int       count     = Mathf.Min(GameConfig.PVE_MAX_QUICK_FIGHT_COUNT, UserManager.Instance.SP / cfg.StaminaCost);
        LevelInfo levelInfo = PVEManager.Instance.GetLevelInfo(levelID);

        if (levelInfo != null)
        {
            // 挑战次数不足
            if (cfg.TimesLimit > 0)
            {
                count = Mathf.Min(count, cfg.TimesLimit - levelInfo.fightCount);
            }
        }
        else
        {
            // 还没有挑战过的关卡
            if (cfg.TimesLimit > 0)
            {
                count = Mathf.Min(count, cfg.TimesLimit);
            }
        }
        return(count);
    }
Пример #3
0
    private void OnSelectLevel(int levelID)
    {
        _currentLevel = levelID;
        PVEManager.Instance.CurrentSelectLevelID = levelID;

        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);

        _txtLevelTitle.text = cfg.MissionName;
        _txtLevelDesc.text  = cfg.MissionDescription;
        _txtFightScore.text = cfg.RecommendStrength.ToString();

        ListItemWidget widget = null;

        foreach (var item in _listLevelWidgets)
        {
            if (levelID == item._levelID)
            {
                item.Select();
                widget = item;
            }
            else
            {
                item.UnSelect();
            }
        }
    }
Пример #4
0
    public override void OnRefreshWindow()
    {
        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(_levelID);
        if (cfg == null) return;

        _txtLossSp.text = cfg.StaminaCost.ToString();
        _txtPVEInfo.text = cfg.MissionDescription;

        _imageCommonPVE.gameObject.SetActive(cfg.MissionDegree == (int)ChapterType.NORMAL);
        _imageSeniorPVE.gameObject.SetActive(cfg.MissionDegree == (int)ChapterType.ELITE);

        List<AwardInfo> awardList = AwardManager.Instance.GetAwardList(cfg.CompleteAward, true);
        for (int i = 0; i < 4; ++i) {
            SimpleItemWidget widget = _itemWidget[i];
            if (i < awardList.Count) {
                widget.SetInfo(awardList[i].ItemID, 1);
            } else {
                widget.gameObject.SetActive(false);
            }
        }

        LevelInfo info = PVEManager.Instance.GetLevelInfo(_levelID);
        if (info == null || info.star < 3) {
            _btnQuickFight.gameObject.SetActive(false);
            _btnQuickFight10.gameObject.SetActive(false);
            _txtDekaronNumber.text = string.Format("{0}/{1}", cfg.TimesLimit, cfg.TimesLimit);
        } else {
            _txtDekaronNumber.text = string.Format("{0}/{1}", cfg.TimesLimit - info.fightCount, cfg.TimesLimit);
        }

        if (cfg.TimesLimit <= 0) {
            _txtDekaronGameObject.gameObject.SetActive(false);
        } else {
            _txtDekaronGameObject.gameObject.SetActive(true);
        }

        // 上阵英雄
        for (int i = 0; i < _myHeroWidget.Length; ++i) {
            var widget = _myHeroWidget[i];
            if (i < UserManager.Instance.PVEHeroList.Count) {
                HeroInfo heroInfo = UserManager.Instance.PVEHeroList[i];
                widget.gameObject.SetActive(true);
                widget.SetInfo(heroInfo.ConfigID, heroInfo.StarLevel, heroInfo.Level, heroInfo.StarLevel);
            } else {
                widget.gameObject.SetActive(false);
            }
        }

        for (int i = 0; i < _enemyHeroWidget.Length; ++i) {
            var widget = _enemyHeroWidget[i];

        }
        foreach (var item in UserManager.Instance.HeroList) {
            
        }

        UpdateCondition(info);

        _txtQuickFight10.text = Str.Format("UI_PVE_QUICK_FIGHT_COUNT", PVEManager.Instance.GetQuickFightCount(_levelID));
    }
Пример #5
0
    public override void SetInfo(object data)
    {
        _levelID = (int)data;
        _info    = PVEManager.Instance.GetLevelInfo(_levelID);

        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(_levelID);

        _txtTitle.text = cfg.MissionName;

        for (int i = 0; i < _imgStars.Length; ++i)
        {
            if (_info == null || i >= _info.star)
            {
                _imgStars[i].sprite = _sprStarGray;
            }
        }

        if (PVEManager.Instance.IsLevelEnable(_levelID))
        {
            _imgLock.gameObject.SetActive(false);
        }
        else
        {
            _imgLock.gameObject.SetActive(true);
        }
    }
Пример #6
0
    // 获取关卡信息
    public LevelInfo GetLevelInfo(int levelID)
    {
        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);
        int chapterID          = cfg.Chapter;
        List <LevelInfo> list;

        if (!LevelInfo.TryGetValue(chapterID, out list))
        {
            return(null);
        }
        return(list.Find(x => x.levelID == levelID));
    }
Пример #7
0
    // 请求快速扫荡
    public void RequestQuickFight(int levelID, int count = 1)
    {
        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);

        PMopUpFuben data = new PMopUpFuben();

        data.pos        = levelID;
        data.llDegree   = cfg != null ? (eLLDegree)cfg.MissionDegree : eLLDegree.LLD_NORMAL;
        data.force      = true;
        data.mouUpTimes = count;
        Net.Send(eCommand.MOP_UP_FUBEN, data);
    }
Пример #8
0
    // 获取最后一个副本的位置
    public int GetLastLevelID(ChapterType chapterType)
    {
        int maxLevelID = 0;

        foreach (var chapter in LevelInfo)
        {
            foreach (var level in chapter.Value)
            {
                MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(level.levelID);
                if (cfg.MissionDegree == (int)chapterType && level.levelID > maxLevelID)
                {
                    maxLevelID = level.levelID;
                }
            }
        }

        return(maxLevelID);
    }
Пример #9
0
    // 此关卡是否还有挑战次数
    public bool HasFightCount(int levelID)
    {
        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);

        if (cfg.TimesLimit <= 0)
        {
            return(true);
        }

        LevelInfo info = GetLevelInfo(levelID);

        if (info == null)
        {
            return(true);
        }

        return(info.fightCount < cfg.TimesLimit);
    }
Пример #10
0
    public void OnClickQuickFight10()
    {
        if (!PVEManager.Instance.HasFightCount(_levelID)) {
            UIUtil.ShowConfirm(Str.Format("UI_PVE_RESET_FIGHT_COUNT", GameConfig.PVE_RESET_FIGHT_COUNT_COST), "", () => {
                PVEManager.Instance.RequestResetFightCount(_levelID);
            });
            return;
        }

        PVEManager.Instance.CurrentSelectLevelID = _levelID;

        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(_levelID);
        if (cfg == null) return;

        // 体力不足
        if (UserManager.Instance.SP < cfg.StaminaCost) {
            UIUtil.ShowMsgFormat("UI_NOT_ENOUGTH_SP");
            return;
        }

        // 取最大扫荡次数
        // 受体力限制
        int count = Mathf.Min(GameConfig.PVE_MAX_QUICK_FIGHT_COUNT, UserManager.Instance.SP / cfg.StaminaCost);
        LevelInfo levelInfo = PVEManager.Instance.GetLevelInfo(_levelID);
        if (levelInfo != null) {
            // 挑战次数不足
            if (cfg.TimesLimit > 0) {
                if (levelInfo.fightCount >= cfg.TimesLimit) {
                    UIUtil.ShowMsgFormat("UI_PVE_FIGHT_COUNT_LIMIT");
                    return;
                }

                // 还有次数
                count = Mathf.Min(count, cfg.TimesLimit - levelInfo.fightCount);
            }
        } else {
            if (cfg.TimesLimit > 0) {
                count = Mathf.Min(count, cfg.TimesLimit);
            }
        }
        PVEManager.Instance.RequestQuickFight(PVEManager.Instance.CurrentSelectLevelID, count);
        CloseWindow();
    }
Пример #11
0
    private void OnMsgChapterPassList(byte[] buffer)
    {
        PLilianPassList ret = Net.Deserialize <PLilianPassList>(buffer);

        if (!Net.CheckErrorCode(ret.errorCode, eCommand.CHAPTER_PASS_LIST))
        {
            return;
        }

        if (ret.LlPass.Count <= 0)
        {
            // 刷新地图
            UIManager.Instance.RefreshWindow <UINewPVEEntranceView>();
            return;
        }

        LevelInfo.Clear();

        foreach (var item in ret.LlPass)
        {
            MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(item.Id);
            int chapterID          = cfg.Chapter;

            List <LevelInfo> list;
            if (!LevelInfo.TryGetValue(chapterID, out list))
            {
                list = new List <LevelInfo>();
                LevelInfo[chapterID] = list;
            }

            LevelInfo info = new LevelInfo();
            info.levelID    = item.Id;
            info.star       = item.star;
            info.fightCount = item.count;
            list.Add(info);
        }

        LastLevelID      = GetLastLevelID(ChapterType.NORMAL);
        LastEliteLevelID = GetLastLevelID(ChapterType.ELITE);

        // 刷新地图
        UIManager.Instance.RefreshWindow <UINewPVEEntranceView>();
    }
Пример #12
0
 private void SelectLevelByIndex(int index)
 {
     for (int i = 0; i < _listLevelWidgets.Count; ++i)
     {
         var item = _listLevelWidgets[i];
         if (i == index)
         {
             item.Select();
             MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(item._levelID);
             _txtLevelTitle.text = cfg.MissionName;
             _txtLevelDesc.text  = cfg.MissionDescription;
             _txtFightScore.text = cfg.RecommendStrength.ToString();
             _currentLevel       = item._levelID;
         }
         else
         {
             item.UnSelect();
         }
     }
 }
Пример #13
0
    public void AddLevelInfo(int levelID, int count, int star)
    {
        LevelInfo info = new LevelInfo();

        info.levelID    = levelID;
        info.star       = star;
        info.fightCount = count;

        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);
        int chapterID          = cfg.Chapter;
        List <LevelInfo> list;

        if (!LevelInfo.TryGetValue(chapterID, out list))
        {
            list = new List <LevelInfo>();
            LevelInfo[chapterID] = list;
        }

        list.Add(info);
    }
Пример #14
0
    // 获取当前章节的星数
    public int GetChapterStar(int chapterID, ChapterType chapterType)
    {
        int star = 0;
        List <LevelInfo> list;

        LevelInfo.TryGetValue(chapterID, out list);
        if (list == null)
        {
            return(0);
        }

        foreach (var item in list)
        {
            MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(item.levelID);
            if (cfg.MissionDegree == (int)chapterType)
            {
                // 只有精英和boss关卡统计星级
                star += item.star;
            }
        }

        return(star);
    }
Пример #15
0
    // 此关卡是否可以攻打
    public bool IsLevelEnable(int levelID)
    {
        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);

        if (cfg == null)
        {
            return(false);
        }

        int lastLevelID = 0;

        if (ChapterType == ChapterType.NORMAL)
        {
            lastLevelID = GetNextLevel(LastLevelID, ChapterType.NORMAL);
            // 可重复挑战的boss关卡,只要id小于最后一个可攻打的关卡即可
            return(lastLevelID == 0 || levelID <= lastLevelID);
        }
        else
        {
            // 可重复挑战的boss关卡,只要id小于最后一个可攻打的关卡即可
            lastLevelID = GetNextLevel(LastEliteLevelID, ChapterType.ELITE);
            return(lastLevelID == 0 || levelID <= lastLevelID);
        }
    }
Пример #16
0
    private void OnMsgMopUpFuben(byte[] buffer)
    {
        MopUpResult ret = Net.Deserialize <MopUpResult>(buffer);

        if (!Net.CheckErrorCode(ret.errorCode, eCommand.MOP_UP_FUBEN))
        {
            return;
        }

        // 添加奖励
        QuickFightResult.Clear();

        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(CurrentSelectLevelID);

        if (cfg == null)
        {
            return;
        }

        List <ItemInfo> list       = new List <ItemInfo>();
        int             awardExp   = 0;
        int             awardMoney = 0;

        foreach (var item in ret.awardCollections)
        {
            BattleResultInfo info = new BattleResultInfo();
            info.addPlayerExp = item.awdExp;
            awardExp         += item.awdExp;

            foreach (var itemData in item.awardItems)
            {
                ItemInfo itemInfo = new ItemInfo();
                itemInfo.Deserialize(itemData);

                Debug.Log(itemInfo.ConfigID);

                if (itemInfo.ConfigID == GameConfig.ITEM_CONFIG_ID_MONEY)
                {
                    info.addMoney += itemInfo.Number;
                    awardMoney    += itemInfo.Number;
                }
                else if (itemInfo.ConfigID == GameConfig.ITEM_CONFIG_ID_WOOD)
                {
                }
                else if (itemInfo.ConfigID == GameConfig.ITEM_CONFIG_ID_STONE)
                {
                }
                else if (itemInfo.ConfigID == GameConfig.ITEM_CONFIG_ID_GOLD)
                {
                }
                else
                {
                    info.itemInfo.Add(itemInfo);
                    list.Add(itemInfo);
                }
            }

            // 减少体力消耗
            UserManager.Instance.SP = Mathf.Max(0, UserManager.Instance.SP - cfg.StaminaCost);

            QuickFightResult.Add(info);
        }

        LevelInfo levelInfo = GetLevelInfo(CurrentSelectLevelID);

        if (levelInfo != null)
        {
            levelInfo.fightCount += QuickFightResult.Count;
        }

        // 打开界面显示结果
        if (QuickFightResult.Count > 1)
        {
            // 扫荡10次的结果
            UIManager.Instance.OpenWindow <UIPVEQuickFight10ResultView>();
        }
        else
        {
            // 扫荡1次
            UIManager.Instance.OpenWindow <UIPVEQuickFightResultView>();
        }

        UserManager.Instance.AddItem(list, true);
        UserManager.Instance.AddMoney(awardMoney, PriceType.MONEY);
        UserManager.Instance.OnAddUserExp(awardExp);

        // 刷新体力和金钱
        EventDispatcher.TriggerEvent(EventID.EVENT_UI_REFRESH_SP);
        UIManager.Instance.RefreshWindow <UINewPVEEntranceView>();
    }
Пример #17
0
    // 请求攻打关卡
    public void RequestFight(int levelID)
    {
        Log.Info("RequestFight:  {0}", levelID);
        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);

        if (cfg == null)
        {
            return;
        }

        if (UserManager.Instance.SP < cfg.StaminaCost)
        {
            UIUtil.ShowErrMsgFormat("UI_NOT_ENOUGTH_SP");
            return;
        }

        eCommand cmd = eCommand.READY_BT_FUBEN_NORMAL;

        if (cfg.MissionDegree == (int)ChapterType.NORMAL)
        {
            cmd = eCommand.READY_BT_FUBEN_NORMAL;
        }
        else if (cfg.MissionDegree == (int)ChapterType.ELITE)
        {
            cmd = eCommand.READY_BT_FUBEN_ELITE;
        }

        PAttack data = new PAttack();

//        foreach (var item in UserManager.Instance.PVEHeroList) {
//            data.attackerId.Add(item.EntityID);
//        }
//
        if (UserManager.Instance.HeroList.Count <= 0)
        {
            Log.Error("RequestFight error, no hero");
            return;
        }

        for (int i = 0; i < 3; ++i)
        {
            if (i < UserManager.Instance.HeroList.Count)
            {
                data.attackerId.Add(UserManager.Instance.HeroList[i].EntityID);
            }
        }

        data.pos   = new PVector();
        data.pos.x = levelID;

        NetworkManager.Instance.Send(cmd, data, (buffer) =>
        {
            PBattlVerify ret = Net.Deserialize <PBattlVerify>(buffer);
            if (!Net.CheckErrorCode(ret.errorCode, cmd))
            {
                return;
            }

            BattleManager.Instance.StartBattle(ret.battleId, LogicBattleType.PVE);
        });
    }
Пример #18
0
    // 一场战斗胜利,更新level中的星级数据,并且更新最新关卡
    public void OnBattleResult(PBattleReport data)
    {
        if (data.pos == null)
        {
            Log.Error("OnBattleResult error, PBattleReport 没有设置 data.pos");
            return;
        }

        int levelID            = data.pos.x;
        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);

        if (cfg == null)
        {
            return;
        }

        UserManager.Instance.SP = Mathf.Max(0, UserManager.Instance.SP - cfg.StaminaCost);

        bool isAttacker = UserManager.Instance.EntityID == data.attackerId;

        if (isAttacker)
        {
            if (data.winner == eBattleSide.SIDE_DEFENSER)
            {
                // 输了
                UIManager.Instance.OpenWindow <UIPVEBattleResultFailView>();
                return;
            }
        }
        else
        {
            if (data.winner == eBattleSide.SIDE_ATTACKER)
            {
                // 输了
                UIManager.Instance.OpenWindow <UIPVEBattleResultFailView>();
                return;
            }
        }

        // 赢了
        LevelInfo info = GetLevelInfo(levelID);

        if (info != null)
        {
            info.star = data.star;
            ++info.fightCount;
        }
        else
        {
            AddLevelInfo(levelID, cfg.TimesLimit > 0 ? cfg.TimesLimit - 1 : 0, data.star);
        }

        ChapterType chapterType = (ChapterType)cfg.MissionDegree;

        if (chapterType == ChapterType.NORMAL)
        {
            LastLevelID = Mathf.Max(LastLevelID, levelID);
            int normalLastLevelID = GetLastLevelID(ChapterType.NORMAL);

            // 最后一个关卡打完后,自动跳到下一个
            if (levelID == normalLastLevelID)
            {
                CurrentSelectLevelID = GetNextLevel(levelID, chapterType);
            }
        }
        else if (chapterType == ChapterType.ELITE)
        {
            LastEliteLevelID = Mathf.Max(LastEliteLevelID, levelID);
            int eliteLastLevelID = GetLastLevelID(ChapterType.ELITE);

            // 最后一个关卡打完后,自动跳到下一个
            if (levelID == eliteLastLevelID)
            {
                CurrentSelectLevelID = GetNextLevel(levelID, chapterType);
            }
        }

        // 刷新副本界面
        UIManager.Instance.RefreshWindow <UINewPVEEntranceView>();

        // 战斗结果
        BattleResult = new BattleResultInfo();
        BattleResult.addPlayerExp = data.awdExp;
        BattleResult.star         = data.star;

        foreach (var item in data.awardPoits)
        {
            if (item.roleType == eRoleType.ROLE_LORD)
            {
            }
            else if (item.roleType == eRoleType.ROLE_HERO)
            {
                BattleResultHeroInfo heroInfo = new BattleResultHeroInfo();
                heroInfo.heroID = item.geter;
                heroInfo.addExp = item.awExp;
                BattleResult.heroInfo.Add(heroInfo);
            }

            foreach (var item2 in item.awardItems)
            {
                if (item2.type == eItem.CURRENCY)
                {
                    // 金钱
                    BattleResult.addMoney = item2.num;
                }
                else
                {
                    ItemInfo itemInfo = new ItemInfo();
                    itemInfo.Deserialize(item2);
                    BattleResult.itemInfo.Add(itemInfo);
                }
            }
        }

        UIManager.Instance.OpenWindow <UIPVEBattleResultView>();
    }