コード例 #1
0
        /// <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());
        }
コード例 #2
0
ファイル: storeManager.cs プロジェクト: habb0/Woodpecker
        /// <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();
            }
        }
コード例 #3
0
ファイル: storeManager.cs プロジェクト: habb0/Woodpecker
        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);
            }
        }
コード例 #4
0
ファイル: storeReactor.cs プロジェクト: scottstamp/Woodpecker
        /// <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);
            }
        }
コード例 #5
0
ファイル: storeManager.cs プロジェクト: habb0/Woodpecker
        /// <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();
            }
        }