Beispiel #1
0
        public override bool TakeAction()
        {
            ItemBaseInfo itemBaseInfo = new ConfigCacheSet<ItemBaseInfo>().FindKey(_materialsID);
            if (itemBaseInfo.ItemType == ItemType.CaiLiao)
            {
                //寻材料
                List<MonsterInfo> monsterArray = new ConfigCacheSet<MonsterInfo>().FindAll(m => m.ItemID == _materialsID);
                if (monsterArray.Count > 0)
                {
                    MonsterInfo monsterInfo = monsterArray[0];
                    var plotEmbattles = new ConfigCacheSet<PlotEmbattleInfo>().FindAll(m => m.MonsterID == monsterInfo.MonsterID);
                    foreach (var embattle in plotEmbattles)
                    {
                        PlotNPCInfo npcInfo = new ConfigCacheSet<PlotNPCInfo>().FindKey(embattle.PlotNpcID);
                        if (npcInfo != null)
                        {
                            PlotInfo temp = new ConfigCacheSet<PlotInfo>().FindKey(npcInfo.PlotID);
                            if (temp != null && temp.CityID > CurrCityID(ContextUser.UserLv))
                            {
                                ErrorCode = LanguageManager.GetLang().ErrorCode;
                                ErrorInfo = LanguageManager.GetLang().St1604_MaterialsCityID;
                                return false;
                            }
                            if (CheckPlot(temp))
                            {
                                _plotInfo = temp;
                                break;
                            }
                        }
                    }
                }
            }

            return true;
        }
Beispiel #2
0
 /// <summary>
 /// 获取玩家副本进度
 /// </summary>
 /// <param name="gameUser"></param>
 /// <returns></returns>
 public static PlotInfo GetUserPlotInfo(GameUser gameUser)
 {
     PlotInfo plotInfo = new PlotInfo();
     if (gameUser != null)
     {
         var taskInfo = new ConfigCacheSet<StoryTaskInfo>().FindKey(gameUser.TaskProgress) ?? new StoryTaskInfo();
         plotInfo = new ConfigCacheSet<PlotInfo>().FindKey(taskInfo.PlotID);
     }
     return plotInfo;
 }
Beispiel #3
0
 private bool CheckPlot(PlotInfo plotInfo)
 {
     if (plotInfo.CityID == 3 || plotInfo.CityID == 4)
     {
         CountryType countryType = plotInfo.CityID == 3 ? CountryType.M : CountryType.H;
         return ContextUser.CountryID == countryType;
     }
     return true;
 }
Beispiel #4
0
        public override bool TakeAction()
        {
            List<PlotNPCInfo> plotNPCInfoList = new ConfigCacheSet<PlotNPCInfo>().FindAll(m => m.PlotID == plotID);
            npcCount = (short)plotNPCInfoList.Count;
            var cacheSet = new GameDataCacheSet<UserQueue>();
            List<UserQueue> userQueueList = cacheSet.FindAll(ContextUser.UserID, m => m.QueueType == QueueType.SaoDang);
            if (userQueueList.Count > 0)
            {
                UserQueue userQueue = userQueueList[0];
                coldTime = userQueue.DoRefresh();
                if (coldTime == 0)
                {
                    cacheSet.Delete(userQueue);
                    ContextUser.ResetSweepPool(0);
                    ContextUser.UserStatus = UserStatus.Normal;
                    //ContextUser.Update();
                }
                int tempNum = PlotHelper.GetBattleNum(userQueue.GetTiming()) + 1;
                if (npcCount > 0)
                {
                    turnsNum = PlotHelper.GetTurnsNum(npcCount, tempNum);
                    timesNum = PlotHelper.GetTimesNum(npcCount, tempNum);
                }
                //PlotHelper.CheckSweepCount(npcCount, userQueue.GetTiming(), out turnsNum, out battleNum);

                //if (battleNum >= npcCount)
                //{
                //    turnsNum = turnsNum + 1;
                //}
                //else
                //{
                //    battleNum = battleNum + 1;
                //}
            }
            userItemCount = (short)UserItemHelper.GetItems(Uid).FindAll(m => m.ItemStatus == ItemStatus.BeiBao).Count;
            plotInfo = new ConfigCacheSet<PlotInfo>().FindKey(plotID);
            if (plotInfo == null)
            {
                return false;
            }
            foreach (PlotNPCInfo npcInfo in plotNPCInfoList)
            {
                if (npcInfo == null)
                {
                    continue;
                }
                List<PlotEmbattleInfo> embattleInfoList = new ConfigCacheSet<PlotEmbattleInfo>().FindAll(m => m.PlotNpcID == npcInfo.PlotNpcID);
                foreach (PlotEmbattleInfo embattleInfo in embattleInfoList)
                {
                    if (monsterDict.ContainsKey(embattleInfo.MonsterID))
                    {
                        if (monsterNumDict.ContainsKey(embattleInfo.MonsterID))
                        {
                            monsterNumDict[embattleInfo.MonsterID] = monsterNumDict[embattleInfo.MonsterID] + 1;
                        }
                    }
                    else
                    {
                        MonsterInfo monsterInfo = new ConfigCacheSet<MonsterInfo>().FindKey(embattleInfo.MonsterID);
                        if (monsterInfo != null)
                        {
                            monsterDict.Add(embattleInfo.MonsterID, monsterInfo);
                            monsterNumDict.Add(embattleInfo.MonsterID, 1);
                        }
                    }
                }
            }
            return true;
        }
