示例#1
0
文件: Action5107.cs 项目: 0jpq0/Scut
        private static void TriggerSportCombat(GameUser user, GameUser toUser, int sportNum, ref string sportsPrizeString,UserMail userMail)
        {
            CombatProcessContainer combatProcessList = null;
            int rewardGoin = 0;
            int rewardObtion = 0; //荣誉值
            int experence = 0; //经验
            int winNum = 0;
            //原因:gameuser加了连胜字段
            winNum = user.VictoryNum;

            int rankIndex;
            int torankIndex;
            Ranking<UserRank> ranking = RankingFactory.Get<UserRank>(CombatRanking.RankingKey);
            if (!ranking.TryGetRankNo(m => m.UserID == user.UserID, out rankIndex) || !ranking.TryGetRankNo(m => m.UserID == toUser.UserID, out torankIndex))
            {
                return;
            }
            UserRank userRank = ranking.Find(s => s.UserID == user.UserID);
            UserRank toUserRank = ranking.Find(s => s.UserID == toUser.UserID);
            if (userRank == null || toUserRank == null) return;

            //修改wuzf,两个地方调用Doing()方法
            ISingleCombat sportCombat = CombatFactory.TriggerTournament(user, toUser);
            if (sportCombat == null) return;
            bool isWin = sportCombat.Doing();

            if (isWin)
            {
                winNum = MathUtils.Addition(winNum, 1, int.MaxValue);
                userRank.VictoryNum = winNum;
                toUserRank.VictoryNum = 0;
                toUser.VictoryNum = 0;
                new GameDataCacheSet<GameUser>().UpdateSelf(toUser.PersonalId);
                rewardGoin = (user.UserLv * 40); //GetRewardGameCoin(user, user.UserLv);
                experence = (user.UserLv * 10);
                rewardObtion = 10;
                AddFoe(user, toUser);
            }
            else
            {
                winNum = 0;
                userRank.VictoryNum = 0;
                rewardGoin = (user.UserLv * 20);
                if (!rewardGoin.IsValid())
                {
                    rewardGoin = 0;
                }
                experence = (user.UserLv * 5);
                rewardObtion = 5;
            }

            //公会贡献
            UserHelper.Contribution(user.UserID, rewardObtion);
            if (!string.IsNullOrEmpty(user.MercenariesID))
            {
                GuildMemberLog.AddLog(user.MercenariesID, new MemberLog
                {
                    UserID = user.UserID,
                    IdolID = 0,
                    LogType = 1,
                    GainObtion = rewardObtion,
                    Experience = rewardObtion,
                    GainAura = 0,
                    InsertDate = DateTime.Now,
                });
            }
            user.VictoryNum = winNum;
            new GameDataCacheSet<GameUser>().UpdateSelf(user.PersonalId);
            user.ExpNum = MathUtils.Addition(user.ExpNum, rewardObtion, int.MaxValue);
            user.GameCoin = MathUtils.Addition(user.GameCoin, rewardGoin, int.MaxValue);
            GeneralHelper.UserGeneralExp(user.UserID, 0, experence);

            int _rankTopId = 0;
            int _ranktoTopID = 0;
            if (isWin && rankIndex > torankIndex)
            {
                _rankTopId = toUserRank.RankId;
                _ranktoTopID = userRank.RankId;
            }
            else
            {
                _rankTopId = userRank.RankId;
                _ranktoTopID = toUserRank.RankId;
            }

            combatProcessList = (CombatProcessContainer)sportCombat.GetProcessResult();
            user.SportsCombatQueue.Enqueue(new SportsCombat()
            {
                ToUser = toUser.UserID,
                ToUserName = toUser.NickName,
                TopID = _rankTopId,
                IsWin = isWin,
                RewardGoin = rewardGoin,
                RewardObtian = rewardObtion,
                SportsNum = sportNum,
                WinNum = winNum,
                CombatDate = DateTime.Now,
                CombatProcess = combatProcessList,
                IsSelf = true,
                RankStatus = GetRankStatus(isWin, userRank, toUserRank)
            });

            UserDailyRestrain dailyRestrain = new GameDataCacheSet<UserDailyRestrain>().FindKey(toUser.UserID) ?? new UserDailyRestrain();
            toUser.SportsCombatQueue.Enqueue(new SportsCombat()
            {
                ToUser = user.UserID,
                ToUserName = user.NickName,
                TopID = _ranktoTopID,
                IsWin = !isWin,
                RewardGoin = 0,
                RewardObtian = 0,
                SportsNum = dailyRestrain.Funtion9,
                WinNum = toUserRank.VictoryNum,
                CombatDate = DateTime.Now,
                CombatProcess = combatProcessList,
                IsSelf = false,
                RankStatus = GetRankStatus(!isWin, toUserRank, userRank)
            });

            //日志
            UserCombatLog log = new UserCombatLog()
            {
                CombatLogID = Guid.NewGuid().ToString(),
                UserID = user.UserID,
                CityID = 0,
                PlotID = 0,
                NpcID = 0,
                CombatType = CombatType.User,
                HostileUser = toUser.UserID,
                IsWin = isWin,
                CombatProcess = JsonUtils.Serialize(combatProcessList),
                CreateDate = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();
            sender.Send(log);

            string prizeContent = string.Empty;
            MysteryHelper.IsTriggerMyStery(user, MysteryType.Jingjichang, out prizeContent);
            MysteryInfo mysteryInfo = new ConfigCacheSet<MysteryInfo>().FindKey(MysteryType.Jingjichang);
            if (!string.IsNullOrEmpty(prizeContent) && mysteryInfo != null)
            {
                var prompt = string.Empty;
                var broadcast = string.Empty;
                if (isWin)
                {
                    prompt = mysteryInfo.WinPrompt;
                    broadcast = mysteryInfo.WinBroadcast;
                }
                else
                {
                    prompt = mysteryInfo.Prompt;
                    broadcast = mysteryInfo.Broadcast;
                }
                sportsPrizeString = string.Format(prompt, toUser.NickName, prizeContent);
                string broadContent = string.Format(broadcast, toUser.NickName, prizeContent);
                var broadcastService = new TjxBroadcastService(null);
                var msg = broadcastService.Create(NoticeType.System, broadContent);
                broadcastService.Send(msg);
            }
            //sportsPrizeString = SportsPrizeHelper.DoPrize(user.UserID, isWin, toUser.NickName);
            //var userMail = new UserMail(Guid.NewGuid());
            var mailText = string.Format(LanguageManager.GetLang().SportsRankLetterForWin, user.NickName);

            if (isWin)
            {
                if (rankIndex > torankIndex)
                {
                    //SportsRankPrize(rankIndex, user, torankIndex);
                    //SportsRankPrize(torankIndex, toUser, rankIndex);
                    ranking.TryMove(rankIndex, torankIndex);
                    //user.RankID = torankIndex;
                    //user.RankDate = DateTime.Now;
                    //toUser.RankID = rankIndex;
                    //toUser.RankDate = DateTime.Now;
                    new GameDataCacheSet<GameUser>().UpdateSelf(user.PersonalId);
                    new GameDataCacheSet<GameUser>().UpdateSelf(toUser.PersonalId);
                    mailText = string.Format(LanguageManager.GetLang().SportsRankLetterForFailure, user.NickName, rankIndex);
                }
                else
                {
                    mailText = string.Format(LanguageManager.GetLang().SportsRankLetterForFailureRank, user.NickName, rankIndex);
                }
                UserHelper.SprostSystemChat(userRank, toUserRank);
                NoviceHelper.SportCombatFestival(user, winNum, userRank.VictoryNum);
            }
            userMail.Content = mailText;
            var userid = toUser.UserID.ToInt();
            userMail.ToUserID = userid;
            userMail.UserId = userid;
            userMail.MailType = (int)MailType.Fight;
            userMail.ToUserName = toUser.NickName;
            userMail.FromUserName = LanguageManager.GetLang().St_SystemMailTitle;
            userMail.FromUserId = LanguageManager.GetLang().SystemUserId;
            userMail.SendDate = DateTime.Now;
            userMail.Title = string.Empty;
            userMail.CounterattackUserID = user.UserID.ToInt();
            userMail.CombatProcess = JsonUtils.Serialize(combatProcessList);
            userMail.IsWin = isWin;
        }
示例#2
0
        public override bool TakeAction()
        {
            //List<UserQueue> queueArray = new PersonalCacheStruct<UserQueue>().FindAll(ContextUser.UserID, m => m.QueueType == QueueType.TianXianStrong);

            //if (queueArray.Count > 0)
            //{
            //    int codeDate = queueArray[0].DoRefresh();
            //    if (codeDate > 0)
            //    {
            //        ErrorCode = LanguageManager.GetLang().ErrorCode;
            //        ErrorInfo = LanguageManager.GetLang().St11002_Colding;
            //        return false;
            //    }
            //}

            UserExpedition userExpedition = new PersonalCacheStruct<UserExpedition>().FindKey(ContextUser.UserID);
            if (userExpedition != null && userExpedition.ExpeditionNum >= 10 && userExpedition.InsertDate.Date == DateTime.Now.Date)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St11002_ExpeditionFull;
                return false;
            }

            if (userExpedition != null && userExpedition.DoRefresh() > 0)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St11002_Colding;
                return false;
            }

            int sumGold = MathUtils.Addition((GetExpCodeTime(ContextUser.UserID) / 60), 1);
            if (isRemove == 1)
            {
                if (ContextUser.GoldNum < sumGold)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                    return false;
                }
                codeTime = 0;

                ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, sumGold);
            }
            else if (isRemove == 2)
            {
                codeTime = GetExpCodeTime(ContextUser.UserID);

                //if (queueArray.Count > 0)
                //{
                //    queueArray[0].ColdTime = codeTime;
                //    queueArray[0].TotalColdTime = codeTime;
                //    queueArray[0].Timing = DateTime.Now;
                //    //queueArray[0].Update();
                //}
                //else
                //{
                //    UserQueue queue = new UserQueue()
                //    {
                //        QueueID = Guid.NewGuid().ToString(),
                //        QueueType = QueueType.TianXianStrong,
                //        QueueName = QueueType.TianXianStrong.ToString(),
                //        UserID = ContextUser.UserID,
                //        ColdTime = codeTime,
                //        IsSuspend = false,
                //        TotalColdTime = codeTime,
                //        Timing = DateTime.Now,
                //    };
                //    new PersonalCacheStruct<UserQueue>().Add(queue, ContextUser.UserID.ToInt());
                //}
            }

            if (userExpedition == null)
            {
                userExpedition = new UserExpedition()
                 {
                     UserID = ContextUser.UserID,
                 };
                new PersonalCacheStruct<UserExpedition>().Add(userExpedition, ContextUser.UserID.ToInt());
            }
            if (DateTime.Now.Date == userExpedition.InsertDate.Date)
            {
                userExpedition.ExpeditionNum = MathUtils.Addition(userExpedition.ExpeditionNum, 1, int.MaxValue);
            }
            else
            {
                userExpedition.ExpeditionNum = 1;
            }
            userExpedition.CodeTime = codeTime;
            userExpedition.InsertDate = DateTime.Now;

            ExpeditionInfo expInfo = new ShareCacheStruct<ExpeditionInfo>().FindKey(questionID);
            if (expInfo != null)
            {
                if (answerID == 1)
                {
                    rewardShowArray = expInfo.RewardNum1.ToList();
                }
                else if (answerID == 2)
                {
                    rewardShowArray = expInfo.RewardNum2.ToList();
                }
                GuildMember member = new ShareCacheStruct<GuildMember>().FindKey(ContextUser.MercenariesID, ContextUser.UserID);

                foreach (RewardShow show in rewardShowArray)
                {
                    if (show.RewardType == RewardType.Obtion)
                    {
                        if (member != null)
                        {
                            GuildMemberLog.AddLog(member.GuildID, new MemberLog()
                                                                      {
                                                                          UserID = ContextUser.UserID,
                                                                          LogType = 1,
                                                                          IdolID = 0,
                                                                          GainObtion = show.RewardNum,
                                                                          GainAura = 0,
                                                                          Experience = show.RewardNum,
                                                                          InsertDate = DateTime.Now
                                                                      });
                            UserHelper.Contribution(ContextUser.UserID, show.RewardNum);
                        }
                        ContextUser.ObtainNum = MathUtils.Addition(ContextUser.ObtainNum, show.RewardNum, int.MaxValue);
                    }
                    else if (show.RewardType == RewardType.GameGoin)
                    {
                        ContextUser.GameCoin = MathUtils.Addition(ContextUser.GameCoin, (show.RewardNum * ContextUser.UserLv), int.MaxValue);
                    }
                    else if (show.RewardType == RewardType.ExpNum)
                    {
                        ContextUser.ExpNum = MathUtils.Addition(ContextUser.ExpNum, show.RewardNum, int.MaxValue);
                    }
                    else if (show.RewardType == RewardType.Experience)
                    {
                        UserHelper.UserGeneralExp(ContextUser.UserID, (show.RewardNum * ContextUser.UserLv));
                    }
                    else if (show.RewardType == RewardType.EnergyNum)
                    {
                        ContextUser.EnergyNum = MathUtils.Addition(ContextUser.EnergyNum, (short)show.RewardNum, short.MaxValue);
                    }
                    else if (show.RewardType == RewardType.Gold)
                    {
                        ContextUser.GiftGold = MathUtils.Addition(ContextUser.GiftGold, show.RewardNum, int.MaxValue);
                    }
                }
                string prizeContent = string.Empty;
                MysteryHelper.IsTriggerMyStery(ContextUser, MysteryType.Meiritanxian, out prizeContent);
                MysteryInfo mysteryInfo = new ShareCacheStruct<MysteryInfo>().FindKey(MysteryType.Meiritanxian);
                if (!string.IsNullOrEmpty(prizeContent) && mysteryInfo != null)
                {
                    string prompt = string.Format(mysteryInfo.Prompt, prizeContent);
                    string broadContent = string.Format(mysteryInfo.Broadcast, ContextUser.NickName, prizeContent);
                    var broadcastService = new TjxBroadcastService(null);
                    var msg = broadcastService.Create(NoticeType.System, broadContent);
                    broadcastService.Send(msg);
                    ErrorCode = 1;
                    ErrorInfo = prompt;
                }
            }
            return true;
        }
