//request general users data
        async Task UpdateUsersData()
        {
            var logProperties = new Dictionary <string, object>
            {
                { "threadId", Thread.CurrentThread }
            };

            LogService.Debug("Starting user data update tasks", logProperties);

            List <Task> updateTasks    = new List <Task>();
            int         requestTimeout = AppConfigurationService.DefaultRequestTimeout;

            foreach (var user in UserMatchData)
            {
                //update primary/secondary ELO
                LogService.Trace($"Starting user data update: for user id: {user.UserGameProfileId} user data ladder source: {Ladders.RandomMap}, operation timeout: {requestTimeout}");

                var userDataUpdateTask = UserRankService.GetUserDataFromLadder(user.UserGameProfileId, Ladders.RandomMap, requestTimeout);

                updateTasks.Add(
                    userDataUpdateTask.ContinueWith(
                        //t => HandleUserRankUpdated(userDataUpdateTask, Ladders.RandomMap, user.UserGameProfileId)
                        t => HandleUserDataUpadted(userDataUpdateTask, user.UserGameProfileId)
                        )
                    );
            }

            await Task.WhenAll(updateTasks);

            LogService.Trace("All data updates has been completed", logProperties);
        }
Esempio n. 2
0
        private void RewardAndPunishmentUser_After(IUser sender, RewardAndPunishmentUserEventArgs eventArgs)
        {
            PointSettings pointSettings = pointSettingsManger.Get();
            int           totalPoints   = pointSettings.CalculateIntegratedPoint(sender.ExperiencePoints, sender.ReputationPoints);

            //更新用户等级
            //if (eventArgs.ExperiencePoints <= 0 && eventArgs.ReputationPoints <= 0)
            //    return;
            IUserService               userService     = DIContainer.Resolve <IUserService>();
            UserRankService            userRankService = new UserRankService();
            SortedList <int, UserRank> userRanks       = userRankService.GetAll();
            UserRank maxUserRank = null;

            if (userRanks != null && userRanks.Count > 0)
            {
                maxUserRank = userRanks.First().Value;
            }
            foreach (KeyValuePair <int, UserRank> userRank in userRanks)
            {
                if (totalPoints > userRank.Value.PointLower && userRank.Value.PointLower > maxUserRank.PointLower)
                {
                    maxUserRank = userRank.Value;
                }
            }
            userService.UpdateRank(sender.UserId, maxUserRank.Rank);

            //自动解除管制
            var user = userService.GetFullUser(sender.UserId);

            if (user.IsModerated && !user.IsForceModerated)
            {
                UserSettings userSettings = userSettingsManager.Get();
                if (totalPoints > userSettings.NoModeratedUserPoint)
                {
                    userService.NoModeratedUser(user.UserId);
                }
            }

            //发送通知
            if (sender == null)
            {
                return;
            }
            Notice notice = Notice.New();

            notice.UserId        = sender.UserId;
            notice.ApplicationId = 0;
            notice.TypeId        = NoticeTypeIds.Instance().Hint();
            if (eventArgs.ExperiencePoints < 0 || eventArgs.ReputationPoints < 0 || eventArgs.TradePoints < 0)
            {
                notice.Body = "您被系统扣除经验:" + -eventArgs.ExperiencePoints + "、威望:" + -eventArgs.ReputationPoints + "、金币:" + -eventArgs.TradePoints;
            }
            else
            {
                notice.Body = "您收到系统奖励经验:" + eventArgs.ExperiencePoints + "、威望:" + eventArgs.ReputationPoints + "、金币:" + eventArgs.TradePoints;
            }
            notice.LeadingActorUrl = SiteUrls.FullUrl(SiteUrls.Instance().ListNotices(sender.UserName, null, null));
            noticeService.Create(notice);
        }
Esempio n. 3
0
        public ActionResult UserBase()
        {
            var user = new UserService().GetUserBase(SessionTools.UserID);

            ViewBag.User = JsonHelper.SerializeObject(user);

            var rankList = new UserRankService().GetRankList(SessionTools.UserID);

            ViewBag.RankList = JsonHelper.SerializeObject(rankList);

            return(View());
        }
Esempio n. 4
0
        /// <summary>
        /// 生成用户等级图标
        /// </summary>
        public static MvcHtmlString UserRankIcon(this HtmlHelper htmlHelper, int rank)
        {
            TagBuilder    spanBuilder;
            TagBuilder    imgBuilder;
            StringBuilder builder   = new StringBuilder();
            int           remainder = rank;

            string[] ranksImages = new string[] {
                "~/Themes/Shared/Styles/icons/star.gif",
                "~/Themes/Shared/Styles/icons/moon.gif",
                "~/Themes/Shared/Styles/icons/sun.gif"
            };

            for (int k = ranksImages.Length - 1; k >= 0; k--)
            {
                int resultCount = remainder / GetRankNum(k);
                remainder = remainder % GetRankNum(k);
                for (int i = 0; i < resultCount; i++)
                {
                    spanBuilder = new TagBuilder("span");
                    imgBuilder  = new TagBuilder("img");
                    imgBuilder.MergeAttribute("src", WebUtility.ResolveUrl(ranksImages[k]));
                    spanBuilder.InnerHtml += imgBuilder.ToString();
                    builder.Append(spanBuilder.ToString());
                }
                if (remainder == 0)
                {
                    break;
                }
            }

            UserRank userRank = new UserRankService().Get(rank);
            string   rankName = "";

            if (userRank != null)
            {
                rankName = userRank.RankName;
            }
            spanBuilder = new TagBuilder("span");
            if (!string.IsNullOrEmpty(rankName))
            {
                spanBuilder.MergeAttribute("title", rankName);
            }
            spanBuilder.InnerHtml = builder.ToString();
            builder = new StringBuilder(spanBuilder.ToString());
            return(MvcHtmlString.Create(builder.ToString()));
        }