Beispiel #5
0
 /// <summary>
 /// 是否是最后一层
 /// </summary>
 /// <param name="plotInfo"></param>
 /// <returns></returns>
 public static bool IsLastLayer(PlotInfo plotInfo)
 {
     return new ConfigCacheSet<PlotInfo>().FindKey(plotInfo == null ? 0 : plotInfo.AftPlotID) == null;
 }
Beispiel #6
0
        public override bool TakeAction()
        {
            List<UniversalInfo> universalList = new List<UniversalInfo>();
            int layerNum = CheckUserPlotLayerNum(ContextUser);
            hurdleNum = CheckUserPlotHurdleNum(ContextUser);
            plotInfoArray = new ConfigCacheSet<PlotInfo>().FindAll(m => m.LayerNum == layerNum && m.PlotType == PlotType.Kalpa);
            if (plotInfoArray.Count > 0)
            {
                plotInfo = new List<PlotInfo>(plotInfoArray).Find(u => u.PlotSeqNo == hurdleNum);
                if (plotInfo != null)
                {
                    plotNpcInfoArray = new ConfigCacheSet<PlotNPCInfo>().FindAll(m => m.PlotID == plotInfo.PlotID);
                    foreach (var info in plotNpcInfoArray)
                    {
                        SparePartInfo partInfo = new ConfigCacheSet<SparePartInfo>().FindKey(info.SparePartID);
                        if (partInfo != null)
                        {
                            universalList.Add(new UniversalInfo() { Name = partInfo.Name, HeadID = partInfo.HeadID, Num = 1 });
                        }
                    }
                    npcName = plotNpcInfoArray.Count == 0 ? string.Empty : plotNpcInfoArray[0].NpcName;
                    var userPlot = UserPlotHelper.GetUserPlotInfo(ContextUser.UserID, plotInfo.PlotID);
                    //todo new GameDataCacheSet<UserPlot>().FindKey(Uid, plotInfo.PlotID);
                    _isOverCombat = userPlot != null && userPlot.PlotStatus == PlotStatus.Completed;
                    strEnchant = plotInfo.EnchantID.Split(',');
                    if (strEnchant.Length > 0)
                    {
                        universalList.Add(new UniversalInfo() { Name = LanguageManager.GetLang().St4301_RandomEnchant, HeadID = string.Empty, Num = 1 });
                    }
                    universalArray = universalList.ToArray();
                }
            }

            return true;
        }
Beispiel #7
0
        /// <summary>
        /// 当前玩家所在的层、关的副本
        /// </summary>
        /// <returns></returns>
        public static PlotInfo CheckUserPlotKalpa(GameUser user)
        {
            PlotInfo plotInfo = null;

            var userPlotArray = UserPlotHelper.UserPlotFindAll(user.UserID).FindAll(m => m.PlotType == PlotType.Kalpa);
            if (userPlotArray.Count == 0)
            {
                PlotHelper.EnablePlot(user.UserID, 8000);
                UserPlotHelper.UserPlotFindAll(user.UserID).FindAll(m => m.PlotType == PlotType.Kalpa);
            }
            if (userPlotArray.Count > 0)
            {
                userPlotArray.QuickSort((x, y) =>
                                                        {
                                                            int result = 0;
                                                            if (x == null && y == null) return 0;
                                                            if (x != null && y == null) return 1;
                                                            if (x == null) return -1;
                                                            result = new ConfigCacheSet<PlotInfo>().FindKey(y.PlotID).LayerNum.CompareTo(
                                                                new ConfigCacheSet<PlotInfo>().FindKey(x.PlotID).LayerNum);
                                                            if (result == 0)
                                                            {
                                                                result = new ConfigCacheSet<PlotInfo>().FindKey(y.PlotID).PlotSeqNo.CompareTo(
                                                                    new ConfigCacheSet<PlotInfo>().FindKey(x.PlotID).PlotSeqNo);
                                                            }
                                                            return result;
                                                        });
                plotInfo = new ConfigCacheSet<PlotInfo>().FindKey(userPlotArray[0].PlotID);
            }
            return plotInfo;
        }