示例#3
0
        public void SendNotice(GameNotice notice, bool isRemove)
        {
            try
            {
                var cacheSet = new ShareCacheStruct<GameNotice>();
                GameNotice gameNotice = cacheSet.FindKey(notice.NoticeID);
                if (isRemove)
                {
                    if (gameNotice != null)
                    {
                        cacheSet.Delete(gameNotice);
                    }
                }
                else
                {
                    if (gameNotice == null)
                    {
                        gameNotice = new GameNotice();
                        gameNotice.NoticeID = Guid.NewGuid().ToString();
                        cacheSet.Add(gameNotice);
                        gameNotice = cacheSet.FindKey(gameNotice.NoticeID);
                    }
                    gameNotice.Title = notice.Title;
                    gameNotice.Content = notice.Content;
                    gameNotice.ExpiryDate = notice.ExpiryDate;
                    gameNotice.IsTop = notice.IsTop;
                    gameNotice.IsBroadcast = notice.IsBroadcast;
                    gameNotice.Creater = notice.Creater;
                    gameNotice.CreateDate = notice.CreateDate;
                    gameNotice.NoticeType = notice.NoticeType;
                    if (gameNotice.IsBroadcast)
                    {
                        var broadcastService = new TjxBroadcastService(null);
                        var msg = broadcastService.Create(NoticeType.System, gameNotice.Content);
                        broadcastService.Send(msg);
                    }

                }
            }
            catch (Exception ex)
            {
                new BaseLog().SaveLog("保存公告出错:", ex);
                throw;
            }
        }