Esempio n. 5
0
        /// <summary>
        /// 更改用户积分
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="eventArgs"></param>
        void ChangePointsEventModule_After(IUser sender, ChangePointsEventArgs eventArgs)
        {
            if (eventArgs.ExperiencePoints <= 0 && eventArgs.ReputationPoints <= 0)
            {
                return;
            }

            IUserService userService = DIContainer.Resolve <IUserService>();

            //自动升级
            UserRankService            userRankService = new UserRankService();
            SortedList <int, UserRank> userRanks       = userRankService.GetAll();
            UserRank maxUserRank = null;

            if (userRanks != null && userRanks.Count > 0)
            {
                maxUserRank = userRanks.ElementAt(0).Value;
            }
            IPointSettingsManager pointSettingsManger = DIContainer.Resolve <IPointSettingsManager>();
            PointSettings         pointSettings       = pointSettingsManger.Get();
            int totalPoints = pointSettings.CalculateIntegratedPoint(sender.ExperiencePoints, sender.ReputationPoints);

            foreach (KeyValuePair <int, UserRank> userRank in userRanks)
            {
                if (totalPoints > userRank.Value.PointLower && userRank.Value.PointLower > maxUserRank.PointLower)
                {
                    maxUserRank = userRank.Value;
                }
            }
            if (maxUserRank.Rank > sender.Rank)
            {
                userService.UpdateRank(sender.UserId, maxUserRank.Rank);
            }

            //自动解除管制
            var user = userService.GetFullUser(sender.UserId);

            if (user.IsModerated && !user.IsForceModerated)
            {
                UserSettings userSettings = DIContainer.Resolve <IUserSettingsManager>().Get();
                if (totalPoints > userSettings.NoModeratedUserPoint)
                {
                    userService.NoModeratedUser(user.UserId);
                }
            }
        }
Esempio n. 6
0
        public ActionResult SubmitScore(string OrderID, string Score)
        {
            var resultData = new UserRankService().SubmitScore(OrderID, Score, SessionTools.UserID);

            return(Content(JsonHelper.SerializeObject(resultData)));
        }
        async Task UpdateUsersRank()
        {
            var logProperties = new Dictionary <string, object>
            {
                { "threadId", Thread.CurrentThread }
            };

            LogService.Debug("Starting user rank update tasks", logProperties);

            List <Task> updateTasks = new List <Task>();

            Ladders userRankModeToUpadte = Ladders.RandomMap;

            switch (matchType)
            {
            //if game is 1v1 then all data is processed from match request, so we don't have to update anything
            case MatchType.RandomMap:
                LogService.Debug("Skiping update", logProperties);
                return;

            case MatchType.Deathmatch:
                LogService.Debug("skiping update", logProperties);
                return;

            //update 1v1 ratings for team matches
            case MatchType.TeamdeathMatch:
                userRankModeToUpadte = Ladders.Deathmatch;
                break;

            case MatchType.TeamRandomMap:
                userRankModeToUpadte = Ladders.RandomMap;
                break;

            //update 1v1
            case MatchType.Unranked:
                userRankModeToUpadte = Ladders.RandomMap;
                break;

            //if match is custom game (any unraked, includes all "quick match" types) then use Random map rating (most reliable type across rating types)
            default:
                //userRankModeToUpadte = UserRankMode.RandomMap;
                break;
            }

            int userELOUpdateTimeout = AppConfigurationService.DefaultRequestTimeout;

            foreach (var user in UserMatchData)
            {
                //update primary/secondary ELO
                LogService.Info($"Starting user ELO update: for user id: {user.UserGameProfileId} user rank mode to update: {userRankModeToUpadte}, operation timeout: {userELOUpdateTimeout}");

                var userDataUpdateTask = UserRankService.GetUserRankFromLadder(user.UserGameProfileId, userRankModeToUpadte, userELOUpdateTimeout);

                updateTasks.Add(
                    userDataUpdateTask.ContinueWith(
                        t => HandleUserRankUpdated(userDataUpdateTask, userRankModeToUpadte, user.UserGameProfileId)
                        )
                    );
            }

            await Task.WhenAll(updateTasks);

            LogService.Trace("All rank updates has been completed", logProperties);
        }