Beispiel #8
0
        public override bool TakeAction()
        {
            var plotTeam = new PlotTeamCombat(ContextUser);
            teamCombatResult = plotTeam.GetCombatProcess(teamID);
            teamPlot = plotTeam.GetTeam(teamID);
            plotInfo = new ConfigCacheSet<PlotInfo>().FindKey(plotID);

            if (teamCombatResult.IsWin)
            {
                //日常任务-多人副本
                TaskHelper.TriggerDailyTask(Uid, 4007);

                if (ContextUser.UserExtend != null && ContextUser.UserExtend.DailyInfo != null)
                {
                    if (ContextUser.UserExtend.DailyInfo.RefreshDate.Date == DateTime.Now.Date)
                    {
                        ContextUser.UserExtend.DailyInfo.MoreNum = MathUtils.Addition(ContextUser.UserExtend.DailyInfo.MoreNum, 1);
                    }
                    else
                    {
                        ContextUser.UserExtend.DailyInfo.RefreshDate = DateTime.Now;
                        ContextUser.UserExtend.DailyInfo.MoreNum = 1;
                    }
                }
                else if (ContextUser.UserExtend != null)
                {
                    DailyRefresh dailyRefresh = new DailyRefresh();
                    dailyRefresh.RefreshDate = DateTime.Now;
                    dailyRefresh.MoreNum = 1;
                    ContextUser.UserExtend.DailyInfo = dailyRefresh;
                }
                //ContextUser.Update();
            }

            return true;
        }
