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 ShareCacheStruct <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 PersonalCacheStruct<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 ShareCacheStruct <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); }