Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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();
        }
Beispiel #3
0
        /// <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);
            }
        }
Beispiel #4
0
        /// <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);
            }
        }
Beispiel #5
0
        /// <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);
            }
        }
Beispiel #6
0
        /// <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;
        }