Beispiel #9
0
        public override bool TakeAction()
        {
            if (ContextUser.UserStatus == UserStatus.CountryCombat)
            {
                CountryCombat countryCombat = new CountryCombat(ContextUser);
                if (countryCombat.GameActive != null && countryCombat.GameActive.RefreshStatus() == CombatStatus.Combat)
                {
                    countryCombat.Exit();
                }
            }

            if (ContextUser.EnergyNum <= 0 && ContextUser.SurplusEnergy <= 0)
            {
                ErrorCode = 3;
                ErrorInfo = LanguageManager.GetLang().St_EnergyNotEnough;
                return false;
            }
            //if (_ops != 1 && UserHelper.IsPromptBlood(ContextUser.UserID))
            //{
            //    ErrorCode = 1;
            //    ErrorInfo = LanguageManager.GetLang().St4002_PromptBlood;
            //    return false;
            //}
            //if (_ops != 1 && UserItemHelper.CheckItemOut(ContextUser, ItemStatus.BeiBao))
            //{
            //    ErrorCode = 1;
            //    ErrorInfo = LanguageManager.GetLang().St_User_BeiBaoMsg;
            //    return false;
            //}

            UserHelper.UserGeneralPromptBlood(ContextUser);//佣兵自动使用绷带补血

            plotInfo = new ConfigCacheSet<PlotInfo>().FindKey(plotID);

            if (plotInfo == null)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().LoadDataError;
                return false;
            }
            int challengeNum = PlotHelper.GetPlotChallengeNum(UserId.ToString(), plotInfo.PlotID);
            if (plotInfo.PlotType == PlotType.Elite && challengeNum >= plotInfo.ChallengeNum)
            {
                ErrorCode = 4;
                ErrorInfo = LanguageManager.GetLang().St4002_IsPlotEliteNotChallengeNum;
                return false;
            }

            if ((challengeNum >= plotInfo.ChallengeNum && ContextUser.VipLv < 3))
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St4002_NotChallengeNum;
                return false;
            }

            int num = challengeNum;
            int challengeDefSoldNum = ConfigEnvSet.GetInt("UserPlot.ChallengeDefSoldNum");
            int challengeDoubleSoldNum = ConfigEnvSet.GetInt("UserPlot.ChallengeDoubleSoldNum");
            if (_ops != 1 && num >= plotInfo.ChallengeNum && PlotHelper.GetPlotIsOne(UserId.ToString(), plotInfo.PlotID))
            {
                ErrorCode = 1;
                _plotNum = challengeDefSoldNum;
                return false;
            }
            else
            {
                if (_ops != 1 && num >= plotInfo.ChallengeNum && PlotHelper.GetPlotIsOne(UserId.ToString(), plotInfo.PlotID) == false)
                {
                    int openNum = num - plotInfo.ChallengeNum + 1;
                    _plotNum = challengeDoubleSoldNum * openNum + challengeDefSoldNum;
                }
            }

            if (_ops != 1 && num >= plotInfo.ChallengeNum)
            {
                ErrorCode = 1;
                ErrorInfo = string.Format(LanguageManager.GetLang().St4002_IsPlotNum, _plotNum);
                return false;
            }
            if (_ops == 1 && num >= plotInfo.ChallengeNum)
            {

                if (ContextUser.GoldNum < _plotNum)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                    return false;
                }
                ContextUser.UseGold = MathUtils.Subtraction(ContextUser.UseGold, _plotNum);
            }
            if (_ops == 1 && num >= plotInfo.ChallengeNum && PlotHelper.GetPlotIsOne(UserId.ToString(), plotInfo.PlotID) == false)
            {
                int openNum = num - plotInfo.ChallengeNum + 1;
                _plotNum = challengeDoubleSoldNum * openNum + challengeDefSoldNum; ;
                if (ContextUser.GoldNum < _plotNum)
                {
                    ErrorCode = 2;
                    ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                    return false;
                }
                ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, _plotNum);
            }
            if (_ops != 1 && !string.IsNullOrEmpty(plotInfo.EnchantID) && plotInfo.EnchantProbability > 0 && EnchantHelper.IsEnchantPackage(ContextUser.UserID))
            {
                ErrorCode = 1;
                ErrorInfo = LanguageManager.GetLang().St4002_EnchantPackageFull;
                return false;
            }
            //var cacheSetUserPlot = new GameDataCacheSet<UserPlotPackage>();
            //var userPlotPack = cacheSetUserPlot.FindKey(ContextUser.UserID);
            //var userPlot = userPlotPack != null ? userPlotPack.PlotPackage.Find(s => s.PlotID == npcInfo.PlotID) : null;
            var userPlot = UserPlotHelper.GetUserPlotInfo(ContextUser.UserID, plotID);
            if (userPlot != null && userPlot.PlotNum >= plotInfo.ChallengeNum)
            {
                if (plotInfo.PlotType == PlotType.Elite)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St4002_EliteUsed;
                    return false;
                }
                else if (plotInfo.PlotType == PlotType.HeroPlot)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St4002_HeroPlotNum;
                    return false;
                }
            }
            npcList = new ConfigCacheSet<PlotNPCInfo>().FindAll(m => m.PlotID == plotID);
            //if (ContextUser.EnergyNum < (npcList.Count * PlotInfo.BattleEnergyNum))
            //{
            //    ErrorCode = 3;
            //    ErrorInfo = LanguageManager.GetLang().St_EnergyNotEnough;
            //    return false;
            //}
            ContextUser.InPlotDate = DateTime.Now;
            //if (ContextUser.UserExtend == null || ContextUser.UserExtend.PlotStatusID == 0 || ContextUser.UserExtend.MercenarySeq == 0)
            //{
            //    ContextUser.TempEnergyNum = PlotInfo.BattleEnergyNum;
            //    //ContextUser.RemoveEnergyNum(PlotInfo.BattleEnergyNum);
            //}
            //ContextUser.Update();
            if (ContextUser.UserExtend != null && ContextUser.UserExtend.PlotStatusID <= 0)
            {
                ContextUser.UserExtend.UpdateNotify(obj =>
                {
                    ContextUser.UserExtend.PlotStatusID = plotID;
                    ContextUser.UserExtend.PlotNpcID = -1;
                    ContextUser.UserExtend.MercenarySeq = 1;
                    ContextUser.UserExtend.IsBoss = false;
                    return true;
                });
            }

            _isOverCombat = userPlot != null && userPlot.PlotStatus == PlotStatus.Completed;
            ContextUser.TempEnergyNum = PlotInfo.BattleEnergyNum;
            return true;
        }
Beispiel #10
0
 /// <summary>
 /// 是否是最后一层
 /// </summary>
 /// <param name="plotInfo"></param>
 /// <returns></returns>
 public static bool IsLastLayer(PlotInfo plotInfo)
 {
     return new ShareCacheStruct<PlotInfo>().FindKey(plotInfo == null ? 0 : plotInfo.AftPlotID) == null;
 }