示例#4
0
        private static void LoadData(GameActive gameActive)
        {
            if ((gameActive.CombatStatus == CombatStatus.Wait || gameActive.CombatStatus == CombatStatus.Combat) && !gameActive.LoadSuccess)
            {
                if (!string.IsNullOrEmpty(gameActive.Broadcast))
                {
                    var broadcastService = new TjxBroadcastService(null);
                    var msg = broadcastService.Create(NoticeType.Game, gameActive.Broadcast);

                    if (gameActive.ActiveId == 11)
                    {
                        int invertal = (int)new TimeSpan(0, 0, gameActive.WaitMinutes, 0).TotalSeconds / 5;
                        string startTime = DateTime.Now.ToString("HH:mm:ss");
                        string endTime = DateTime.Now.AddMinutes(gameActive.WaitMinutes).ToString("HH:mm:ss");
                        broadcastService.SendTimer(msg, startTime, endTime, true, invertal);//秒
                    }
                    else
                    {
                        broadcastService.Send(msg);
                    }

                }
                gameActive.LoadSuccess = true;
                if (gameActive.ActiveType == FunctionEnum.Booszhang)
                {
                    BossCombat.InitBoss(gameActive);
                }
                else if (gameActive.ActiveType == FunctionEnum.Lintuzhang)
                {
                    CountryCombat.Init(gameActive);
                }
                else if (gameActive.ActiveType == FunctionEnum.Multiplot)
                {
                    PlotTeamCombat.Init(gameActive);
                }
                else if (gameActive.ActiveType == FunctionEnum.MorePlotCoin)
                {
                    PlotTeamCombat.Init(gameActive);
                }
                else if (gameActive.ActiveType == FunctionEnum.MorePlotEnergy)
                {
                    PlotTeamCombat.Init(gameActive);
                }
            }
        }