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