示例#1
0
        public void SendExpMultiplierEventAsync(int multiplier, string message, DateTime?startTime, DateTime endTime)
        {
            var start       = startTime ?? DateTime.UtcNow;
            var activeEvent = gameData.GetActiveExpMultiplierEvent();

            if (activeEvent != null)
            {
                if (activeEvent.StartedByPlayer && activeEvent.Multiplier >= multiplier)
                {
                    return;
                }

                if (start < activeEvent.EndTime)
                {
                    activeEvent.EndTime = start;
                }
            }
            var ev = new ExpMultiplierEvent();

            ev.Id         = Guid.NewGuid();
            ev.EventName  = message;
            ev.Multiplier = multiplier;
            ev.StartTime  = start;
            ev.EndTime    = endTime;
            gameData.Add(ev);
        }
示例#2
0
        public bool IncreaseGlobalExpMultiplier(User user, int usageCount)
        {
            var activeEvent = gameData.GetActiveExpMultiplierEvent();

            if (activeEvent != null && !activeEvent.StartedByPlayer)
            {
                return(false);
            }
            if (activeEvent == null)
            {
                var endTime = DateTime.UtcNow.AddMinutes(ExpMultiplierStartTimeMinutes);

                if (usageCount > 1)
                {
                    endTime = usageCount >= MaxExpMultiplier - 1
                        ? endTime.AddMinutes(ExpMultiplierLastTimeMinutes + ((MaxExpMultiplier - 2) * ExpMultiplierMinutesPerScroll))
                        : endTime.AddMinutes(usageCount * ExpMultiplierMinutesPerScroll);
                }

                activeEvent = new ExpMultiplierEvent
                {
                    Id              = Guid.NewGuid(),
                    Multiplier      = usageCount + 1,
                    StartedByPlayer = true,
                    EventName       = user.UserName,
                    StartTime       = DateTime.UtcNow,
                    EndTime         = endTime
                };
                gameData.Add(activeEvent);
            }
            else
            {
                var endTime = activeEvent.EndTime;
                activeEvent.Multiplier += usageCount;

                var timeCount = usageCount;
                if (activeEvent.Multiplier >= MaxExpMultiplier)
                {
                    endTime = endTime.AddMinutes(ExpMultiplierLastTimeMinutes);
                    timeCount--;
                }

                if (timeCount > 0)
                {
                    endTime = endTime.AddMinutes(timeCount * ExpMultiplierMinutesPerScroll);
                }

                activeEvent.EndTime = endTime;
            }

            activeEvent.EventName = user.UserName;
            return(true);
        }