// 此章节是否可以选择(存在当前章节的关卡,或者上一个章节已通关) 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); }
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); }
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(); } } }
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)); }
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); } }
// 获取关卡信息 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)); }
// 请求快速扫荡 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); }
// 获取最后一个副本的位置 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); }
// 此关卡是否还有挑战次数 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); }
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(); }
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>(); }
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(); } } }
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); }
// 获取当前章节的星数 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); }
// 此关卡是否可以攻打 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); } }
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>(); }
// 请求攻打关卡 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); }); }
// 一场战斗胜利,更新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>(); }