/// <summary> /// Returns an array of the type storeCataloguePage with all the catalogue pages in the virtual store. /// </summary> /// <returns></returns> public storeCataloguePage[] getCataloguePages() { storeCataloguePage[] tmp = new storeCataloguePage[this.Pages.Count]; this.Pages.Values.CopyTo(tmp, 0); return(tmp); }
/// <summary> /// 102 - "Af" /// </summary> public void GCAP() { Response.Initialize(127); // "A" string pageName = Request.Content.Split('/')[1]; storeCataloguePage pPage = Engine.Game.Store.getCataloguePage(pageName); if (pPage != null && pPage.roleHasAccess(Session.User.Role)) { Response.Append(pPage.ToString()); } sendResponse(); }
/// <summary> /// Initializes the store catalogue pages. /// </summary> public void loadCataloguePages() { Database dbClient = new Database(true, true); if (!dbClient.Ready) { Logging.Log("Failed to load store catalogue pages, database was not contactable!", Logging.logType.commonError); return; } this.Pages = new Dictionary <string, storeCataloguePage>(); // New collection foreach (DataRow pageData in dbClient.getTable("SELECT * FROM store_catalogue_pages ORDER BY orderid ASC").Rows) { storeCataloguePage pPage = new storeCataloguePage(); pPage.ID = (int)pageData["id"]; pPage.setMinimumAccessRole(ObjectTree.Game.Roles.parseRoleFromString(pageData["minrole"].ToString())); // Set attributes for page foreach (string szAttribute in this.pageAttributes) { pPage.setAttribute(szAttribute, pageData[szAttribute]); } if (pageData["label_extra_t"] != DBNull.Value) { bool skip = false; string[] extraTypedData = pageData["label_extra_t"].ToString().Split(Environment.NewLine.ToCharArray()); foreach (string szTypedData in extraTypedData) { if (!skip) { string ID = szTypedData.Substring(0, szTypedData.IndexOf(':')); string szData = szTypedData.Substring(ID.ToString().Length + 1); pPage.setAttribute("label_extra_t_" + ID, szData); } skip = !skip; } } pPage.initializeSales(); this.Pages.Add(pPage.getStringAttribute("name_index"), pPage); } }
/// <summary> /// 100 - "Ad" /// </summary> public void GRPC() { for (int i = 0; i < this.Session.User.Multiplier; i++) { string[] purchaseArguments = Request.Content.Split(Convert.ToChar(13)); storeCataloguePage pPage = Engine.Game.Store.getCataloguePage(purchaseArguments[1]); if (pPage == null) { return; } if (!pPage.roleHasAccess(Session.User.Role)) // No access { return; } storeCatalogueSale pSale = pPage.getSale(purchaseArguments[3]); #region Credits balance + valid item check if (pSale == null || pSale.Price > Session.User.Credits) // Sale not found/not able to purchase { Response.Initialize(68); // "AD" sendResponse(); return; } #endregion int receivingUserID = Session.User.ID; string customData = null; string presentBoxNote = null; if (!pSale.isPackage) { #region Handle custom data if (pSale.pItem.Behaviour.isDecoration) { int decorationValue = 0; if (int.TryParse(purchaseArguments[4], out decorationValue) && decorationValue > 0) { customData = decorationValue.ToString(); } else { return; } } else if (pSale.pItem.Behaviour.isPrizeTrophy) { stringFunctions.filterVulnerableStuff(ref purchaseArguments[4], true); fuseStringBuilder sb = new fuseStringBuilder(); sb.appendTabbedValue(Session.User.Username); sb.appendTabbedValue(DateTime.Today.ToShortDateString()); sb.Append(purchaseArguments[4]); // Inscription customData = sb.ToString(); } if (pSale.saleCode.Length == 4 && pSale.saleCode.IndexOf("pet") == 0) // Pet sale { // Verify petname string[] petData = purchaseArguments[4].Split(Convert.ToChar(2)); if (petData[0].Length > 15) // Name too long, truncate name { petData[0] = petData[0].Substring(0, 15); } stringFunctions.filterVulnerableStuff(ref petData[0], true); // Verify pet type int petType = int.Parse(pSale.saleCode.Substring(3)); // Verify race byte Race = 0; try { Race = byte.Parse(petData[1]); } catch { } petData[1] = Race.ToString(); // Verify color try { ColorTranslator.FromHtml("#" + petData[2]); } catch { return; } // Hax! customData = petData[0] // Name + Convert.ToChar(2) + petType.ToString() // Type + Convert.ToChar(2) + petData[1] // Race + Convert.ToChar(2) + petData[2]; // Color } #endregion } #region Handle presents if (purchaseArguments[5] == "1") { if (purchaseArguments[6].ToLower() != Session.User.Username.ToLower()) // Receiving user is different than buyer { receivingUserID = Engine.Game.Users.getUserID(purchaseArguments[6]); if (receivingUserID == 0) // Receiving user was not found { Response.Initialize(76); // "AL" Response.Append(purchaseArguments[6]); sendResponse(); return; } } presentBoxNote = purchaseArguments[7]; stringFunctions.filterVulnerableStuff(ref presentBoxNote, true); } #endregion // Charge buyer Session.User.Credits -= pSale.Price; Session.refreshCredits(); // Create items and deliver Engine.Game.Store.requestSaleShipping(receivingUserID, pSale.saleCode, true, purchaseArguments[5] == "1", presentBoxNote, customData ?? ""); // Update user valueables and log transaction Session.User.updateValueables(); Engine.Game.Store.logTransaction(Session.User.ID, "stuff_store", -pSale.Price); } }
/// <summary> /// Initializes the store catalogue pages. /// </summary> public void loadCataloguePages() { Database dbClient = new Database(true, true); if (!dbClient.Ready) { Logging.Log("Failed to load store catalogue pages, database was not contactable!", Logging.logType.commonError); return; } this.Pages = new Dictionary<string,storeCataloguePage>(); // New collection foreach (DataRow pageData in dbClient.getTable("SELECT * FROM store_catalogue_pages ORDER BY orderid ASC").Rows) { storeCataloguePage pPage = new storeCataloguePage(); pPage.ID = (int)pageData["id"]; pPage.setMinimumAccessRole(ObjectTree.Game.Roles.parseRoleFromString(pageData["minrole"].ToString())); // Set attributes for page foreach(string szAttribute in this.pageAttributes) pPage.setAttribute(szAttribute, pageData[szAttribute]); if (pageData["label_extra_t"] != DBNull.Value) { bool skip = false; string[] extraTypedData = pageData["label_extra_t"].ToString().Split(Environment.NewLine.ToCharArray()); foreach (string szTypedData in extraTypedData) { if (!skip) { string ID = szTypedData.Substring(0, szTypedData.IndexOf(':')); string szData = szTypedData.Substring(ID.ToString().Length + 1); pPage.setAttribute("label_extra_t_" + ID, szData); } skip = !skip; } } pPage.initializeSales(); this.Pages.Add(pPage.getStringAttribute("name_index"), pPage); } }
/// <summary> /// Returns an array of the type storeCataloguePage with all the catalogue pages in the virtual store. /// </summary> /// <returns></returns> public storeCataloguePage[] getCataloguePages() { storeCataloguePage[] tmp = new storeCataloguePage[this.Pages.Count]; this.Pages.Values.CopyTo(tmp, 0); return tmp; }