Beispiel #1
0
        /// <summary>
        /// Render the buy list to someone
        /// </summary>
        /// <param name="customer">The person asking</param>
        /// <returns>the biuy list display</returns>
        public string RenderPurchaseSheet(IEntity customer)
        {
            StringBuilder sb = new StringBuilder();

            DataStructure.Gaia.IEconomy theEconomy = CurrentLocation.CurrentZone.GetWorld().Macroeconomy;

            sb.AppendLine("Current Stock:");
            foreach (IMerchandise merchandise in WillPurchase)
            {
                decimal valuation = theEconomy.MakeValuation(merchandise.Item);
                int     price     = (int)Math.Truncate(valuation + valuation * merchandise.MarkRate);

                if (price < 0)
                {
                    continue;
                }

                string qualityString = string.IsNullOrWhiteSpace(merchandise.Quality)
                    ? string.Empty
                    : string.Format("({0}:{1}-{2}) ", merchandise.Quality, merchandise.QualityRange.Low, merchandise.QualityRange.High);

                if (merchandise.Item != null)
                {
                    sb.AppendFormattedLine("{2}{0} : {1}blz", merchandise.Item.Name, price, qualityString);
                }
                else
                {
                    sb.AppendFormattedLine("{0}: {1}blz", qualityString, price);
                }
            }

            return(sb.ToString());
        }
Beispiel #2
0
        /// <summary>
        /// What will the merchant buy this item for
        /// </summary>
        /// <param name="item">the item in question</param>
        /// <returns>the price, -1 indicates they wont buy it</returns>
        public int HaggleCheck(IInanimate item)
        {
            decimal value = -1;

            if (item != null)
            {
                IInanimateTemplate template = item.Template <IInanimateTemplate>();
                if (WillPurchase.Any(merch => merch.Item.Id == item.TemplateId))
                {
                    DataStructure.Gaia.IEconomy theEconomy = CurrentLocation.CurrentZone.GetWorld().Macroeconomy;

                    if (theEconomy != null)
                    {
                        DataStructure.Gaia.IEconomicBasis priceBasis = theEconomy.Bases.FirstOrDefault(basis => basis.ItemType.Id == item.TemplateId);

                        if (priceBasis != null)
                        {
                            value = priceBasis.Basis * priceBasis.Adjustment;
                        }
                        else
                        {
                            value = theEconomy.MakeValuation(template);
                        }

                        foreach (IQuality quality in item.Qualities)
                        {
                            DataStructure.Gaia.IEconomicTrend trend = theEconomy.Trends.FirstOrDefault(trnd => trnd.Quality.Equals(quality.Name, StringComparison.InvariantCultureIgnoreCase));

                            if (trend != null)
                            {
                                value += trend.Basis * trend.Adjustment;
                            }
                            else
                            {
                                value += theEconomy.MakeValuation(template);
                            }
                        }

                        decimal myAdjustments = 1;

                        foreach (IMerchandise adjustment in WillPurchase.Where(merch => merch.Item.Id == item.TemplateId))
                        {
                            if (string.IsNullOrWhiteSpace(adjustment.Quality) || item.Qualities.Any(quality => quality.Name.Equals(adjustment.Quality) &&
                                                                                                    quality.Value.IsBetweenOrEqual(adjustment.QualityRange.Low, adjustment.QualityRange.High)))
                            {
                                myAdjustments += adjustment.MarkRate;
                            }
                        }

                        value += value * myAdjustments;
                    }
                }
            }

            return((int)Math.Truncate(value));
        }
Beispiel #3
0
        /// <summary>
        /// Check the price this will be sold for
        /// </summary>
        /// <param name="item">The item in question</param>
        /// <returns>the price, -1 indicates it wont be sold or isn't in stock</returns>
        public int PriceCheck(IInanimate item, bool mustBeInStock)
        {
            decimal value = -1;

            //If we need it in stock but don't have it it's sell price is invalid
            if (item != null && (!mustBeInStock || Inventory.Contains(item)))
            {
                if (WillSell.Any(merch => merch.Item.Id == item.TemplateId))
                {
                    DataStructure.Gaia.IEconomy theEconomy = CurrentLocation.CurrentZone.GetWorld().Macroeconomy;

                    if (theEconomy != null)
                    {
                        DataStructure.Gaia.IEconomicBasis priceBasis = theEconomy.Bases.FirstOrDefault(basis => basis.ItemType.Id == item.TemplateId);

                        if (priceBasis != null)
                        {
                            value = priceBasis.Basis * priceBasis.Adjustment;
                        }
                        else
                        {
                            value = theEconomy.MakeValuation(item.Template <IInanimateTemplate>());
                        }

                        foreach (IQuality quality in item.Qualities)
                        {
                            DataStructure.Gaia.IEconomicTrend trend = theEconomy.Trends.FirstOrDefault(trnd => trnd.Quality.Equals(quality.Name, StringComparison.InvariantCultureIgnoreCase));

                            if (trend != null)
                            {
                                value += trend.Basis * trend.Adjustment;
                            }
                            else
                            {
                                value += theEconomy.MakeValuation(item.Template <IInanimateTemplate>());
                            }
                        }

                        decimal myAdjustments = 1;

                        foreach (IMerchandise adjustment in WillSell.Where(merch => merch.Item.Id == item.TemplateId))
                        {
                            if (string.IsNullOrWhiteSpace(adjustment.Quality) || item.Qualities.Any(quality => quality.Name.Equals(adjustment.Quality) &&
                                                                                                    quality.Value.IsBetweenOrEqual(adjustment.QualityRange.Low, adjustment.QualityRange.High)))
                            {
                                myAdjustments *= adjustment.MarkRate;
                            }
                        }

                        value *= myAdjustments;
                    }
                }
            }

            return((int)Math.Truncate(value));
        }