private void _AddCompanion(string _CompanionData, UploadID _Uploader, VF.SQLPlayerID?_PlayerID = null, Func <int, VF.SQLUploadID> _GetSQLUploadIDFunc = null) { var companionDatas = _CompanionData.Split(':'); if (companionDatas.Length != 2) { return; } string companionName = companionDatas[0]; int companionLevel = 0; if (int.TryParse(companionDatas[1], out companionLevel) == false) { return; } if (_PlayerID.HasValue && _PlayerID.Value.IsValid() && _GetSQLUploadIDFunc != null) { using (VF.SQLComm comm = new VF.SQLComm()) { int companionID = comm.GenerateCompanionID(companionName, companionLevel); if (companionID > 0) { comm.AddPlayerCompanion(_PlayerID.Value, _GetSQLUploadIDFunc(0), _Uploader.GetTime(), companionID); } } } _AddCompanion(companionName, companionLevel, _Uploader); }
public static PlayerData.PlayerHistory FindRealmPlayerHistory(System.Web.UI.Page _Page, WowRealm _Realm, string _Player) { PlayerData.PlayerHistory playerHistory; #if NO_SQL_LOADING #else try { using (var comm = new VF.SQLComm()) { if (comm.LoadPlayer(_Player, _Realm, VF.SQLPlayerID.Invalid(), out playerHistory) > 0) { return(playerHistory); } } } catch (Exception ex) { Logger.LogException(ex); return(null); } #endif var realm = _FindRealmDB(_Page, _Realm); if (realm == null /* || realm.IsPlayersHistoryLoadComplete() == false*/) { return(null); } if (realm.PlayersHistory.TryGetValue(_Player, out playerHistory) == false) { return(null); } return(playerHistory); }
private void _AddPet(string _PetData, UploadID _Uploader, VF.SQLPlayerID?_PlayerID = null, Func <int, VF.SQLUploadID> _GetSQLUploadIDFunc = null) { var petDatas = _PetData.Split(':'); if (petDatas.Length != 4) { return; } string petName = petDatas[0]; int petLevel = 0; if (int.TryParse(petDatas[1], out petLevel) == false) { return; } string petFamily = petDatas[2]; string petType = petDatas[3]; if (_PlayerID.HasValue && _PlayerID.Value.IsValid() && _GetSQLUploadIDFunc != null) { using (VF.SQLComm comm = new VF.SQLComm()) { int petID = comm.GeneratePetID(petName, petLevel, petFamily, petType); if (petID > 0) { comm.AddPlayerPet(_PlayerID.Value, _GetSQLUploadIDFunc(0), _Uploader.GetTime(), petID); } } } _AddPet(petName, petLevel, petFamily, petType, _Uploader); }
public void _AddMount(string _MountName, UploadID _Uploader, VF.SQLPlayerID?_PlayerID = null, Func <int, VF.SQLUploadID> _GetSQLUploadIDFunc = null) { if (_PlayerID.HasValue && _PlayerID.Value.IsValid() && _GetSQLUploadIDFunc != null) { using (VF.SQLComm comm = new VF.SQLComm()) { int mountID = comm.GenerateMountID(_MountName); if (mountID > 0) { comm.AddPlayerMount(_PlayerID.Value, _GetSQLUploadIDFunc(0), _Uploader.GetTime(), mountID); } } } var mountIndex = Mounts.FindIndex((_Value) => _Value.Mount == _MountName); if (mountIndex != -1) { Mounts[mountIndex].AddUploader(_Uploader); } else { Mounts.Add(new MountData(_MountName, _Uploader)); } }
public void UpdatePlayer(System.Xml.XmlNode _PlayerNode, Contributor _Contributor, Func <int, VF.SQLUploadID> _GetSQLUploadIDFunc) { string playerName = PlayerData.DataParser.ParsePlayerName(_PlayerNode); DateTime lastSeen = PlayerData.DataParser.ParseLastSeenUTC(_PlayerNode); if (lastSeen > DateTime.UtcNow) { if (lastSeen > DateTime.UtcNow.AddMinutes(2)) { //Tillåt inte data som är från framtiden(wtf) flagga Contributor som opålitlig _Contributor.SetWarningFlag(Contributor.WarningFlag.DataFromFuture); return; } lastSeen = DateTime.UtcNow; //Om det är OK så sätter vi LastSeen till UtcNow istället. } if ((DateTime.UtcNow - lastSeen).TotalDays > 5) //Tillåt inte data som är äldre än 5 dagar { return; } //if (lastSeen < DATE_HONOR_CORRUPTION)// Honor corruption occured the 16th January, uncomment this line after 5 days have passed! //{ // Logger.ConsoleWriteLine("Someone submitted data that was during the Honor Corruption. Good thing i implemented this code!!!", ConsoleColor.Red); // return; //} var uploadID = _Contributor.GetUploadID(lastSeen); PlayerData.Player currPlayer = GetPlayer(playerName); PlayerData.PlayerHistory currPlayerHistory = GetPlayerHistory(playerName); currPlayer.Update(_PlayerNode, uploadID, lastSeen, currPlayerHistory, WowVersion, _GetSQLUploadIDFunc); try { //ANVÄND INTE = tecken innuti savedvariables data!!!!!!!!! då buggar det ur totalt string extraData = XMLUtility.GetChildValue(_PlayerNode, "ExtraData", ""); if (extraData != "") { VF.SQLPlayerID playerID; using (VF.SQLComm comm = new VF.SQLComm()) { if (comm.GetPlayerID(Realm, playerName, out playerID) == false) { Logger.ConsoleWriteLine("Could not find SQL PlayerID for Player \"" + playerName + "\""); } } var currPlayerExtraData = GetPlayerExtraData(playerName); currPlayerExtraData.AddData(uploadID, extraData, playerID, _GetSQLUploadIDFunc); } } catch (NpgsqlException ex) { throw ex; } catch (Exception ex) { Logger.LogException(ex); } Updated = true; }
public void MigrateToSQL() { Dictionary <ulong, VF.SQLPlayerID> playerIDConverter = new Dictionary <ulong, VF.SQLPlayerID>(); using (VF.SQLComm comm = new VF.SQLComm()) { int totalItemsCount = m_Items.Count; int itemsProcessedCounter = 0; DateTime startTime = DateTime.UtcNow; DateTime prevLogTime = DateTime.UtcNow; foreach (var itemSummary in m_Items) { ++itemsProcessedCounter; foreach (var itemOwner in itemSummary.Value.m_ItemOwners) { VF.SQLPlayerID playerID; if (playerIDConverter.TryGetValue(itemOwner.Item1, out playerID) == false) { string playerName = GetPlayerName(itemOwner.Item1); WowRealm realm = GetPlayerRealm(itemOwner.Item1); if (comm.GetPlayerID(realm, playerName, out playerID) == true) { playerIDConverter.Add(itemOwner.Item1, playerID); } else { VF_RealmPlayersDatabase.Logger.ConsoleWriteLine("playerID was not valid for player \"" + playerName + "\"", ConsoleColor.Red); } } if (playerID.IsValid() == true) { if (comm.UpsertItemOwner(itemSummary.Value.m_ItemID, itemSummary.Value.m_SuffixID, playerID, null, itemOwner.Item2) == false) { VF_RealmPlayersDatabase.Logger.ConsoleWriteLine("UpsertItemOwner Failed???", ConsoleColor.Red); } } } if ((DateTime.UtcNow - prevLogTime).TotalSeconds > 5) { VF_RealmPlayersDatabase.Logger.ConsoleWriteLine("Processed " + itemsProcessedCounter + " / " + totalItemsCount + " items"); prevLogTime = DateTime.UtcNow; } } VF_RealmPlayersDatabase.Logger.ConsoleWriteLine("Done with processing " + totalItemsCount + " items, it took " + (DateTime.UtcNow - startTime).ToString()); } }
public static PlayerData.ExtraData FindRealmPlayerExtraData(System.Web.UI.Page _Page, WowRealm _Realm, string _Player, NotLoadedDecision _Decision = NotLoadedDecision.ReturnNull) { PlayerData.ExtraData playerExtraData; #if NO_SQL_LOADING #else using (var comm = new VF.SQLComm()) { if (comm.LoadPlayer(_Player, _Realm, VF.SQLPlayerID.Invalid(), out playerExtraData) > 0) { return(playerExtraData); } } #endif var realm = _FindRealmDB(_Page, _Realm); if (realm == null || (realm.IsPlayersExtraDataLoadComplete() == false && _Decision != NotLoadedDecision.SpinWait)) { return(null); } if (realm.PlayersExtraData.TryGetValue(_Player, out playerExtraData) == false) { return(null); } return(playerExtraData); }
protected void Page_Load(object sender, EventArgs e) { int pageNr = PageUtility.GetQueryInt(Request, "page", 1); int pageIndex = pageNr - 1;//Change range from 0 to * instead of 1 to * int count = PageUtility.GetQueryInt(Request, "count", 100); if (count > 500) { count = 500; } var realm = RealmControl.Realm; if (realm == VF_RealmPlayersDatabase.WowRealm.Unknown) { return; } var wowVersion = StaticValues.GetWowVersion(realm); int itemID = PageUtility.GetQueryInt(Request, "item", 19364); int suffixID = PageUtility.GetQueryInt(Request, "suffix", 0); this.Title = "\"" + itemID + "\" ItemUsage @ " + StaticValues.ConvertRealmParam(realm) + " | RealmPlayers"; m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome() + PageUtility.BreadCrumb_AddFinish("ItemUsage")); var itemSummaryDB = Hidden.ApplicationInstance.Instance.GetItemSummaryDatabase(); using (VF.SQLComm comm = new VF.SQLComm()) { List <Tuple <DateTime, string> > players = null; players = itemSummaryDB.GetItemUsage(realm, itemID, suffixID);//, out players) == true) { string currentItemDatabase = DatabaseAccess.GetCurrentItemDatabaseAddress(); var itemInfo = DatabaseAccess.GetItemInfo(itemID, wowVersion); m_ItemUsageInfoHTML = new MvcHtmlString("<div style='overflow: hidden; display: table;'><div style='display: table-cell;'><h1>Players with <h1></div>" + "<div class='inventory' style='background: none; width: 58px; height: 58px; display: table-cell;'><div>" + "<img class='itempic' src='" + "http://realmplayers.com/" + itemInfo.GetIconImageAddress() + "'/>" + "<div class='quality' id='" + CharacterViewer.ItemQualityConversion[itemInfo.ItemQuality] + "'></div>" + "<img class='itemframe' src='assets/img/icons/ItemNormalFrame.png'/>" + CharacterViewer.GenerateItemLink(currentItemDatabase, itemID, suffixID, wowVersion) + "</div></div>" + "<span class='badge badge-inverse'>" + players.Count + " Players</span></div>" + "<p>Sorted by date \"aquired\"</p>"); Dictionary <PlayerColumn, string[]> extraColumns = new Dictionary <PlayerColumn, string[]>(); PlayerColumn ItemAndAquiredDateAfterColumn = PlayerColumn.Number; extraColumns.Add(ItemAndAquiredDateAfterColumn, new string[] { "Item", "Date Aquired" }); m_TableHeadHTML = new MvcHtmlString(PageUtility.CreatePlayerTableHeaderRow(Table_Columns, extraColumns)); string tableBody = ""; int nr = 0; Func <Tuple <DateTime, string>, DateTime> lambdaComparison = (_Tuple) => { return(_Tuple.Item1); }; players = players.OrderBy(lambdaComparison).ToList(); foreach (var playerDateAndName in players) { Player player = DatabaseAccess.FindRealmPlayer(this, realm, playerDateAndName.Item2); if (player != null) { ++nr; // style='position: absolute; margin: auto; width:58px; height:58px;' if (nr > pageIndex * count && nr <= (pageIndex + 1) * count) { //string itemLink = ""; VF_RealmPlayersDatabase.PlayerData.ItemInfo playerItemData = null; try { playerItemData = player.Gear.Items.First((_Item) => { return(_Item.Value.ItemID == itemID); }).Value; } catch (Exception) { playerItemData = null; } if (playerItemData != null) { //Data fanns i gearen som playern använder för tillfället! //itemLink = currentItemDatabase + "?item=" + playerItemData.ItemID + "' rel='rand=" + playerItemData.SuffixID + ";ench=" + playerItemData.EnchantID; } else { //Måste titta igenom history! #if NO_SQL PlayerHistory playerHistory = DatabaseAccess.FindRealmPlayerHistory(this, realm, playerDateAndName.Item2); if (playerHistory != null) { for (int i = playerHistory.GearHistory.Count - 1; i >= 0; --i) { try { playerItemData = playerHistory.GearHistory[i].Data.Items.First((_Item) => { return(_Item.Value.ItemID == itemID); }).Value; } catch (Exception) { playerItemData = null; } if (playerItemData != null) { //Data fanns i gearen som playern använder för tillfället! //itemLink = currentItemDatabase + "?item=" + playerItemData.ItemID + "' rel='rand=" + playerItemData.SuffixID + ";ench=" + playerItemData.EnchantID; break; } } } #else /*Disable this for now. it is too slow...*/ //playerItemData = comm.GetLatestItemInfoForPlayer(playerDateAndName.Item2, realm, itemID); #endif } if (playerItemData == null) { playerItemData = new VF_RealmPlayersDatabase.PlayerData.ItemInfo { Slot = VF_RealmPlayersDatabase.ItemSlot.Unknown, ItemID = itemID, SuffixID = 0, EnchantID = 0, UniqueID = 0, GemIDs = null }; } extraColumns[ItemAndAquiredDateAfterColumn] = new string[] { "<div class='inventory' style='background: none; width: 58px; height: 58px;'><div>" + "<img class='itempic' src='" + "http://realmplayers.com/" + itemInfo.GetIconImageAddress() + "'/>" + "<div class='quality' id='" + CharacterViewer.ItemQualityConversion[itemInfo.ItemQuality] + "'></div>" + "<img class='itemframe' src='assets/img/icons/ItemNormalFrame.png'/>" + CharacterViewer.GenerateItemLink(currentItemDatabase, playerItemData, wowVersion) + "</div></div>" , playerDateAndName.Item1.ToString("yyyy-MM-dd") }; tableBody += PageUtility.CreatePlayerRow(nr, realm, player, Table_Columns, null, extraColumns); } if (nr >= (pageIndex + 1) * count) { break; } } } if (nr != 0 && nr <= pageIndex * count) { pageIndex = (nr - 1) / count; Response.Redirect(PageUtility.CreateUrlWithNewQueryValue(Request, "page", (pageIndex + 1).ToString())); } m_TableBodyHTML = new MvcHtmlString(tableBody); int maxPageNr = 1000000 / count; m_PaginationHTML = new MvcHtmlString(PageUtility.CreatePagination(Request, pageNr, ((players.Count - 1) / count) + 1)); } } }
protected void Page_Load(object sender, EventArgs e) { this.Title = "Contributors | RealmPlayers"; //var statisticsData = DatabaseAccess.GetContributorStatistics(); //if (statisticsData == null) //{ // PageUtility.RedirectErrorLoading(this, "contributors"); // return; //} m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome() + PageUtility.BreadCrumb_AddFinish("Contributors")); var statsRealms = new WowRealm[] { WowRealm.Emerald_Dream, WowRealm.Warsong, WowRealm.Al_Akir, WowRealm.Rebirth, WowRealm.Nostalrius, WowRealm.Kronos, WowRealm.Archangel }; Dictionary <WowRealm, int> totalRealmInspects = new Dictionary <WowRealm, int>(); string realmInspectsHeaderColumns = ""; foreach (var statsRealm in statsRealms) { realmInspectsHeaderColumns += PageUtility.CreateTableColumnHead(StaticValues.ConvertRealmViewing(statsRealm)); totalRealmInspects.Add(statsRealm, 0); } m_TableHeadHTML = new MvcHtmlString(PageUtility.CreateTableRow("", PageUtility.CreateTableColumnHead("#Nr") + PageUtility.CreateTableColumnHead("Name") + PageUtility.CreateTableColumnHead("Total inspects") + realmInspectsHeaderColumns + PageUtility.CreateTableColumnHead("Active since") + PageUtility.CreateTableColumnHead("Last active"))); SortedList <int, string> tableRows = new SortedList <int, string>(); string tableBody = ""; using (VF.SQLComm comm = new VF.SQLComm()) { var contributors = ContributorDB.GetAllTrustWorthyContributors(); foreach (var statRealm in statsRealms) { totalRealmInspects[statRealm] = comm.GetRealmInspectsTotal(statRealm); } //return DynamicReloader.GetData<ContributorStatistics>(() => //{ // VF_RPDatabase.GuildSummaryDatabase summaryDB = null; // summaryDB = VF_RPDatabase.GuildSummaryDatabase.LoadSummaryDatabase(Constants.RPPDbDir); // return summaryDB; //}, (_ContributorStatistics, _LastLoadTime) => { return (DateTime.UtcNow - _LastLoadTime).TotalMinutes > 30; }); //DynamicReloader.GetData(() => { }, () => { return true; }, TimeSpan.FromMinutes(30), false) int contributorCounter = 0; if (false) { foreach (var data in contributors) { var contributor = data.GetAsContributor(); DateTime earliestActive; DateTime latestActive; int totalInspects; if (comm.GetInspectsInfoForContributor(contributor, out earliestActive, out latestActive, out totalInspects) == true) { string realmInspectsColumns = ""; if (totalInspects > 0 && data.Name != "Unknown" && ((DateTime.UtcNow - latestActive).TotalDays < 15 || (totalInspects > 5000 && (DateTime.UtcNow - latestActive).TotalDays < 60))) { foreach (var statRealm in statsRealms) { int inspects = comm.GetRealmInspectsForContributor(contributor, statRealm); realmInspectsColumns += PageUtility.CreateTableColumn(inspects.ToString()); } int keyToUse = int.MaxValue - totalInspects * 100; while (tableRows.ContainsKey(keyToUse) == true) { keyToUse += 1; } tableRows.Add(keyToUse, PageUtility.CreateTableColumn(data.Name) + PageUtility.CreateTableColumn(totalInspects.ToString()) + realmInspectsColumns + PageUtility.CreateTableColumn(earliestActive.ToString("yyy-MM-dd")) + PageUtility.CreateTableColumn(StaticValues.GetTimeSinceLastSeenUTC(latestActive))); } } if (contributorCounter++ % 100 == 0) { Logger.ConsoleWriteLine("Generated Contributor Inspects Info for Contributor Nr " + contributorCounter); } } } } int totalALLInspects = 0; string totalRealmInspectsColumn = ""; foreach (var statRealm in statsRealms) { totalRealmInspectsColumn += PageUtility.CreateTableColumn(totalRealmInspects[statRealm].ToString()); totalALLInspects += totalRealmInspects[statRealm]; } tableBody += PageUtility.CreateTableRow("", PageUtility.CreateTableColumn("#ALL") + PageUtility.CreateTableColumn("TOTAL") + PageUtility.CreateTableColumn(totalALLInspects.ToString()) + totalRealmInspectsColumn + PageUtility.CreateTableColumn("-") + PageUtility.CreateTableColumn("-")); int i = 1; foreach (var tableRow in tableRows) { tableBody += PageUtility.CreateTableRow("", PageUtility.CreateTableColumn("#" + i++) + tableRow.Value); } m_TableBodyHTML = new MvcHtmlString(tableBody); m_ContributorsInfoHTML = new MvcHtmlString( "<h1>Contributors<span class='badge badge-inverse'>" + tableRows.Count() + " Players</span></h1>" + "<p>List displays the persons that contribute data to this project. Sorted by the amount of inspects they have contributed with.</p>" + "<br/><p>The more contributors the better! If you are interested in being a contributor to help out the project please do not hesitate contacting <a href='http://forum.realmplayers.com/memberlist.php?mode=viewprofile&u=51'>Sethzer</a> on RealmPlayers forums. Make sure you also read the thread: <a href='http://realmplayers.com:5555/viewtopic.php?f=14&t=15'>About Data Contribution</a>.</p><br/>"); }
public bool AddContribution(RPPContribution _Contribution) { int loggedExceptions = 0; try { SavedVariablesParser.Document doc = new SavedVariablesParser.Document(_Contribution.GetFilename()); var xmlDoc = doc.ConvertToXMLDocument(); WowVersionEnum wowVersion = WowVersionEnum.Unknown; try { string addonVersion = XMLUtility.GetChildValue(xmlDoc.DocumentElement, "VF_RealmPlayersVersion", "0.0"); if (addonVersion.Split('.').Length == 2) //VF_RealmPlayers { if (Utility.ParseDouble(addonVersion) <= 1.58) { return(false); } wowVersion = WowVersionEnum.Vanilla; } else //VF_RealmPlayersTBC { wowVersion = WowVersionEnum.TBC; } } catch (Exception ex) { Logger.LogException(ex); } #if UPDATE_SQL_DB List <VF.SQLUploadID> uploadIDs = new List <VF.SQLUploadID>(); #endif var dataNode = XMLUtility.GetChild(xmlDoc.DocumentElement, "VF_RealmPlayersData"); int wowVersionWrongGuessCount = 0; foreach (System.Xml.XmlNode playerNode in dataNode.ChildNodes) { try { if (PlayerData.DataParser.ParsePlayerName(playerNode) == "OnlineData") { foreach (System.Xml.XmlNode onlineDataNode in playerNode.ChildNodes) { int loggedStrangeDataException = 0; string onlineData = onlineDataNode.Attributes["value"].Value; var dataParts = onlineData.Split(new char[] { ';' }, 5); string realmStr = dataParts[1]; WowRealm realm = StaticValues.ConvertRealm(realmStr); if (realm == WowRealm.Unknown) { realmStr = realmStr.Substring(0, 1) + realmStr.Substring(2); realm = StaticValues.ConvertRealm(realmStr); } string dateTimeStartStr = dataParts[2]; string dateTimeEndStr = dataParts[3]; string[] playersDatas = dataParts[4].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); DateTime dateTimeStart; DateTime dateTimeEnd; if (System.DateTime.TryParse(dateTimeStartStr, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal | System.Globalization.DateTimeStyles.AdjustToUniversal, out dateTimeStart) == true && System.DateTime.TryParse(dateTimeEndStr, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal | System.Globalization.DateTimeStyles.AdjustToUniversal, out dateTimeEnd) == true) { PlayersOnlineDB playersOnlineDB = m_Realms[realm].PlayersOnlineData; var onlineEntry = playersOnlineDB.GetOnlineEntry(dateTimeStart, dateTimeEnd); if (onlineEntry == null && (dateTimeEnd - dateTimeStart).TotalMinutes < 5) { //Widen the online-span to approx 5 minutes since we are creating a new entry anyways... double addMinutes = 5.0 - (dateTimeEnd - dateTimeStart).TotalMinutes; double halfMins = addMinutes / 2; dateTimeStart = dateTimeStart.AddMinutes(-halfMins); dateTimeEnd = dateTimeEnd.AddMinutes(halfMins); } onlineEntry = playersOnlineDB.CreateOnlineEntry(dateTimeStart, dateTimeEnd); foreach (var playerData in playersDatas) { var data = playerData.Split(':'); if (data.Length == 6) { PlayersOnlineDB.OnlinePlayerEntry onlinePlayer = new PlayersOnlineDB.OnlinePlayerEntry(); onlinePlayer.Name = data[0]; onlinePlayer.Race = (PlayerRace)int.Parse(data[1]); onlinePlayer.Class = (PlayerClass)int.Parse(data[2]); onlinePlayer.Guild = data[3]; onlinePlayer.Level = int.Parse(data[4]); onlinePlayer.Zone = (WorldZone)int.Parse(data[5]); onlineEntry.AddOnlinePlayer(onlinePlayer); } else if (loggedStrangeDataException < 5) { Logger.ConsoleWriteLine("Strange data in OnlineData segment! \"" + playerData + "\""); ++loggedStrangeDataException; } } m_Realms[realm].Updated = true; Logger.ConsoleWriteLine(onlineEntry.OnlinePlayers.Count + " players online " + dateTimeStart.ToDateTimeStr()); } } } else if (XMLUtility.GetChild(playerNode, "PlayerData") != null) { string realmStr = PlayerData.DataParser.ParseRealm(playerNode); WowRealm realm = StaticValues.ConvertRealm(realmStr); if (realm == WowRealm.Unknown) { realmStr = realmStr.Substring(0, 1) + realmStr.Substring(2); realm = StaticValues.ConvertRealm(realmStr); } if (StaticValues.DeadRealms.Contains(realm) == true || StaticValues.Disabled_UploadRealmNames.Contains(realmStr) == true) { Logger.ConsoleWriteLine("RealmStr: \"" + realmStr + "\" was recognized as a dead realm"); continue; } if ((StaticValues.GetWowVersion(realm) != wowVersion)) { ++wowVersionWrongGuessCount; } if (realm == WowRealm.Unknown || m_Realms.ContainsKey(realm) == false) { Logger.ConsoleWriteLine("RealmStr: \"" + realmStr + "\" was not recognized as a realm"); } else { #if UPDATE_SQL_DB Func <int, VF.SQLUploadID> getUploadID = (int _Index) => { while (uploadIDs.Count <= _Index) { using (VF.SQLComm comm = new VF.SQLComm()) { var uploadID = comm.GenerateNewUploadEntry(_Contribution.GetContributor(), DateTime.UtcNow); uploadIDs.Add(uploadID); } } return(uploadIDs[_Index]); }; RealmDatabase realmDB = m_Realms[realm]; realmDB.UpdatePlayer(playerNode, _Contribution.GetContributor(), getUploadID); #else RealmDatabase realmDB = m_Realms[realm]; realmDB.UpdatePlayer(playerNode, _Contribution.GetContributor(), null); #endif } } } catch (Npgsql.NpgsqlException ex) { throw ex; } catch (Exception ex) { if (loggedExceptions < 5) { Logger.LogException(ex); } ++loggedExceptions; } } if (wowVersionWrongGuessCount > 0) { Logger.ConsoleWriteLine("RealmPlayers WoWversion guess was wrong " + wowVersionWrongGuessCount + " times!!!", ConsoleColor.Red); } Logger.ConsoleWriteLine(_Contribution.GetContributor().GetFilename() + " just updated database successfully!"); return(true); } catch (Exception ex) { Logger.LogException(ex); } return(false); }
public bool AddContribution(RPPContribution _Contribution) { int loggedExceptions = 0; try { SavedVariablesParser.Document doc = new SavedVariablesParser.Document(_Contribution.GetFilename()); var xmlDoc = doc.ConvertToXMLDocument(); WowVersionEnum wowVersion = WowVersionEnum.Unknown; try { string addonVersion = XMLUtility.GetChildValue(xmlDoc.DocumentElement, "VF_RealmPlayersVersion", "0.0"); if (addonVersion.Split('.').Length == 2) //VF_RealmPlayers { if (Utility.ParseDouble(addonVersion) <= 1.58) { return(false); } wowVersion = WowVersionEnum.Vanilla; } else //VF_RealmPlayersTBC { wowVersion = WowVersionEnum.TBC; } } catch (Exception ex) { Logger.LogException(ex); } List <VF.SQLUploadID> uploadIDs = new List <VF.SQLUploadID>(); var dataNode = XMLUtility.GetChild(xmlDoc.DocumentElement, "VF_RealmPlayersData"); int wowVersionWrongGuessCount = 0; foreach (System.Xml.XmlNode playerNode in dataNode.ChildNodes) { try { if (XMLUtility.GetChild(playerNode, "PlayerData") != null) { string realmStr = PlayerData.DataParser.ParseRealm(playerNode); WowRealm realm = StaticValues.ConvertRealm(realmStr); if ((StaticValues.GetWowVersion(realm) != wowVersion)) { ++wowVersionWrongGuessCount; } if (realm == WowRealm.Unknown || m_Realms.ContainsKey(realm) == false) { Logger.ConsoleWriteLine("RealmStr: \"" + realmStr + "\" was not recognized as a realm"); } else { Func <int, VF.SQLUploadID> getUploadID = (int _Index) => { while (uploadIDs.Count <= _Index) { using (VF.SQLComm comm = new VF.SQLComm()) { var uploadID = comm.GenerateNewUploadEntry(_Contribution.GetContributor(), DateTime.UtcNow); uploadIDs.Add(uploadID); } } return(uploadIDs[_Index]); }; RealmDatabase realmDB = m_Realms[realm]; realmDB.UpdatePlayer(playerNode, _Contribution.GetContributor(), getUploadID); } } } catch (Npgsql.NpgsqlException ex) { throw ex; } catch (Exception ex) { if (loggedExceptions < 5) { Logger.LogException(ex); } ++loggedExceptions; } } if (wowVersionWrongGuessCount > 0) { Logger.ConsoleWriteLine("RealmPlayers WoWversion guess was wrong " + wowVersionWrongGuessCount + " times!!!", ConsoleColor.Red); } Logger.ConsoleWriteLine(_Contribution.GetContributor().GetFilename() + " just updated database successfully!"); return(true); } catch (Exception ex) { Logger.LogException(ex); } return(false); }
public void UpdatePlayer(System.Xml.XmlNode _PlayerNode, Contributor _Contributor, Func <int, VF.SQLUploadID> _GetSQLUploadIDFunc) { string playerName = PlayerData.DataParser.ParsePlayerName(_PlayerNode); DateTime lastSeen = PlayerData.DataParser.ParseLastSeenUTC(_PlayerNode); if (lastSeen > DateTime.UtcNow) { if (lastSeen > DateTime.UtcNow.AddMinutes(2)) { //Tillåt inte data som är från framtiden(wtf) flagga Contributor som opålitlig _Contributor.SetWarningFlag(Contributor.WarningFlag.DataFromFuture); return; } lastSeen = DateTime.UtcNow; //Om det är OK så sätter vi LastSeen till UtcNow istället. } if ((DateTime.UtcNow - lastSeen).TotalDays > 5) //Tillåt inte data som är äldre än 5 dagar { if (Realm == WowRealm.Northdale && lastSeen < new DateTime(2018, 6, 23, 12, 0, 0)) //Do not allow inspects before server even opened... { return; } if (DateTime.UtcNow < new DateTime(2018, 9, 1) && lastSeen > new DateTime(2018, 4, 1)) { //Special case, allow this! We are temporary allowing adding some old data! } else { return; } } //if (lastSeen < DATE_HONOR_CORRUPTION)// Honor corruption occured the 16th January, uncomment this line after 5 days have passed! //{ // Logger.ConsoleWriteLine("Someone submitted data that was during the Honor Corruption. Good thing i implemented this code!!!", ConsoleColor.Red); // return; //} var uploadID = _Contributor.GetUploadID(lastSeen); PlayerData.Player currPlayer = GetPlayer(playerName); PlayerData.PlayerHistory currPlayerHistory = GetPlayerHistory(playerName); currPlayer.Update(_PlayerNode, uploadID, lastSeen, currPlayerHistory, WowVersion, _GetSQLUploadIDFunc); try { //ANVÄND INTE = tecken innuti savedvariables data!!!!!!!!! då buggar det ur totalt string extraData = XMLUtility.GetChildValue(_PlayerNode, "ExtraData", ""); if (extraData != "") { #if UPDATE_SQL_DB VF.SQLPlayerID playerID; using (VF.SQLComm comm = new VF.SQLComm()) { if (comm.GetPlayerID(Realm, playerName, out playerID) == false) { Logger.ConsoleWriteLine("Could not find SQL PlayerID for Player \"" + playerName + "\""); } } var currPlayerExtraData = GetPlayerExtraData(playerName); currPlayerExtraData.AddData(uploadID, extraData, playerID, _GetSQLUploadIDFunc); #else if (_GetSQLUploadIDFunc != null) { while (true) { Console.WriteLine("ERROR, SQL USAGE CONFUSION"); System.Threading.Thread.Sleep(5000); } } var currPlayerExtraData = GetPlayerExtraData(playerName); currPlayerExtraData.AddData(uploadID, extraData, null, null); #endif } } catch (NpgsqlException ex) { throw ex; } catch (Exception ex) { Logger.LogException(ex); } Updated = true; }
public void UpdateSQL(Func <int, VF.SQLUploadID> _GetSQLUploadIDFunc, UploadID _Uploader /*Contains LastSeen*/, DateTime _LastSeen, PlayerHistory _PlayerHistory, WowVersionEnum _WowVersion , PlayerData.CharacterData _NewCharacter, PlayerData.GuildData _NewGuild, PlayerData.GearData _NewGear, PlayerData.HonorData _NewHonor, PlayerData.ArenaData _NewArena = null, string _NewTalents = null) { using (VF.SQLComm comm = new VF.SQLComm()) { VF.SQLPlayerData playerData = VF.SQLPlayerData.Invalid(); bool validPlayerData = false; VF.SQLPlayerID playerID; bool validPlayerID = false; if (comm.GetPlayerID(Realm, Name, out playerID) == true) { validPlayerID = true; if (_LastSeen < LastSeen) { if (comm.GetPlayerDataAtTime(playerID, _LastSeen, out playerData) == true) { validPlayerData = true; } } if (validPlayerData == false) { if (comm.GetLatestPlayerData(playerID, out playerData) == true) { validPlayerData = true; } } } if (validPlayerData == true) { bool playerDataChanged = false; if (playerData.PlayerCharacter.IsSame(_NewCharacter) == false) { playerData.PlayerCharacter = _NewCharacter; playerDataChanged = true; } PlayerData.GuildData playerDataGuildData; if (comm.GetPlayerGuildData(playerData, out playerDataGuildData) == true) { if (playerDataGuildData.IsSame(_NewGuild) == false) { playerData.PlayerGuildID = comm.GenerateNewPlayerGuildDataEntry(_NewGuild); playerDataChanged = true; } } else if (playerData.PlayerGuildID == 0) { playerData.PlayerGuildID = comm.GenerateNewPlayerGuildDataEntry(_NewGuild); if (playerData.PlayerGuildID != 0) { playerDataChanged = true; } } PlayerData.GearData playerDataGearData; if (comm.GetPlayerGearData(playerData, out playerDataGearData) == true) { if (playerDataGearData.IsSame(_NewGear) == false) { playerData.PlayerGearID = comm.GenerateNewPlayerGearDataEntry(_NewGear, _WowVersion); playerDataChanged = true; } } else if (playerData.PlayerGearID == 0) { playerData.PlayerGearID = comm.GenerateNewPlayerGearDataEntry(_NewGear, _WowVersion); if (playerData.PlayerGearID != 0) { playerDataChanged = true; } } PlayerData.HonorData playerDataHonorData; if (comm.GetPlayerHonorData(playerData, out playerDataHonorData) == true) { if (playerDataHonorData.IsSame(_NewHonor, _WowVersion) == false) { playerData.PlayerHonorID = comm.GenerateNewPlayerHonorDataEntry(_NewHonor, _WowVersion); playerDataChanged = true; } } else if (playerData.PlayerHonorID == 0) { playerData.PlayerHonorID = comm.GenerateNewPlayerHonorDataEntry(_NewHonor, _WowVersion); if (playerData.PlayerHonorID != 0) { playerDataChanged = true; } } if (_WowVersion == WowVersionEnum.TBC) { PlayerData.ArenaData playerDataArenaData; if (comm.GetPlayerArenaData(playerData, out playerDataArenaData) == true) { if (playerDataArenaData.IsSame(_NewArena) == false) { playerData.PlayerArenaID = comm.GenerateNewPlayerArenaInfoEntry(_NewArena); playerDataChanged = true; } } else if (playerData.PlayerArenaID == 0) { playerData.PlayerArenaID = comm.GenerateNewPlayerArenaInfoEntry(_NewArena); if (playerData.PlayerArenaID != 0) { playerDataChanged = true; } } string playerDataTalentsData; if (comm.GetPlayerTalentsData(playerData, out playerDataTalentsData) == true) { if (playerDataTalentsData == _NewTalents) { playerData.PlayerTalentsID = comm.GenerateNewPlayerTalentsDataEntry(_NewTalents); playerDataChanged = true; } } else if (playerData.PlayerTalentsID == 0) { playerData.PlayerTalentsID = comm.GenerateNewPlayerTalentsDataEntry(_NewTalents); if (playerData.PlayerTalentsID != 0) { playerDataChanged = true; } } } if (playerDataChanged == true) { playerData.UpdateTime = _LastSeen; playerData.UploadID = _GetSQLUploadIDFunc(0); if (comm.GenerateNewPlayerDataEntry(playerData) == false) { Logger.ConsoleWriteLine("Failed to update PlayerData for player \"" + Name + "\"", ConsoleColor.Red); } if (_LastSeen > LastSeen) { //Also update the latestupdateid in playertable since this is the latest available data! if (comm.UpdatePlayerEntry(playerData.PlayerID, playerData.UploadID) == false) { Logger.ConsoleWriteLine("Failed to update LatestUploadID for player \"" + Name + "\"", ConsoleColor.Red); } } } } else { Player newPlayer = new Player(); newPlayer.Name = Name; newPlayer.Realm = Realm; newPlayer.Character = _NewCharacter; newPlayer.Guild = _NewGuild; newPlayer.Gear = _NewGear; newPlayer.Honor = _NewHonor; newPlayer.Arena = _NewArena; newPlayer.TalentPointsData = _NewTalents; newPlayer.LastSeen = _LastSeen; //Assume PlayerID did not exist!!! if (validPlayerID == true) { //OK PlayerID exists, so maybe this is just an earlier data than currently exists at all for player. //This case should be handled above though, so if this happens something is very weird and unexpected! //This issue can be resolved automatically, it should never happen normally. But if it does... Logger.ConsoleWriteLine("Unexpected problem when updating PlayerData for player \"" + Name + "\"", ConsoleColor.Red); if (comm.UpdateLatestPlayerDataEntry(playerID, _GetSQLUploadIDFunc(0), newPlayer).ID == playerID.ID) { Logger.ConsoleWriteLine("Unexpected problem was resolved successfully!", ConsoleColor.Green); } else { Logger.ConsoleWriteLine("\n--------------------------------------------\nERROR ERROR ERRO ERROR ERROR\nWhen attempting to fix unexpected problem for player \"" + Name + "\" it did not work!!!\n--------------------------------------------\n", ConsoleColor.Red); } } else { if (comm.GenerateNewPlayerEntry(_GetSQLUploadIDFunc(0), newPlayer).IsValid() == false) { Logger.ConsoleWriteLine("Unexpected problem when creating new SQLPlayerID for player \"" + Name + "\"", ConsoleColor.Red); } } } } }