/// <summary> /// Returns an array of the type storeCatalogueSale with all the store catalogue sales that are being sold on this page. /// </summary> /// <returns></returns> public storeCatalogueSale[] getSales() { List <storeCatalogueSale> Sales = new List <storeCatalogueSale>(); foreach (string lSaleCode in this.saleCodes) { storeCatalogueSale pSale = Engine.Game.Store.getSale(lSaleCode); if (pSale != null) { Sales.Add(pSale); } } return(Sales.ToArray()); }
/// <summary> /// Initializes the sales sold in the catalogue. /// </summary> public void loadSales() { if (this.Sales != null) { this.Sales.Clear(); } this.Sales = new Dictionary <string, storeCatalogueSale>(); Database dbClient = new Database(true, false); if (dbClient.Ready) { foreach (DataRow dSale in dbClient.getTable("SELECT * FROM store_catalogue_sales").Rows) { storeCatalogueSale pSale = new storeCatalogueSale((string)dSale["salecode"], (int)dSale["price"]); // Create blank sale object bool isPackage = ( (dSale["ispackage"].ToString() == "true") && dSale["package_name"] != DBNull.Value && dSale["package_description"] != DBNull.Value); if (isPackage) { pSale.setPackage((string)dSale["package_name"], (string)dSale["package_description"]); foreach (DataRow dPackageItem in dbClient.getTable("SELECT definitionid,amount,specialspriteid FROM store_catalogue_sales_packages WHERE salecode = '" + pSale.saleCode + "'").Rows) { itemDefinition pItemDefinition = ObjectTree.Game.Items.getItemDefinition((int)dPackageItem["definitionid"]); if (pItemDefinition != null) { pSale.addPackageItem(pItemDefinition, (int)dPackageItem["amount"], (int)dPackageItem["specialspriteid"]); } } } else { itemDefinition pItemDefinition = ObjectTree.Game.Items.getItemDefinition((int)dSale["item_definitionid"]); if (pItemDefinition != null) { pSale.setItem(pItemDefinition, (int)dSale["item_specialspriteid"]); } } this.Sales.Add(pSale.saleCode, pSale); } dbClient.Close(); } }
public void requestSaleShipping(int receivingUserID, string saleCode, bool isNewPurchase, bool purchaseAsPresent, string presentNote, string customData) { storeCatalogueSale pSale = this.getSale(saleCode); if (pSale == null) { Logging.Log("Failed to purchase sale '" + saleCode + "' for user " + receivingUserID + ", the requested sale ('" + saleCode + "') was not found!", Logging.logType.commonWarning); return; } List <stripItem> shippedItems = new List <stripItem>(); if (purchaseAsPresent) { stripItem presentBox = this.createPresent(receivingUserID, saleCode, presentNote, customData); if (presentBox != null) { shippedItems.Add(presentBox); } else { return; } } else { int itemIdOffset = ObjectTree.Game.Items.getItemIdOffset(); foreach (stripItem lItem in pSale.getItemInstances()) { lItem.ID = ++itemIdOffset; lItem.ownerID = receivingUserID; #region Special events upon purchase if (lItem.Definition.Behaviour.isTeleporter) // Teleporter, create linking teleporter { stripItem Teleporter2 = new stripItem(); Teleporter2.ID = ++itemIdOffset; Teleporter2.ownerID = receivingUserID; Teleporter2.Definition = lItem.Definition; Teleporter2.teleporterID = lItem.ID; lItem.teleporterID = Teleporter2.ID; shippedItems.Add(Teleporter2); } else if (lItem.Definition.Behaviour.isPostIt) { lItem.customData = "20"; } else if (lItem.Definition.Behaviour.isDecoration || lItem.Definition.Behaviour.isPrizeTrophy) { lItem.customData = customData; } else if (lItem.Definition.Behaviour.isRedeemable) { int creditValue = 0; if (int.TryParse(lItem.Definition.Sprite.Split('_')[1], out creditValue)) { lItem.customData = creditValue.ToString(); } } else if (lItem.Definition.Sprite == "nest") { string[] petData = customData.Split(Convert.ToChar(2)); string Name = petData[0]; char Type = char.Parse(petData[1]); byte Race = byte.Parse(petData[2]); string Color = petData[3]; ObjectTree.Game.Items.createPet(lItem.ID, Name, Type, Race, Color); } #endregion shippedItems.Add(lItem); } ObjectTree.Game.Items.createItemInstances(shippedItems); } Session Receiver = ObjectTree.Game.Users.getUserSession(receivingUserID); if (Receiver != null) // Receiver was online { Receiver.itemStripHandler.addHandItems(shippedItems); serverMessage Notification = new serverMessage(); if (isNewPurchase) { Notification.Initialize(67); // "AC" } else #region Open as present box { stripItem displayItem = shippedItems[0]; Notification.Initialize(129); // "BA" Notification.appendNewLineValue(displayItem.Definition.Sprite); string displaySprite = displayItem.Definition.Sprite; //if (displayItem.Definition.isPartialSprite && displayItem.customData != null) // displaySprite += " " + displayItem.customData; Notification.appendNewLineValue(displaySprite); if (!displayItem.Definition.Behaviour.isWallItem) { Notification.appendStripValue(displayItem.Definition.Length.ToString()); Notification.appendStripValue(displayItem.Definition.Width.ToString()); Notification.appendStripValue(displayItem.Definition.Color); } } #endregion Receiver.gameConnection.sendMessage(Notification); } }
/// <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 sales sold in the catalogue. /// </summary> public void loadSales() { if (this.Sales != null) this.Sales.Clear(); this.Sales = new Dictionary<string, storeCatalogueSale>(); Database dbClient = new Database(true, false); if (dbClient.Ready) { foreach (DataRow dSale in dbClient.getTable("SELECT * FROM store_catalogue_sales").Rows) { storeCatalogueSale pSale = new storeCatalogueSale((string)dSale["salecode"], (int)dSale["price"]); // Create blank sale object bool isPackage = ( (dSale["ispackage"].ToString() == "true") && dSale["package_name"] != DBNull.Value && dSale["package_description"] != DBNull.Value); if (isPackage) { pSale.setPackage((string)dSale["package_name"], (string)dSale["package_description"]); foreach (DataRow dPackageItem in dbClient.getTable("SELECT definitionid,amount,specialspriteid FROM store_catalogue_sales_packages WHERE salecode = '" + pSale.saleCode + "'").Rows) { itemDefinition pItemDefinition = ObjectTree.Game.Items.getItemDefinition((int)dPackageItem["definitionid"]); if (pItemDefinition != null) pSale.addPackageItem(pItemDefinition, (int)dPackageItem["amount"], (int)dPackageItem["specialspriteid"]); } } else { itemDefinition pItemDefinition = ObjectTree.Game.Items.getItemDefinition((int)dSale["item_definitionid"]); if (pItemDefinition != null) pSale.setItem(pItemDefinition, (int)dSale["item_specialspriteid"]); } this.Sales.Add(pSale.saleCode, pSale); } dbClient.Close(); } }