public FeedSettingsInfo(IDictionary <string, string> kv) { if (kv.ContainsKey(PersonSetting.FEED_START_DATE)) { FromDate = DateTimeTools.ParseExactNullable(kv[PersonSetting.FEED_START_DATE]); } if (kv.ContainsKey(PersonSetting.FEED_END_DATE)) { ToDate = DateTimeTools.ParseExactNullable(kv[PersonSetting.FEED_END_DATE]); } if (kv.ContainsKey(PersonSetting.FEED_GRADING_PERIOD_ID) && !string.IsNullOrWhiteSpace(kv[PersonSetting.FEED_GRADING_PERIOD_ID])) { GradingPeriodId = int.Parse(kv[PersonSetting.FEED_GRADING_PERIOD_ID]); } if (kv.ContainsKey(PersonSetting.FEED_ANNOUNCEMENT_TYPE) && !string.IsNullOrWhiteSpace(kv[PersonSetting.FEED_ANNOUNCEMENT_TYPE])) { AnnouncementType = int.Parse(kv[PersonSetting.FEED_ANNOUNCEMENT_TYPE]); } if (kv.ContainsKey(PersonSetting.FEED_SORTING) && !string.IsNullOrWhiteSpace(kv[PersonSetting.FEED_SORTING])) { SortType = int.Parse(kv[PersonSetting.FEED_SORTING]); } AnyDate = !GradingPeriodId.HasValue && !FromDate.HasValue && !ToDate.HasValue; }
public void GetDayEndTest() { DateTime expected = new DateTime(1999, 12, 31, 23, 59, 59); DateTime test = new DateTime(1999, 12, 31, 14, 54, 57); Assert.AreEqual(expected, DateTimeTools.GetDayEnd(test)); }
public void GetHourBeginningTest() { DateTime expected = new DateTime(2005, 6, 3, 10, 0, 0); DateTime test = new DateTime(2005, 6, 3, 10, 45, 36); Assert.AreEqual(expected, DateTimeTools.GetHourBeginning(test)); }
public void ValidateDateTimeStringToFail_1() { // Should fail due to valid datetime issues. var ex = Assert.Throws <FormatException>(() => DateTimeTools.ValidateDateTimeString("1985-11-32 22:26:38")); Assert.IsTrue(ex.Message.Contains("Invalid SQL DateTime Format When Parsing.")); }
public void GetHourEndTest() { DateTime expected = new DateTime(2005, 6, 3, 10, 59, 59); DateTime test = new DateTime(2005, 6, 3, 10, 45, 36); Assert.AreEqual(expected, DateTimeTools.GetHourEnd(test)); }
public static DateTime hoursLater(DateTime date, double h) { long unixEpoch = DateTimeTools.ToUnixTime(date); double newUnixEpoch = unixEpoch + h * dayMs / 24; return(DateTimeTools.FromUnixTime((long)newUnixEpoch)); }
public void GetDayBeginningTest() { DateTime expected = new DateTime(1999, 12, 31, 0, 0, 0); DateTime test = new DateTime(1999, 12, 31, 14, 54, 57); Assert.AreEqual(expected, DateTimeTools.GetDayBeginning(test)); }
IScalableDataManager CreateRandomDataManager(int trynumber = 0) { //В зависимости от типа мэнеджера должен выбираться нужный тайм-фрейм Period[] values = { /* Period.Minute, */ Period.Hour, Period.Day }; Period randomValue = values[UnityEngine.Random.Range(0, values.Length)]; int[] availablePeriodSizes; switch (randomValue) { case Period.Minute: { availablePeriodSizes = new int[] { 1, 5 }; // { 1, 5 ,10,15,20,30}; } break; case Period.Hour: { availablePeriodSizes = new int[] { 1, 3, 4 }; //{ 1, 3, 4, 6, 12 }; } break; case Period.Day: { availablePeriodSizes = new int[] { 1, 3 }; } break; default: { throw new ArgumentOutOfRangeException("Enum присвоено не верное значение"); } } int periodSize = availablePeriodSizes[UnityEngine.Random.Range(0, availablePeriodSizes.Length)]; int randAssetId = UnityEngine.Random.Range(0, assets.Length); /*//////////////////////////// * //Для теста рабочей области// * ////////////////////////////// * randomValue = Period.Minute; * periodSize = 1; * //*/ TimeFrame timeFrame = new TimeFrame(randomValue, periodSize); //TODO: Здесь должен быть случайный выбор из любых доступных менеджеров IScalableDataManager dm = new CryptoCompareDataManager(timeFrame, assets[randAssetId].base_currency, assets[randAssetId].reciprocal_currency, assets[randAssetId].exchange); int fluctuations = DateTimeTools.CountFramesInPeriod(dm.TFrame, dm.DataBeginTime, dm.DataEndTime, TimeSpan.Zero); if (fluctuations < MIN_FLUCTUATIONS_AMOUNT && trynumber < 10) { Debug.Log("Недостаточное количество свечей пробуем загрузить другой"); dm = CreateRandomDataManager(trynumber++); } if (trynumber > 10) { Debug.LogError("Не удалось загрузить подходящий условиям график"); return(null); } return(dm); }
public void LoadGame(Mode mode = Mode.Simple) { gameMode = mode; switch (gameMode) { case Mode.Simple: { //Создаём отрисовщик графика chartDataManager = CreateRandomDataManager(); //Задаём рандомную временнУю область игры. Некоторое количество свечей предыстории, некоторое количество свечей на игру int fluctuationCount = DateTimeTools.CountFramesInPeriod(chartDataManager.TFrame, chartDataManager.DataBeginTime, chartDataManager.DataEndTime, TimeSpan.Zero); SetRandomGameTime(fluctuationCount); chartDataManager.SetWorkDataRange(fluctuation1ID, fluctuationsCountToLoad); } break; default: { Debug.LogError("Не создан сценарий для данного мода"); } break; } //задаём систему координат coordGrid = new CoordinateGrid(chartDataManager.WorkBeginTime, chartDataManager.TFrame); chartDrawer.ReloadData(); chartDrawer.ChartDataManager = chartDataManager; chartDrawer.CoordGrid = coordGrid; chartDrawer.CalculateMovingAverage(0, gamePrefs.Fast_ma_length); chartDrawer.CalculateMovingAverage(1, gamePrefs.Slow_ma_length); coordGrid.OnScaleChange += chartDrawer.UpdateInNextFrame; //Передаём ссылки на необходимые классы контроллеру навигации на графике NavigationController.Instance.ChartDataManager = chartDataManager; NavigationController.Instance.CoordGrid = coordGrid; NavigationController.Instance.Initialize(); PlayerManager.Instance.InitializeData(chartDataManager); PlayerManager.Instance.TradeIsClosed += ClosedTradeEffect; PlayerManager.Instance.TradeIsOpened += (price, position) => { current_price = (double)price; }; UpdatePlayersInfoFields(); chartDataManager.WorkFlowChanged += () => { chartDrawer.UpdateMovingAverage(0, gamePrefs.Fast_ma_length); }; chartDataManager.WorkFlowChanged += () => { chartDrawer.UpdateMovingAverage(1, gamePrefs.Slow_ma_length); }; gamePrefs.FastMALengthChanged += (x) => { chartDrawer.CalculateMovingAverage(0, x); }; gamePrefs.SlowMALengthChanged += (x) => { chartDrawer.CalculateMovingAverage(1, x); }; GameButtonsSetActive(true); chartInterface.InterfaceSetActive(true); }
public string GetReportName(Transaction transaction) { int monthNumber = transaction.TransactionDate.Month; string monthName = DateTimeTools.GetMonthName(monthNumber).GetWithNoPolishLetters(); int year = transaction.TransactionDate.Year; string sheetName = string.Format("{0} {1}", monthName, year); return(sheetName); }
public List <DatabasePerHourStat> CalculateHourlyAverages(List <DateTime> hoursToCalulate) { List <DatabasePerHourStat> perHourStats = new List <DatabasePerHourStat>(); DatabasePerHourStat hourStat = null; List <DatabasePerSecondStat> tempAllSecondsInHour = null; int minPeopleInHour = -1; int maxPeopleInHour = -1; int tempSum = 0; foreach (DateTime hour in hoursToCalulate) { tempAllSecondsInHour = _dbQueryService.GetAllSecondsForHour(hour); if (tempAllSecondsInHour.Count != 3600) { // Write to log that this hour is missing PerSecondStats. return(null); } minPeopleInHour = tempAllSecondsInHour.First().NumDetectedObjects; maxPeopleInHour = tempAllSecondsInHour.First().NumDetectedObjects; tempSum = 0; // Calculate average, min and max. Create DatabasePerHourStat. foreach (DatabasePerSecondStat second in tempAllSecondsInHour) { tempSum += second.NumDetectedObjects; if (second.NumDetectedObjects < minPeopleInHour) { minPeopleInHour = second.NumDetectedObjects; } if (second.NumDetectedObjects > maxPeopleInHour) { maxPeopleInHour = second.NumDetectedObjects; } } hourStat = new DatabasePerHourStat { Day = DateTimeTools.GetHourBeginning(hour), Hour = hour.Hour, AverageDetectedObjects = (tempSum / tempAllSecondsInHour.Count), MaximumDetectedObjects = maxPeopleInHour, MinimumDetectedObjects = minPeopleInHour }; perHourStats.Add(hourStat); } return(perHourStats); }
/// <summary> /// Checks the validity of the attributes of the PerSecondStat object. /// </summary> /// <returns>Boolean indicating if the PerSecondStat object is valid.</returns> public bool isValidSecondStat() { if (NumTrackedPeople < 0 || DateTime.CheckIfSQLFormat() == false) { return(false); } DateTime toValidate = MySqlDateTimeConverter.ToDateTime(DateTime); return(DateTimeTools.ValidateDateTime(toValidate)); }
public void GetDaysBetween_SameDateNonHoliday() { var curYear = DateTime.Now.Year; var startDate = new DateTime(curYear, 1, 4); var endDate = new DateTime(curYear, 1, 4); Assert.AreEqual(DateTimeTools.GetDaysBetween(startDate, endDate, GetDaysReturnType.BusinessDaysExcludeHolidays), 0); Assert.AreEqual(DateTimeTools.GetDaysBetween(startDate, endDate), 0); }
public void GetDaysBetween_OneDayWithoutBankHoliday() { var curYear = DateTime.Now.Year; var startDate = new DateTime(curYear, 1, 2); var endDate = new DateTime(curYear, 1, 3); Assert.AreEqual(DateTimeTools.GetDaysBetween(startDate, endDate, GetDaysReturnType.BusinessDaysExcludeHolidays), 1); Assert.AreEqual(DateTimeTools.GetDaysBetween(startDate, endDate), 1); }
public void GetDaysBetween_HalfYearLateHalf() { var curYear = DateTime.Now.Year; var startDate = new DateTime(curYear, 6, 1); var endDate = new DateTime(curYear, 12, 31); Assert.AreEqual(DateTimeTools.GetDaysBetween(startDate, endDate, GetDaysReturnType.BusinessDaysExcludeHolidays), 145); Assert.AreEqual(DateTimeTools.GetDaysBetween(startDate, endDate), 213); }
public void GetDaysBetween_FullYear() { var curYear = DateTime.Now.Year; var startDate = new DateTime(curYear, 1, 1); var endDate = new DateTime(curYear, 12, 31); Assert.AreEqual(DateTimeTools.GetDaysBetween(startDate, endDate, GetDaysReturnType.BusinessDaysExcludeHolidays), 250); Assert.AreEqual(DateTimeTools.GetDaysBetween(startDate, endDate), 364); }
protected CurrentPersonViewData(PersonDetails person, District district, School school, SchoolYear schoolYear, IList <ClaimInfo> claimInfos) : base(person) { CurrentSchoolYearId = schoolYear.Id; CurrentSchoolYearName = schoolYear.Name; SchoolLocalId = school.LocalId; SchoolName = school.Name; DistrictId = district.Id; DistrictTimeZone = DateTimeTools.WindowsToIana(district.TimeZone); DistrictName = district.Name; StateCode = district.StateCode; Email = person.Email; Claims = PersonClaimViewData.Create(claimInfos); }
private IEnumerable <DateTime> GetVisibleDatesList() { //Вычисляем точки на временнОй сетке и отрисовываем их DateTime dt0 = CoordGrid.FromXAxisToDate(worldPointInLeftDownCorner.x); DateTime dt1 = CoordGrid.FromXAxisToDate(worldPointInRightUpCorner.x); if (CoordGrid is CoordinateGrid) { dt0 = (CoordGrid as CoordinateGrid).DateCorrection(dt0, dt1); } IEnumerable <DateTime> dateList = DateTimeTools.DividePeriodByKeyPoints(dt0, dt1, dateTextPool.FieldsAmount); return(dateList); }
public ROIDocumentCalculations(ROIDocument roiDocument) { RoiDocument = roiDocument; WorkHoursInADay = 8; var curYear = DateTime.Now.Year; var startDate = new DateTime(curYear, 1, 1); var endDate = new DateTime(curYear, 12, 31); WorkDaysInAYear = DateTimeTools.GetDaysBetween(startDate, endDate, GetDaysReturnType.BusinessDaysExcludeHolidays); WorkDaysInAMonth = (double)WorkDaysInAYear / 12; WorkDaysInAWeek = 5; //Keep is simple, no compensation for holidays }
public FeedReportSettingsInfo(IDictionary <string, string> keyValue) { if (keyValue.ContainsKey(PersonSetting.FEED_REPORT_START_DATE)) { StartDate = DateTimeTools.ParseExactNullable(keyValue[PersonSetting.FEED_REPORT_START_DATE]); } if (keyValue.ContainsKey(PersonSetting.FEED_REPORT_END_DATE)) { EndDate = DateTimeTools.ParseExactNullable(keyValue[PersonSetting.FEED_REPORT_END_DATE]); } IncludeDetails = GetBoolFromDictionary(PersonSetting.FEED_REPORT_INCLUDE_DETAILS, keyValue); IncludeAttachments = GetBoolFromDictionary(PersonSetting.FEED_REPORT_INCLUDE_ATTACHMENTS, keyValue); IncludeHiddenAttributes = GetBoolFromDictionary(PersonSetting.FEED_REPORT_INCLUDE_HIDDEN_ATTRIBUTES, keyValue); IncludeHiddenActivities = GetBoolFromDictionary(PersonSetting.FEED_REPORT_INCLUDE_HIDDEN_ACTIVITIES, keyValue); LessonPlanOnly = GetBoolFromDictionary(PersonSetting.FEED_REPORT_LP_ONLY, keyValue); GroupByStandards = GetBoolFromDictionary(PersonSetting.FEED_REPORT_GROUP_BY_STANDARDS, keyValue); }
/// <summary> /// 寫入 後台使用者操作 Log 紀錄 /// </summary> /// <param name="requestModel"></param> /// <returns></returns> public APIReturn AddAdminLog(AdminLog requestModel) { var rtnMessage = ""; var res = new APIReturn(APIReturnCode.Fail, rtnMessage); try { //找出該 操作人員 var admin = db.TblAdmin.Find(requestModel.Operator); //如果有找到 if (admin?.Id != null) { var log = new TblOperationLog() { Operator = admin.Id, Type = requestModel.Type, Code = requestModel.Code, Name = requestModel.Name, Remark = requestModel.Remark, Parameter = requestModel.Parameter, Ip = requestModel.Ip, RequestTime = DateTimeTools.Now(), }; db.TblOperationLog.Add(log); db.SaveChanges(); res = new APIReturn(APIReturnCode.Success, "後台 Log 寫入成功"); } else { res = new APIReturn(APIReturnCode.Fail, "無該使用者"); } return(res); } catch (Exception ex) { res = new APIReturn(APIReturnCode.Exception, ex); return(res); } }
/// <summary> /// 监听开奖是否达到指定期数未出现同号 例如100期开出1 号 101期开出 1号 就是开出跟上一期一样号码 就会自动开始启动 /// </summary> /// <returns></returns> public override OpenNext GetNextOpenModel(string cateNo = "") { try { HttpItem item = new HttpItem() { URL = base.Url + "/member/period?lottery=" + cateNo, Method = "GET", Host = GetHost(Url), UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0", Cookie = base.Cookie, Accept = "*/*", ContentType = "application/json;charset=UTF-8" }; item.Header.Add("X-Requested-With", "XMLHttpRequest"); var res = helper.GetHtml(item); if (res.Html == "") { return(null); } //{"closeTime":1555557445000,"currentTime":1555557368000,"drawDate":1555516800000,"drawNumber":"20580085","drawTime":1555557540000,"openTime":1555557240000,"pnumber":"20580084","status":1} var j = JObject.Parse(res.Html); var closeTime = j["closeTime"].ToString(); var currentTime = j["currentTime"].ToString(); var openTime = j["openTime"].ToString(); var expectNo = j["drawNumber"].ToString(); var pnumber = j["pnumber"].ToString(); Config.CurrentTime = DateTimeTools.GetTime(currentTime, false); //赋值当前时间 var model = new OpenNext() { NextCloseTime = DateTimeTools.GetTime(closeTime, false), NextExpectNo = expectNo, NextOpenTime = DateTimeTools.GetTime(openTime, false), CurrTime = Config.CurrentTime, CurrExpectNo = pnumber }; return(model); } catch (Exception ee) { return(null); } }
// Before processing a request for a DataMessage with all PerSecondStat objects within a TimeInterval, this method is used to validate the received TimeInterval. public bool CheckTimeIntervalValidity(TimeInterval timeInterval) { if (timeInterval.StartDateTime.CheckIfSQLFormat() == false || timeInterval.EndDateTime.CheckIfSQLFormat() == false) { return(false); } DateTime start = timeInterval.StartDateTime.ToDateTime(); DateTime end = timeInterval.EndDateTime.ToDateTime(); if (DateTimeTools.ValidateDateTime(start) == false || DateTimeTools.ValidateDateTime(end) == false) { return(false); } // The start time must be before the end time or the start time must be identical to the end time. if (DateTime.Compare(start, end) > 0) { return(false); } return(true); }
public void DrawVolume(Rect camRect) { if (!IsSettingsSet) { return; } float worldRealToScreen = (CoordGrid.FromDateToXAxis(visibleEndDate) - CoordGrid.FromDateToXAxis(visibleStartDate)) / (worldPointInRightUpCorner.x - worldPointInLeftDownCorner.x); int count = DateTimeTools.CountFramesInPeriod(chartDataManager.TFrame, visibleStartDate, visibleEndDate, TimeSpan.Zero); float pixelLenghtFrame = camRect.width * worldRealToScreen / count; float maxVolume = (float)visibleFluctuations.Max(x => x.Volume); //Если свечка видна только частично, то необходимо смещать отрисовку объёма на равную долю видимости float diff = (worldPointInLeftDownCorner.x - CoordGrid.FromDateToXAxis(visibleStartDate)) * camRect.width / (worldPointInRightUpCorner.x - worldPointInLeftDownCorner.x); Vector2 barLeftDownCorner = camRect.min - new Vector2(diff + pixelLenghtFrame / 2, 0); Vector2 barRightUpCorner; Vector2 bordersOffset = new Vector2((20 / count < 1 ? 1 : 20 / count), 0); if (chartDataManager.WorkBeginTime > visibleStartDate) { int shift = DateTimeTools.CountFramesInPeriod(chartDataManager.TFrame, visibleStartDate, chartDataManager.WorkBeginTime, TimeSpan.Zero); barLeftDownCorner += new Vector2(shift * pixelLenghtFrame, 0); } foreach (var fluctuation in visibleFluctuations) { float pixelHeightFrame = (float)fluctuation.Volume / maxVolume * camRect.height; barRightUpCorner = barLeftDownCorner + new Vector2(pixelLenghtFrame, pixelHeightFrame); DrawTools.DrawRectangle(barLeftDownCorner + bordersOffset, barRightUpCorner - bordersOffset, fluctuation.Close - fluctuation.Open > 0 ? volumeUpColor : volumeDownColor); barLeftDownCorner = new Vector2(barRightUpCorner.x, camRect.min.y); } }
public static void ExcelSave(ExportType exportType, EncounterBase data, TeraData teraData) { if ((exportType & (ExportType.Excel | ExportType.ExcelTemp)) == 0) { return; } lock (Savelock) //can't save 2 excel files at one time { NpcInfo boss = teraData.NpcDatabase.GetOrPlaceholder(ushort.Parse(data.areaId), uint.Parse(data.bossId)); var dir = Path.Combine( exportType.HasFlag(ExportType.Excel)//if regular export, save in documents, otherwise temp ? SettingsHelper.Instance.GetDocumentsPath() : SettingsHelper.Instance.GetTempFolderPath(), $"exports/{boss.Area.Replace(":", "-")}"); Directory.CreateDirectory(dir); var fname = Path.Combine(dir, $"{boss.Name.Replace(":", "-")} {DateTimeTools.UnixTimeStampToDateTime(data.encounterUnixEpoch).ToString("yyyy-MM-dd HH-mm-ss", CultureInfo.InvariantCulture)}.xlsx"); FileInfo file = new FileInfo(fname); if (!file.Exists) { using (ExcelPackage package = new ExcelPackage(file)) { ExcelWorksheet ws = package.Workbook.Worksheets.Add("Boss"); var linkStyle = package.Workbook.Styles.CreateNamedStyle("HyperLink"); //This one is language dependent linkStyle.Style.Font.UnderLine = true; linkStyle.Style.Font.Color.SetColor(Color.Blue); ws.DefaultRowHeight = 30; ws.Cells.Style.Font.Size = 14; ws.Cells.Style.Font.Name = "Arial"; ws.Cells[1, 1].Value = $"{boss.Area}: {boss.Name} {TimeSpan.FromSeconds(double.Parse(data.fightDuration)).ToString(@"mm\:ss")}"; ws.Cells[1, 1, 1, 6].Merge = true; ws.Cells[1, 1, 1, 8].Style.Font.Bold = true; ws.Cells[1, 7].Value = long.Parse(data.partyDps); ws.Cells[1, 7].Style.Numberformat.Format = @"#,#00,\k\/\s"; ws.Cells[2, 1].Value = "Ic"; ws.Cells[2, 1].Style.Font.Color.SetColor(Color.Transparent); ws.Cells[2, 2].Value = "Name"; ws.Cells[2, 3].Value = "Deaths"; ws.Cells[2, 4].Value = "Death time"; ws.Cells[2, 5].Value = "Damage %"; ws.Cells[2, 6].Value = "Crit %"; ws.Cells[2, 7].Value = "DPS"; ws.Cells[2, 8].Value = "Damage"; int i = 2; foreach (var user in data.members.OrderByDescending(x => long.Parse(x.playerTotalDamage))) { i++; ws.Cells[i, 1].Value = i - 2; AddImage(ws, i, 1, Invert( new Bitmap( SettingsHelper.Instance.GetImage( (PlayerClass)Enum.Parse(typeof(PlayerClass), user.playerClass))))); ws.Cells[i, 2].Value = $"{user.playerServer}: {user.playerName}"; ws.Cells[i, 2].Hyperlink = CreateUserSheet(package.Workbook, user, teraData); ws.Cells[i, 3].Value = long.Parse(user.playerDeaths); ws.Cells[i, 4].Value = long.Parse(user.playerDeathDuration); ws.Cells[i, 4].Style.Numberformat.Format = @"0\s"; ws.Cells[i, 5].Value = double.Parse(user.playerTotalDamagePercentage) / 100; ws.Cells[i, 5].Style.Numberformat.Format = "0.0%"; ws.Cells[i, 6].Value = double.Parse(user.playerAverageCritRate) / 100; ws.Cells[i, 6].Style.Numberformat.Format = "0.0%"; ws.Cells[i, 7].Value = long.Parse(user.playerDps); ws.Cells[i, 7].Style.Numberformat.Format = @"#,#0,\k\/\s"; ws.Cells[i, 8].Value = long.Parse(user.playerTotalDamage); ws.Cells[i, 8].Style.Numberformat.Format = @"#,#0,\k"; } ws.Cells[1, 8].Formula = $"SUM(H3:H{i})"; ws.Cells[1, 8].Style.Numberformat.Format = @"#,#0,\k"; var border = ws.Cells[1, 1, i, 8].Style.Border; border.Bottom.Style = border.Top.Style = border.Left.Style = border.Right.Style = ExcelBorderStyle.Thick; ws.Cells[2, 1, i, 8].AutoFilter = true; int j = i + 3; ws.Cells[j, 1].Value = "Ic"; ws.Cells[j, 1].Style.Font.Color.SetColor(Color.Transparent); ws.Cells[j, 2].Value = "Debuff name"; ws.Cells[j, 2, j, 7].Merge = true; ws.Cells[j, 8].Value = "%"; ws.Cells[j, 2, j, 8].Style.Font.Bold = true; foreach (var buf in data.debuffUptime) { j++; var hotdot = teraData.HotDotDatabase.Get(int.Parse(buf.Key)); ws.Cells[j, 1].Value = j - i - 3; AddImage(ws, j, 1, BTD.Icons.GetBitmap(hotdot.IconName)); ws.Cells[j, 2].Value = hotdot.Name; if (!string.IsNullOrEmpty(hotdot.Tooltip)) { ws.Cells[j, 2].AddComment("" + hotdot.Tooltip, "info"); } ws.Cells[j, 2, j, 7].Merge = true; ws.Cells[j, 8].Value = double.Parse(buf.Value) / 100; ws.Cells[j, 8].Style.Numberformat.Format = "0%"; } border = ws.Cells[i + 3, 1, j, 8].Style.Border; border.Bottom.Style = border.Top.Style = border.Left.Style = border.Right.Style = ExcelBorderStyle.Thick; ws.Column(1).Width = 5.6; ws.Column(2).AutoFit(); ws.Column(3).AutoFit(); ws.Column(4).AutoFit(); ws.Column(5).AutoFit(); ws.Column(6).AutoFit(); ws.Column(7).AutoFit(); ws.Column(8).Width = 17; ws.Column(2).Width = GetTrueColumnWidth(ws.Column(2).Width); ws.Column(3).Width = GetTrueColumnWidth(ws.Column(3).Width); ws.Column(4).Width = GetTrueColumnWidth(ws.Column(4).Width); ws.Column(5).Width = GetTrueColumnWidth(ws.Column(5).Width); ws.Column(6).Width = GetTrueColumnWidth(ws.Column(6).Width); ws.Column(7).Width = GetTrueColumnWidth(ws.Column(7).Width); ws.Cells[1, 1, j, 8].Style.VerticalAlignment = ExcelVerticalAlignment.Center; ws.Cells[1, 1, j, 8].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; ws.PrinterSettings.FitToPage = true; package.Workbook.Properties.Title = boss.Name; package.Workbook.Properties.Author = "CasualMeter"; package.Workbook.Properties.Company = "github.com/lunyx github.com/Gl0 github.com/neowutran"; package.Save(); } } if (exportType == ExportType.ExcelTemp && File.Exists(fname)) { Process.Start(fname); } } }
public static void ToTeraDpsApi(ExportType exportType, DamageTracker damageTracker, TeraData teraData) { if (exportType == ExportType.None) { return; } //if we want to upload, primary target must be dead if (exportType.HasFlag(ExportType.Upload) && !damageTracker.IsPrimaryTargetDead) { return; } var exportToExcel = (exportType & (ExportType.Excel | ExportType.ExcelTemp)) != 0; //if we're not exporting to excel and credentials aren't fully entered, return //if (!exportToExcel // && (string.IsNullOrEmpty(SettingsHelper.Instance.Settings.TeraDpsToken) // || string.IsNullOrEmpty(SettingsHelper.Instance.Settings.TeraDpsUser))) // return; //ignore if not a boss var entity = damageTracker.PrimaryTarget; if (!(entity?.Info.Boss ?? false)) { return; } var abnormals = damageTracker.Abnormals; bool timedEncounter = false; //Nightmare desolarus if (entity.Info.HuntingZoneId == 759 && entity.Info.TemplateId == 1003) { timedEncounter = true; } var firstHit = damageTracker.StatsByUser.SelectMany(x => x.SkillLog).Where(x => x.Target == entity).Min(x => x.Time as DateTime?) ?? new DateTime(0); var lastHit = damageTracker.StatsByUser.SelectMany(x => x.SkillLog).Where(x => x.Target == entity).Max(x => x.Time as DateTime?) ?? new DateTime(0); var firstTick = firstHit.Ticks; var lastTick = lastHit.Ticks; var interval = lastTick - firstTick; var seconds = interval / TimeSpan.TicksPerSecond; if (seconds == 0) { return; } long totaldamage; if (timedEncounter) { totaldamage = damageTracker.StatsByUser.SelectMany(x => x.SkillLog) .Where(x => x.Time >= firstHit && x.Time <= lastHit) .Sum(x => (long)x.Damage); } else { totaldamage = damageTracker.StatsByUser.SelectMany(x => x.SkillLog) .Where(x => x.Target == entity) .Sum(x => (long)x.Damage); } var partyDps = TimeSpan.TicksPerSecond * totaldamage / interval; var teradpsData = new EncounterBase { encounterUnixEpoch = DateTimeTools.DateTimeToUnixTimestamp(damageTracker.LastAttack?.ToUniversalTime() ?? DateTime.UtcNow), areaId = entity.Info.HuntingZoneId + "", bossId = entity.Info.TemplateId + "", fightDuration = seconds + "", partyDps = partyDps + "" }; foreach (var debuff in abnormals.Get(entity).OrderByDescending(x => x.Value.Duration(firstTick, lastTick))) { long percentage = debuff.Value.Duration(firstTick, lastTick) * 100 / interval; if (percentage == 0) { continue; } teradpsData.debuffUptime.Add(new KeyValuePair <string, string>( debuff.Key.Id + "", percentage + "" )); } foreach (var user in damageTracker.StatsByUser.OrderByDescending(x => x.Dealt.Damage)) { var filteredSkillog = timedEncounter ? user.SkillLog.Where(x => x.Time >= firstHit && x.Time <= lastHit).ToList() : user.SkillLog.Where(x => x.Target == entity).ToList(); long damage = filteredSkillog.Sum(x => x.Damage); if (damage <= 0) { continue; } var teradpsUser = new Members(); teradpsUser.playerTotalDamage = damage + ""; var buffs = abnormals.Get(user.Player); teradpsUser.playerClass = user.Class.ToString(); teradpsUser.playerName = user.Name; teradpsUser.playerServer = SettingsHelper.Instance.BasicTeraData.Servers.GetServerName(user.Player.ServerId); teradpsUser.playerAverageCritRate = Math.Round(100 * (double)filteredSkillog.Count(x => x.IsCritical && x.Damage > 0) / filteredSkillog.Count(x => x.Damage > 0)) + ""; teradpsUser.healCrit = user.Player.IsHealer ? Math.Round(100 * (double)filteredSkillog.Count(x => x.IsCritical && x.Heal > 0) / filteredSkillog.Count(x => x.Heal > 0)) + "" : null; teradpsUser.playerDps = TimeSpan.TicksPerSecond * damage / interval + ""; teradpsUser.playerTotalDamagePercentage = damage * 100 / totaldamage + ""; var death = buffs.Death; teradpsUser.playerDeaths = death.Count(firstTick, lastTick) + ""; teradpsUser.playerDeathDuration = death.Duration(firstTick, lastTick) / TimeSpan.TicksPerSecond + ""; var aggro = buffs.Aggro(entity); teradpsUser.aggro = 100 * aggro.Duration(firstTick, lastTick) / interval + ""; foreach (var buff in buffs.Times.OrderByDescending(x => x.Value.Duration(firstTick, lastTick))) { long percentage = (buff.Value.Duration(firstTick, lastTick) * 100 / interval); if (percentage == 0) { continue; } teradpsUser.buffUptime.Add(new KeyValuePair <string, string>( buff.Key.Id + "", percentage + "" )); } var aggregated = new List <AggregatedSkillResult>(); var collection = new SynchronizedObservableCollection <SkillResult>(); foreach (var skill in filteredSkillog) { collection.Add(skill); if (aggregated.All(asr => !skill.IsSameSkillAs(asr))) { aggregated.Add(new AggregatedSkillResult(skill.SkillShortName, skill.IsHeal, AggregationType.Name, collection)); } } foreach (var skill in aggregated.OrderByDescending(x => x.Damage)) { var skillLog = new SkillLog(); var skilldamage = skill.Damage; if (skilldamage == 0) { continue; } skillLog.skillAverageCrit = skill.AverageCrit + ""; skillLog.skillAverageWhite = skill.AverageWhite + ""; skillLog.skillCritRate = Math.Round(skill.CritRate * 100) + ""; skillLog.skillDamagePercent = Math.Round(skill.DamagePercent * 100) + ""; skillLog.skillHighestCrit = skill.HighestCrit + ""; skillLog.skillHits = skill.Hits + ""; skillLog.skillId = teraData.SkillDatabase.GetSkillByPetName(skill.NpcInfo?.Name, user.Player.RaceGenderClass)?.Id.ToString() ?? skill.SkillId.ToString(); skillLog.skillLowestCrit = skill.LowestCrit + ""; skillLog.skillTotalDamage = skilldamage + ""; teradpsUser.skillLog.Add(skillLog); } teradpsData.members.Add(teradpsUser); } //export to excel if specified if (exportToExcel) { Task.Run(() => ExcelExport.ExcelSave(exportType, teradpsData, teraData)); } //return if we don't need to upload if (!exportType.HasFlag(ExportType.Upload)) { return; } /* * Validation, without that, the server cpu will be burning \o */ var areaId = int.Parse(teradpsData.areaId); if ( //areaId != 886 && //areaId != 467 && //areaId != 767 && //areaId != 768 && //areaId != 468 && areaId != 770 && areaId != 769 && areaId != 916 && areaId != 969 && areaId != 970 && areaId != 950 ) { return; } try { using (var client = new HttpClient()) { client.Timeout = TimeSpan.FromSeconds(40); var response = client.GetAsync("http://moongourd.com/shared/servertime"); var timediff = (response.Result.Headers.Date.Value.UtcDateTime.Ticks - DateTime.UtcNow.Ticks) / TimeSpan.TicksPerSecond; teradpsData.encounterUnixEpoch += timediff; } } catch (Exception) { Debug.WriteLine("Get server time error"); return; } var json = JsonConvert.SerializeObject(teradpsData, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); Task.Run(() => Send(entity, json, 3)); }
public static DateTime fromJulian(double j) { return(DateTimeTools.FromUnixTime((long)((j + 0.5 - J1970) * dayMs))); }
public static double toJulian(DateTime date) { return(DateTimeTools.ToUnixTime(date) / (double)dayMs - 0.5 + J1970); }
public void ValidateDateTimeToFail() { DateTime test = new DateTime(1899, 12, 31, 23, 59, 59); Assert.IsFalse(DateTimeTools.ValidateDateTime(test)); }
public void GenerateSheets() { int YEAR = 2017; object[] headers = { @"Project/Activity", "Feature", "Employee", "Comment", "Business Line (BL)", "Time(date)", "Location", "Work Units" }; string PATH = @"c:\Maciek\Timesheets\2017"; int COL_FIRST = 1; int COL_LAST = 8; int ROW_FIRST = 1; int ROW_DATA_FIRST = 2; ExcelApp excel = new ExcelApp(); excel.CreateNewInstance(); for (int m = 12; m >= 1; m--) { IExcelWorkbook workbook = excel.CreateAndActivateNewWorkbook(); string workBookName = $"Protokol_MSzczudlo_{YEAR}_{m:D2}.xlsx"; string workBookPath = Path.Combine(PATH, workBookName); int daysInMonth = DateTime.DaysInMonth(YEAR, m); int ROW_LAST = daysInMonth + 1; int ROW_SUM = ROW_LAST + 1; ExcelSheetData sheetData = new ExcelSheetData(); ExcelRowData headerRowData = new ExcelRowData(COL_FIRST, ROW_FIRST, COL_LAST, ROW_FIRST); headerRowData.Values = headers.ToList(); sheetData.Rows.Add(headerRowData); ExcelFormatData headerRowFormat = new ExcelFormatData(COL_FIRST, ROW_FIRST, COL_LAST, ROW_FIRST); headerRowFormat.Background = Color.LightGray; headerRowFormat.IsFontBold = true; headerRowFormat.HorizontalAlignment = ExcelHorizontalAlignmentType.Center; sheetData.Formats.Add(headerRowFormat); for (int d = 1; d <= daysInMonth; d++) { object[] values = new object[8]; int row = d + 1; DateTime iDay = new DateTime(YEAR, m, d); values[5] = iDay.ToShortDateString(); bool isFreeDay = iDay.DayOfWeek == DayOfWeek.Saturday || iDay.DayOfWeek == DayOfWeek.Sunday; if (isFreeDay) { ExcelFormatData iFormatData = new ExcelFormatData(COL_FIRST, row, COL_LAST, row); iFormatData.Background = Color.Salmon; sheetData.Formats.Add(iFormatData); ExcelRowData iRow = new ExcelRowData(COL_FIRST, row, COL_LAST, row); iRow.Values = values.ToList(); sheetData.Rows.Add(iRow); } else { values[0] = "IS Treasury"; values[2] = "Maciej Szczudło"; values[7] = 8; ExcelRowData iRow = new ExcelRowData(COL_FIRST, row, COL_LAST, row); iRow.Values = values.ToList(); sheetData.Rows.Add(iRow); } ExcelBorderData borderData = new ExcelBorderData(COL_FIRST, ROW_FIRST, COL_LAST, ROW_LAST); borderData.Borders.AddBorder(ExcelBordersIndex.xlAround, ExcelBorderWeight.xlThin, ExcelLineStyle.xlContinuous); borderData.Borders.AddBorder(ExcelBordersIndex.xlInside, ExcelBorderWeight.xlThin, ExcelLineStyle.xlContinuous); sheetData.Borders.Add(borderData); ExcelFormatData fontFormatData = new ExcelFormatData(borderData.Range); fontFormatData.FontSize = 10; sheetData.Formats.Add(fontFormatData); } string monthName = DateTimeTools.GetMonthName(m); string sheetName = $"{monthName} {YEAR}"; IExcelSheet newSheet = workbook.CreateSheet(sheetName); ExcelRangeInfo sumRange = new ExcelRangeInfo(ROW_DATA_FIRST, COL_LAST, ROW_LAST, COL_LAST); ExcelFormula formula = ExcelFormulaHelper.GetSum(ROW_SUM, COL_LAST, sumRange); sheetData.Formulas.Add(formula); ExcelBorderData borderSumData = new ExcelBorderData(formula.Range); borderSumData.Borders.AddBorder(ExcelBordersIndex.xlAround, ExcelBorderWeight.xlThin, ExcelLineStyle.xlContinuous); sheetData.Borders.Add(borderSumData); newSheet.InsertSheetData(sheetData); newSheet.SetColumnsAutoFit(COL_FIRST, COL_LAST); newSheet.SetCellName(ROW_SUM, COL_LAST, "godziny"); excel.SetDisplayGridlines(false); workbook.Save(workBookPath); } }