public override bool TakeAction() { //if (ContextUser.EnergyNum <= 0) //{ // ErrorCode = LanguageManager.GetLang().ErrorCode; // ErrorInfo = LanguageManager.GetLang().St_EnergyNotEnough; // return false; //} //if (ContextUser.EnergyNum <= 0 && ContextUser.TempEnergyNum == 0) //{ // ErrorCode = LanguageManager.GetLang().ErrorCode; // ErrorInfo = LanguageManager.GetLang().St_EnergyNotEnough; // return false; //} if (ContextUser.UserStatus == UserStatus.SaoDang) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St4007_Saodanging; return false; } if (ContextUser.UseMagicID == 0) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St4004_NoUseMagic; return false; } if (new PersonalCacheStruct<UserEmbattle>().FindAll(Uid, m => m.MagicID == ContextUser.UseMagicID).Count == 0) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St4004_EmbattleEmpty; return false; } //if (ContextUser.TempEnergyNum == 0) //{ // ErrorCode = LanguageManager.GetLang().ErrorCode; // ErrorInfo = LanguageManager.GetLang().St_EnergyNotEnough; // return false; //} ContextUser.UserStatus = UserStatus.Combat; try { //触发战斗 PlotNPCInfo npcInfo = new ShareCacheStruct<PlotNPCInfo>().FindKey(PlotNpcID); //原因:碰npc时掉线,再请求战斗详情 if (npcInfo == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().LoadDataError; return false; } //原因:最后一个npc时,清空玩家保存副本 if (ContextUser.UserExtend != null && ContextUser.UserExtend.MercenarySeq > npcInfo.NpcSeqNo) { ContextUser.UserStatus = UserStatus.Normal; ContextUser.UserExtend.UpdateNotify(obj => { ContextUser.UserExtend.PlotStatusID = 0; ContextUser.UserExtend.PlotNpcID = -1; ContextUser.UserExtend.MercenarySeq = 1; ContextUser.UserExtend.IsBoss = false; return true; }); //ErrorCode = LanguageManager.GetLang().ErrorCode; //ErrorInfo = LanguageManager.GetLang().St4011_NoMonster; //return false; } PlotInfo plotInfo = new ShareCacheStruct<PlotInfo>().FindKey(npcInfo.PlotID); if (plotInfo == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().LoadDataError; return false; } var cacheSetUserPlot = new PersonalCacheStruct<UserPlotPackage>(); var cacheSetItemInfo = new ShareCacheStruct<ItemBaseInfo>(); var cacheSet = new PersonalCacheStruct<UserPlotCombat>(); var userPlotPack = cacheSetUserPlot.FindKey(ContextUser.UserID); var userPlot = userPlotPack != null ? userPlotPack.PlotPackage.Find(s => s.PlotID == npcInfo.PlotID) : null; //PlotHelper.IsKill(ContextUser.UserID, plotInfo.PlotID, plotInfo.CityID) 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; } } //if (userPlot != null && userPlot.ItemList != null) //{ // userPlot.UpdateNotify(obj => // { // userPlot.ItemList.Clear(); // return true; // }); //} if (npcInfo.NpcSeqNo == 1) { userPlot.ItemList.Clear(); ContextUser.IsItem = false; } userPlotCombat = cacheSet.FindKey(ContextUser.UserID, PlotNpcID); if (userPlotCombat != null && userPlotCombat.IsWin && ContextUser.UserExtend != null && PlotNpcID == ContextUser.UserExtend.PlotNpcID && !ContextUser.IsItem) { prizeItems = PlotHelper.GetPlotMonsterItems(Uid, npcInfo.PlotNpcID); } else { ISingleCombat plotCombater = CombatFactory.TriggerPlot(ContextUser, PlotNpcID); if (plotCombater == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().LoadDataError; return false; } if (userPlotCombat == null) { userPlotCombat = new UserPlotCombat() { UserID = ContextUser.UserID, PlotNpcID = PlotNpcID }; cacheSet.Add(userPlotCombat); userPlotCombat = cacheSet.FindKey(ContextUser.UserID, PlotNpcID); } userPlotCombat.PlotID = npcInfo.PlotID; userPlotCombat.CombatDate = DateTime.Now; userPlotCombat.IsWin = plotCombater.Doing(); if (!userPlotCombat.IsWin) { userPlotCombat.OverNum += 1; } ContextUser.IsItem = npcInfo.NpcSeqNo == 1 ? false : ContextUser.IsItem; combatProcessList = (CombatProcessContainer)plotCombater.GetProcessResult(); userPlotCombat.GeneralNum = combatProcessList.AttackList.Count; userPlotCombat.GeneralOverNum = GetOverGeneralNum(combatProcessList.AttackList.ToList()); //userPlotCombat.CombatProcess = JsonUtils.Serialize(combatProcessList); int generalNum = combatProcessList.DefenseList.FindAll(s => s.LiveNum > 0).Count; if (userPlotCombat.IsWin) { if (ContextUser.UserExtend != null) { ContextUser.UserExtend.UpdateNotify(obj => { ContextUser.UserExtend.PlotStatusID = npcInfo.PlotID; ContextUser.UserExtend.PlotNpcID = PlotNpcID; ContextUser.UserExtend.MercenarySeq = MathUtils.Addition(npcInfo.NpcSeqNo, (short)1); ContextUser.UserExtend.IsBoss = npcInfo.IsBoss; //是否最后一个副本npc return true; }); } //玩家通过一个城市的所有副本时,增加聊天频道系统提示 if (userPlot.PlotStatus != PlotStatus.Completed && npcInfo.IsBoss) //玩家此副本胜利 { var city = new ShareCacheStruct<CityInfo>().FindKey(plotInfo.CityID); var nextPlot = new ShareCacheStruct<PlotInfo>().FindKey(plotInfo.AftPlotID); if (city != null && nextPlot != null && nextPlot.CityID != plotInfo.CityID) //此城市的最后一个副本 { string content = string.Format(LanguageManager.GetLang().St_systemprompts, ContextUser.NickName, city.CityName); new TjxChatService().SystemSend(ChatType.World, content); } } PlotHelper.DoPlotPrize(Uid, npcInfo, userPlotCombat, generalNum, out _honourNum); if (npcInfo.NpcSeqNo == 1) { ContextUser.EnergyNum = MathUtils.Subtraction(ContextUser.EnergyNum, ContextUser.TempEnergyNum).ToShort(); //原因:刷晶石BUG ContextUser.TempEnergyNum = 0; } if (!ContextUser.IsItem) { prizeItems = PlotHelper.GetPlotMonsterItems(Uid, npcInfo.PlotNpcID); } TaskHelper.KillPlotMonster(Uid, npcInfo.PlotID, PlotNpcID); //var stroyTaskList = new ShareCacheStruct<StoryTaskInfo>().FindAll(s => s.PlotID == plotInfo.AftPlotID); //foreach (var story in stroyTaskList) //{ // var usertask = new PersonalCacheStruct<UserTask>().FindKey(ContextUser.UserID, story.PlotID); // if (usertask != null) // { PlotHelper.EnablePlot(Uid, plotInfo.AftPlotID); // } //} if (plotInfo.PlotType == PlotType.Elite) { EliteDailyRestrain(npcInfo); NoviceHelper.ElitePlotFestivalList(ContextUser); //通关精英副本获得奖励 } else if (plotInfo.PlotType == PlotType.Kalpa) { KalpaDailyRestrain(npcInfo); } else if (plotInfo.PlotType == PlotType.HeroPlot) { PlotHelper.EnableHeroPlot(ContextUser.UserID, plotInfo.PlotID); PlotHelper.HeroDailyRestrain(ContextUser.UserID, plotInfo.PlotID, plotInfo.CityID); } } else { ContextUser.GeneralAllCount = 0; ContextUser.GeneralKillCount = 0; } var restrain = new PersonalCacheStruct<UserDailyRestrain>().FindKey(Uid); if (restrain != null) { var restrainSet = new ShareCacheStruct<DailyRestrainSet>().FindKey(RestrainType.PlotGoto); if (restrainSet != null) GotoNum = MathUtils.Subtraction(restrainSet.MaxNum, restrain.Funtion14, 0); } } //原因:最后一个npc时,清空玩家保存副本 if (ContextUser.UserExtend != null && ContextUser.UserExtend.IsBoss) { ContextUser.UserExtend.UpdateNotify(obj => { ContextUser.UserExtend.PlotStatusID = 0; ContextUser.UserExtend.PlotNpcID = -1; ContextUser.UserExtend.MercenarySeq = 0; ContextUser.UserExtend.IsBoss = npcInfo.IsBoss; return true; }); } if (!ContextUser.IsItem) { foreach (var prize in prizeItems) { if (prize.Type == 0 && userPlot != null) { var itemInfo = cacheSetItemInfo.FindKey(prize.ItemID); UniversalInfo universalInfo = new UniversalInfo(); universalInfo.HeadID = itemInfo != null ? itemInfo.HeadID : string.Empty; universalInfo.ItemID = itemInfo != null ? itemInfo.ItemID : 0; universalInfo.ItemDesc = itemInfo != null ? itemInfo.ItemDesc : string.Empty; universalInfo.MaxHeadID = itemInfo != null ? itemInfo.MaxHeadID : string.Empty; universalInfo.Name = itemInfo != null ? itemInfo.ItemName : string.Empty; universalInfo.Num = prize.Num; if (userPlot.ItemList != null && userPlot.ItemList.Count > 0) { var item = userPlot.ItemList.Find(s => s.ItemID == prize.ItemID); if (item != null) { item.UpdateNotify(obj => { item.Num = MathUtils.Addition(item.Num, prize.Num); return true; }); } else { userPlot.UpdateNotify(obj => { userPlot.ItemList.Add(universalInfo); return true; }); } } else { userPlot.UpdateNotify(obj => { userPlot.ItemList.Add(universalInfo); return true; }); } } ContextUser.IsItem = true; } } var a = userPlot.ItemList; } finally { ContextUser.UserStatus = UserStatus.Normal; } //日志 UserCombatLog log = new UserCombatLog(); log.CombatLogID = Guid.NewGuid().ToString("N"); log.UserID = userPlotCombat.UserID; log.CityID = ContextUser.CityID; log.PlotID = userPlotCombat.PlotID; log.NpcID = userPlotCombat.PlotNpcID; log.CombatType = CombatType.Plot; log.HostileUser = string.Empty; log.IsWin = userPlotCombat.IsWin; log.CombatProcess = JsonUtils.Serialize(combatProcessList); log.PrizeItem = prizeItems; log.CreateDate = DateTime.Now; var sender = DataSyncManager.GetDataSender(); sender.Send(log); UserHelper.GetGeneralLife(ContextUser.UserID); UserHelper.RegainGeneralLife(ContextUser.UserID); //var userEmbattleList = EmbattleHelper.CurrEmbattle(ContextUser.UserID, true); // foreach (var userEmbattle in userEmbattleList) // { // _userTalPriority = MathUtils.Addition(_userTalPriority, PriorityHelper.GeneralTotalPriority(ContextUser.UserID, userEmbattle.GeneralID)); // } selfAbilityEffectList = UserAbilityHelper.GetSelfAbilityEffectList(ContextUser.UserID, 0); //var userEmbattleList = EmbattleHelper.CurrEmbattle(ContextUser.UserID, true); _userTalPriority = CombatHelper.TotalPriorityNum(ContextUser.UserID, 0); return true; }
/// <summary> /// 副本奖励,如果通关下发通关奖励 /// </summary> /// <param name="userID"></param> /// <param name="plotNpcInfo"></param> /// <param name="userPlotCombat"></param> internal static void DoPlotPrize(string userID, PlotNPCInfo plotNpcInfo, UserPlotCombat userPlotCombat, int npcGeneralNum, out int honourNum) { honourNum = 0; int experience = 0; PlotInfo plotInfo = new ConfigCacheSet<PlotInfo>().FindKey(plotNpcInfo.PlotID); var package = UserPlotPackage.Get(userID); if (plotInfo == null || plotNpcInfo == null || userPlotCombat == null || package == null) { return; } GameUser user = new GameDataCacheSet<GameUser>().FindKey(userID); if (user != null) { experience += plotNpcInfo.Experience; userPlotCombat.Experience = plotNpcInfo.Experience; if (!string.IsNullOrEmpty(user.MercenariesID)) { //公会技能加成 userPlotCombat.Experience = MathUtils.RoundCustom(experience * CombatHelper.GetGuildAbilityNum(user.UserID, GuildAbilityType.Experience)).ToInt(); experience = userPlotCombat.Experience; } var cacheSetGeneral = new GameDataCacheSet<UserGeneral>(); var userMagic = new GameDataCacheSet<UserMagic>().Find(user.UserID, s => s.IsEnabled); int userMagicID = userMagic == null ? 0 : userMagic.MagicID; var userEmbattleList = new GameDataCacheSet<UserEmbattle>().FindAll(userID, s => s.MagicID == userMagicID && s.GeneralID > 0); int generalNum = 0; userEmbattleList.ForEach(userEmbattle => { var userGeneral = cacheSetGeneral.FindKey(userID, userEmbattle.GeneralID); generalNum = userGeneral != null && userGeneral.LifeNum > 0 ? MathUtils.Addition(generalNum, 1) : generalNum; }); user.GeneralAllCount = MathUtils.Addition(user.GeneralAllCount, userPlotCombat.GeneralNum); user.GeneralKillCount = MathUtils.Addition(user.GeneralKillCount, (userPlotCombat.GeneralNum - generalNum)); //怪物掉落物品) if (plotNpcInfo.IsBoss) { if (plotInfo.PlotType == PlotType.Normal && user.PlotProgress < plotInfo.PlotID) { user.PlotProgress = plotInfo.PlotID; } //日常任务-通关副本 TaskHelper.TriggerDailyTask(userID, 4005); DateTime currDate = DateTime.Now; //通关奖励 var userPlot = UserPlotHelper.GetUserPlotInfo(userID, plotNpcInfo.PlotID); if (userPlot == null) { userPlot = new UserPlotInfo(); userPlot.PlotID = plotNpcInfo.PlotID; userPlot.CreateDate = currDate; package.SaveItem(userPlot); } NoviceHelper.PlotFestivalList(user, plotInfo.PlotID); //活动集合 List<UserPlotCombat> preUserPlotList = new GameDataCacheSet<UserPlotCombat>().FindAll(userID, m => !m.PlotNpcID.Equals(userPlotCombat.PlotNpcID) && m.PlotID == plotNpcInfo.PlotID); preUserPlotList.Add(userPlotCombat); List<UserPlotCombat> plotCombatList = preUserPlotList; short starScore; PlotSuccessType plotSuccessType = PlotSuccessType.No; userPlot.ScoreNum = GetPlotScoreNum(plotCombatList, out starScore); userPlot.PlotStatus = PlotStatus.Completed; userPlot.AttackScore = 0; userPlot.DefenseScore = 0; userPlot.ItemID = 0; userPlot.EnchantID = 0; userPlot.PlotSuccessType = plotSuccessType; //获得星星等级 if (userPlotCombat.IsWin) { double pren = 0; GetStar(user, generalNum, out starScore, out plotSuccessType, out pren); userPlot.StarScore = starScore; userPlot.PlotSuccessType = plotSuccessType; //获得荣誉值 honourNum = plotInfo.HonourNum; userPlot.PlotNum = MathUtils.Addition(userPlot.PlotNum, 1); if (GetPlotChallengeNum(userID, plotNpcInfo.PlotID) == 1) { if (starScore >= 3) { if (plotInfo.PlotType==PlotType.Elite) // 如果是精英副本 { if (userPlot.FirstWin==false) // 如果是首次获得3星 { userPlot.FirstWin = true; userPlot.ExpNum = (int)(plotInfo.ExpNum * 2); userPlot.PennyNum = (int)(plotInfo.GameCoin * 2); } else { userPlot.ExpNum = plotInfo.ExpNum; userPlot.PennyNum = plotInfo.GameCoin; } } else { userPlot.ExpNum = (int)(plotInfo.ExpNum * 2); userPlot.PennyNum = (int)(plotInfo.GameCoin * 2); } } else { userPlot.ExpNum = plotInfo.ExpNum; userPlot.PennyNum = plotInfo.GameCoin; } honourNum = honourNum * starScore; } else { userPlot.ExpNum = plotInfo.ExpNum; userPlot.PennyNum = plotInfo.GameCoin; } userPlot.HonourNum = honourNum; GeneralEscalateHelper.AddUserLv(user, honourNum); } else { PlotFailureType plotFailureType; GetFailure(npcGeneralNum, out plotFailureType); userPlot.PlotFailureType = plotFailureType; } // userPlot.ExpNum = plotInfo.ExpNum; userPlot.GoldNum = plotInfo.GetRandomGold(); if (!string.IsNullOrEmpty(user.MercenariesID)) { //公会技能加成 userPlot.Experience = MathUtils.RoundCustom(userPlot.Experience * CombatHelper.GetGuildAbilityNum(user.UserID, GuildAbilityType.Experience)).ToInt(); userPlot.ExpNum = MathUtils.RoundCustom(userPlot.ExpNum * CombatHelper.GetGuildAbilityNum(user.UserID, GuildAbilityType.ExpNum)).ToInt(); userPlot.PennyNum = MathUtils.RoundCustom(userPlot.PennyNum * CombatHelper.GetGuildAbilityNum(user.UserID, GuildAbilityType.CoinNum)).ToInt(); } CacheList<PrizeItemInfo> itemList = new CacheList<PrizeItemInfo>(); string itemName = string.Empty; if (plotInfo.PlotType != PlotType.Kalpa) { var copyList = GetPrizeItems(userID, plotInfo.ItemProbability, plotInfo.ItemRank, plotInfo.PlotID, userPlot); copyList.Foreach(item => { if (item.Type == 0) { itemList.Add(item); } return true; }); if (itemList.Count > 0) { userPlot.ItemID = itemList[0].ItemID; var item = new ConfigCacheSet<ItemBaseInfo>().FindKey(userPlot.ItemID); itemName = item != null ? item.ItemName : string.Empty; } } if (!string.IsNullOrEmpty(plotInfo.EnchantID) && plotInfo.EnchantProbability > 0) { var copyList = GetKalpaPrizeItems(userID, plotInfo.ItemProbability, plotInfo.ItemRank, plotInfo.PlotID, userPlot); copyList.Foreach(item => { if (item.Type == 2) { itemList.Add(item); if (plotInfo.PlotType != PlotType.Kalpa) { userPlot.EnchantID = item.ItemID; EnchantAddUser(user, item.ItemID); } } return true; }); } if (plotInfo.PlotType == PlotType.Elite) { //精英副本奖励发聊天<label color='0,255,0' >{0}</label><label>{0}</label> string content = string.Format(LanguageManager.GetLang().St_PlotRewardNotice, user.NickName, plotNpcInfo.NpcName, itemName); new TjxChatService().SystemSend(ChatType.World, content); } //祝福加金币 if (UserHelper.GainBlessing(user, 0) > 0) { UserHelper.GainBlessing(user, 1); userPlot.BlessPennyNum = (int)Math.Floor(userPlot.PennyNum * new GuildMember().BlessingCionPercent); userPlot.PennyNum = MathUtils.Addition(userPlot.PennyNum, userPlot.BlessPennyNum); user.GameCoin = MathUtils.Addition(user.GameCoin, userPlot.PennyNum, int.MaxValue); } if (userPlot.CompleteDate <= MathUtils.SqlMinDate) { userPlot.CompleteDate = currDate; } userPlot.RefleshDate = currDate; //experience = userPlot.Experience; //userPlotCombat.Experience = experience; experience += userPlot.Experience + userPlot.BlessExperience; user.GameCoin = MathUtils.Addition(user.GameCoin, userPlot.PennyNum, int.MaxValue); user.ExpNum = MathUtils.Addition(user.ExpNum, userPlot.ExpNum, int.MaxValue); user.ItemGold = MathUtils.Addition(user.ItemGold, userPlot.GoldNum, int.MaxValue); //user.Update(); //奖励日志 UserPlotPrizeLog prizeLog = new UserPlotPrizeLog { PrizeLogID = Guid.NewGuid().ToString(), ScoreNum = userPlot.ScoreNum, StarScore = userPlot.StarScore, PrizeItem = itemList, Experience = userPlot.Experience, ExpNum = userPlot.ExpNum, GameCoin = userPlot.PennyNum, PlotID = userPlot.PlotID, UserID = userID, CreateDate = DateTime.Now }; var sender = DataSyncManager.GetDataSender(); sender.Send(prizeLog); //重置评价 foreach (UserPlotCombat plotCombat in plotCombatList) { //只有一个NPC时更新不了 //if (plotCombatList.Count > 1 && plotCombat.Equals(userPlotCombat)) continue; plotCombat.GeneralNum = 0; plotCombat.GeneralOverNum = 0; plotCombat.OverNum = 0; //plotCombat.Update(); } //通关副本 副本ID清空 if (user.UserExtend != null) { user.UserExtend.UpdateNotify(obj => { user.UserExtend.PlotStatusID = 0; user.UserExtend.PlotNpcID = 0; user.UserExtend.MercenarySeq = 0; return true; }); } package.SaveItem(userPlot); user.GeneralAllCount = 0; user.GeneralKillCount = 0; if (plotInfo.PlotType == PlotType.Normal) { int multiple = FestivalHelper.DuplicateDropDouble(user.UserID); if (multiple > 1) { FestivalHelper.DuplicateDropDoubleRestrain(user.UserID); } } } //佣兵经验 AddExprerience(user, experience); } }
public override bool TakeAction() { var cacheEnvSet = new ConfigCacheSet<ConfigEnvSet>(); var envset = cacheEnvSet.FindKey("CombatMaxBout"); if (envset != null) { } PlotNPCInfo npcInfo = new ConfigCacheSet<PlotNPCInfo>().FindKey(PlotNpcID); if (npcInfo == null) { return false; } PlotInfo plotInfo = new ConfigCacheSet<PlotInfo>().FindKey(npcInfo.PlotID); if (plotInfo == null) { return false; } //判断是否有下一关 int nextLayerNum = MathUtils.Addition(ContextUser.UserExtend.LayerNum, 1); int nextHurdleNum = MathUtils.Addition(ContextUser.UserExtend.HurdleNum, 1); if ((UserHelper.IsLastLayer(plotInfo) || !IsGotoNextLayer(nextLayerNum))) { if (UserHelper.IsKill(ContextUser, npcInfo.PlotID)) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St4303_PlotNotEnableLayerNum; return false; } } if (ops != 1 && UserHelper.IsPromptBlood(ContextUser.UserID)) { ErrorCode = 1; ErrorInfo = LanguageManager.GetLang().St4002_PromptBlood; return false; } //原因:灵件背包满时未提示 if (ops != 1 && UserHelper.IsSpareGridNum(ContextUser, 0)) { ErrorCode = 1; ErrorInfo = LanguageManager.GetLang().St_User_SpareBeiBaoMsg; return false; } if (ops != 1 && !string.IsNullOrEmpty(plotInfo.EnchantID) && plotInfo.EnchantProbability > 0 && EnchantHelper.IsEnchantPackage(ContextUser.UserID)) { ErrorCode = 1; ErrorInfo = LanguageManager.GetLang().St4002_EnchantPackageFull; return false; } if (ContextUser.UserStatus == UserStatus.SaoDang) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St4007_Saodanging; return false; } if (ContextUser.UseMagicID == 0) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St4004_NoUseMagic; return false; } if (new GameDataCacheSet<UserEmbattle>().FindAll(Uid, m => m.MagicID == ContextUser.UseMagicID).Count == 0) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St4004_EmbattleEmpty; return false; } //PlotNPCInfo npcInfo = new ConfigCacheSet<PlotNPCInfo>().FindKey(PlotNpcID); if (IsPlotOut(npcInfo)) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St4303_PlotNotEnable; return false; } UserHelper.UserGeneralPromptBlood(ContextUser);//佣兵自动使用绷带补血 //触发战斗 ISingleCombat plotCombater = CombatFactory.TriggerPlot(ContextUser, PlotNpcID); if (plotCombater == null) { return false; } var cacheSet = new GameDataCacheSet<UserPlotCombat>(); userPlotCombat = cacheSet.FindKey(ContextUser.UserID, PlotNpcID); if (userPlotCombat == null) { userPlotCombat = new UserPlotCombat() { UserID = ContextUser.UserID, PlotNpcID = PlotNpcID }; cacheSet.Add(userPlotCombat); userPlotCombat = cacheSet.FindKey(ContextUser.UserID, PlotNpcID); } userPlotCombat.PlotID = npcInfo.PlotID; userPlotCombat.CombatDate = DateTime.Now; userPlotCombat.IsWin = plotCombater.Doing(); if (!userPlotCombat.IsWin) { userPlotCombat.OverNum += 1; } combatProcessList = (CombatProcessContainer)plotCombater.GetProcessResult(); userPlotCombat.GeneralNum = combatProcessList.AttackList.Count; userPlotCombat.GeneralOverNum = GetOverGeneralNum(combatProcessList.AttackList.ToList()); if (userPlotCombat.IsWin) { int honourNum = 0; PlotHelper.DoPlotPrize(Uid, npcInfo, userPlotCombat, 0, out honourNum); prizeItems = PlotHelper.GetKalpaPlotMonsterItems(Uid, npcInfo.PlotID, npcInfo.PlotNpcID); universalArray = GetUniversalList().ToArray(); if (plotInfo.PlotType == PlotType.Kalpa) { KalpaDailyRestrain(npcInfo); if (ContextUser.UserExtend == null) { ContextUser.UserExtend = new GameUserExtend(); } PlotInfo[] plotInfoList = new ConfigCacheSet<PlotInfo>().FindAll(m => m.LayerNum == ContextUser.UserExtend.LayerNum && m.PlotSeqNo == nextHurdleNum && m.PlotType == PlotType.Kalpa).ToArray(); if (plotInfoList.Length > 0) { int layerNum = ContextUser.UserExtend.LayerNum; int hurdleNum = ContextUser.UserExtend.HurdleNum; if (CheckHurdleNum(ContextUser.UserID, layerNum, hurdleNum)) { ContextUser.UserExtend.UpdateNotify(obj => { ContextUser.UserExtend.HurdleNum = nextHurdleNum; return true; }); //ContextUser.Update(); PlotHelper.EnablePlot(ContextUser.UserID, plotInfo.AftPlotID); } } else if (IsGotoNextLayer(nextLayerNum)) { //判断是否能到下一层 plotInfoList = new ConfigCacheSet<PlotInfo>().FindAll(m => m.LayerNum == nextLayerNum && m.PlotType == PlotType.Kalpa).ToArray(); if (plotInfoList.Length > 0) { ContextUser.UserExtend.UpdateNotify(obj => { ContextUser.UserExtend.LayerNum = nextLayerNum; ContextUser.UserExtend.HurdleNum = 1; return true; }); //ContextUser.Update(); PlotHelper.EnablePlot(ContextUser.UserID, plotInfo.AftPlotID); } } } } //日志 UserCombatLog log = new UserCombatLog(); log.CombatLogID = Guid.NewGuid().ToString(); log.UserID = userPlotCombat.UserID; log.CityID = ContextUser.CityID; log.PlotID = userPlotCombat.PlotID; log.NpcID = userPlotCombat.PlotNpcID; log.CombatType = CombatType.Kalpa; log.HostileUser = string.Empty; log.IsWin = userPlotCombat.IsWin; log.CombatProcess = JsonUtils.Serialize(combatProcessList); log.PrizeItem = prizeItems; log.CreateDate = DateTime.Now; var sender = DataSyncManager.GetDataSender(); sender.Send(log); UserHelper.GetGeneralLife(ContextUser.UserID); return true; }