Exemple #1
0
 public Item(
     string itemName = "Default",
     ItemType itemType = ItemType.None,
     StatSystem itemStats = null,
     DamageType damageType = DamageType.None,
     AmmoType itemShoots = AmmoType.None,
     ItemQuality itemQuality = ItemQuality.None,
     double value = 0.0,
     int x = 0,
     int y = 0,
     int quantity = 1)
 {
     if (itemStats != null)
     {
         Stats = itemStats;
     }
     else
     {
         Stats = new StatSystem();
     }
     Name = itemName;
     type = itemType;
     ammo = itemShoots;
     Count = quantity;
     Quality = itemQuality;
     damage = damageType;
     Value = value;
     MapX = x;
     MapY = y;
 }
Exemple #2
0
 public Item(uint id, string name, string desc, uint type, uint quality, uint equipable, uint stackable) {
     itemID = id;
     itemName = name;
     itemDesc = desc;
     itemType = (ItemType)type;
     itemQuality = (ItemQuality)quality;
     itemEquipable = equipable == 0 ? false : true;
     itemStack = stackable == 0 ? false : true;
 }
Exemple #3
0
 public Item(uint id, string name, string desc, ItemType type, ItemQuality quality, bool equipable,bool stackable) {
     itemID = id;
     itemName = name;
     itemDesc = desc;
     itemType = type;
     itemQuality = quality;
     itemEquipable = equipable;
     itemStack = stackable;
 }
Exemple #4
0
 /// <summary>
 /// Generates an MD5 Hash given the dropped item parameters
 /// </summary>
 /// <param name="position">The Vector3 position of hte item</param>
 /// <param name="actorSNO">The ActorSNO of the item</param>
 /// <param name="name">The Name of the item</param>
 /// <param name="worldID">The current World ID</param>
 /// <param name="itemQuality">The ItemQuality of the item</param>
 /// <param name="itemLevel">The Item Level</param>
 public static string GenerateItemHash(Vector3 position, int actorSNO, string name, int worldID, ItemQuality itemQuality, int itemLevel)
 {
     using (MD5 md5 = MD5.Create())
     {
         string itemHashBase = String.Format("{0}{1}{2}{3}{4}{5}", position, actorSNO, name, worldID, itemQuality, itemLevel);
         string itemHash = GetMd5Hash(md5, itemHashBase);
         return itemHash;
     }
 }
 public ItemDefinition(int quality, int itemLevel, int requiredLevel, int baseGoldValue, int maxSockets, int maxStackAmount, int itemTypeHash)
 {
     Quality = (ItemQuality)quality;
     ItemLevel = itemLevel;
     RequiredLevel = requiredLevel;
     BaseGoldValue = baseGoldValue;
     MaxSockets = maxSockets;
     MaxStackAmount = maxStackAmount;
     ItemTypeHash = itemTypeHash;
 }
Exemple #6
0
 public PickupItem(string name, string internalName, int level, ItemQuality quality, int balanceId, ItemBaseType dbItemBaseType, 
     ItemType dbItemType, bool isOneHand, bool isTwoHand, FollowerType followerType, int acdGuid, int dynamicID = 0)
 {
     Name = name;
     InternalName = Trinity.NameNumberTrimRegex.Replace(internalName, "");
     Level = level;
     Quality = quality;
     BalanceID = balanceId;
     DBBaseType = dbItemBaseType;
     DBItemType = dbItemType;
     IsOneHand = isOneHand;
     IsTwoHand = isTwoHand;
     ItemFollowerType = followerType;
     ACDGuid = acdGuid;
     DynamicID = dynamicID;
     WorldId = Trinity.Player.WorldID;
 }
        private static void LootedItemLog(GilesItemType thisgilesitemtype, GilesBaseItemType thisgilesbasetype, ItemQuality itemQuality)
        {
            if (thisgilesitemtype == GilesItemType.HealthPotion)
                return;

            //No profile set.. because new game?
                if (Bot.BotStatistics.ProfileStats.CurrentProfile==null)
                return;

            switch (thisgilesbasetype)
            {
                case GilesBaseItemType.WeaponOneHand:
                case GilesBaseItemType.WeaponTwoHand:
                case GilesBaseItemType.WeaponRange:
                case GilesBaseItemType.Offhand:
                case GilesBaseItemType.Armor:
                case GilesBaseItemType.Jewelry:
                case GilesBaseItemType.FollowerItem:
                    if (itemQuality > ItemQuality.Rare6)
                    {
                                Bot.BotStatistics.ProfileStats.CurrentProfile.ItemStats.lootedItemTotals[3]++;
                        //Statistics.ItemStats.CurrentGame.lootedItemTotals[3]++;
                    }
                    else if (itemQuality > ItemQuality.Magic3)
                    {
                                Bot.BotStatistics.ProfileStats.CurrentProfile.ItemStats.lootedItemTotals[2]++;
                    }
                    else
                                Bot.BotStatistics.ProfileStats.CurrentProfile.ItemStats.lootedItemTotals[1]++;
                    break;

                case GilesBaseItemType.Unknown:
                case GilesBaseItemType.Misc:
                          if (thisgilesitemtype== GilesItemType.CraftingMaterial||thisgilesitemtype== GilesItemType.CraftingPlan||thisgilesitemtype== GilesItemType.CraftTome)
                                Bot.BotStatistics.ProfileStats.CurrentProfile.ItemStats.lootedItemTotals[(int)LootIndex.Crafting]++;
                          else if (thisgilesitemtype==GilesItemType.InfernalKey)
                                Bot.BotStatistics.ProfileStats.CurrentProfile.ItemStats.lootedItemTotals[(int)LootIndex.Key]++;
                          else
                                Bot.BotStatistics.ProfileStats.CurrentProfile.ItemStats.lootedItemTotals[0]++;
                          break;
                case GilesBaseItemType.Gem:
                          Bot.BotStatistics.ProfileStats.CurrentProfile.ItemStats.lootedItemTotals[(int)LootIndex.Gem]++;
                    break;
            }
        }
Exemple #8
0
 public CachedItem(DiaItem diaItem)
 {
     try
     {
         if (diaItem == null)
         {
             CachingFailed = true;
             return;
         }
         Quality = diaItem.CommonData.ItemQualityLevel;
         base.BaseInit(diaItem);
     }
     catch (Exception e)
     {
         CachingFailed = true;
         return;
     }
 }
Exemple #9
0
		protected Group(Character leader, byte maxGroupUnits)
		{
			// m_syncLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
			m_syncLock = new ReaderWriterLockSlim();
			m_subGroups = new SubGroup[maxGroupUnits];

			for (byte i = 0; i < maxGroupUnits; i++)
			{
				m_subGroups[i] = new SubGroup(this, i);
			}

			m_targetIcons = new EntityId[TargetIconCount];
			for (int i = 0; i < m_targetIcons.Length; i++)
				m_targetIcons[i] = EntityId.Zero;

			m_lootMethod = LootMethod.GroupLoot;
			m_lootThreshold = ItemQuality.Uncommon;
			m_DungeonDifficulty = 0;

			var member = AddMember(leader, false);
			Leader = member;
			m_masterLooter = null;
			// update will follow when the 2nd guy joins
		}
 public WearableItem(StatsList statsList, Currency price, ItemQuality itemQuality)
     : this(statsList, price, itemQuality, 0)
 {
 }
Exemple #11
0
        /// <summary>Get the data to display for this subject.</summary>
        /// <param name="metadata">Provides metadata that's not available from the game data directly.</param>
        public override IEnumerable <ICustomField> GetData(Metadata metadata)
        {
            // get data
            Item    item       = this.Target;
            SObject obj        = item as SObject;
            bool    isObject   = obj != null;
            bool    isCrop     = this.FromCrop != null;
            bool    isSeed     = this.SeedForCrop != null;
            bool    isDeadCrop = this.FromCrop?.dead.Value == true;
            bool    canSell    = obj?.canBeShipped() == true || metadata.Shops.Any(shop => shop.BuysCategories.Contains(item.Category));

            // get overrides
            bool showInventoryFields = true;

            {
                ObjectData objData = metadata.GetObject(item, this.Context);
                if (objData != null)
                {
                    this.Name = objData.NameKey != null?this.Translate(objData.NameKey) : this.Name;

                    this.Description = objData.DescriptionKey != null?this.Translate(objData.DescriptionKey) : this.Description;

                    this.Type = objData.TypeKey != null?this.Translate(objData.TypeKey) : this.Type;

                    showInventoryFields = objData.ShowInventoryFields ?? true;
                }
            }

            // don't show data for dead crop
            if (isDeadCrop)
            {
                yield return(new GenericField(this.GameHelper, this.Translate(L10n.Crop.Summary), this.Translate(L10n.Crop.SummaryDead)));

                yield break;
            }

            // crop fields
            if (isCrop || isSeed)
            {
                // get crop
                Crop crop = this.FromCrop ?? this.SeedForCrop;

                // get harvest schedule
                int  harvestablePhase   = crop.phaseDays.Count - 1;
                bool canHarvestNow      = (crop.currentPhase.Value >= harvestablePhase) && (!crop.fullyGrown.Value || crop.dayOfCurrentPhase.Value <= 0);
                int  daysToFirstHarvest = crop.phaseDays.Take(crop.phaseDays.Count - 1).Sum(); // ignore harvestable phase

                // add next-harvest field
                if (isCrop)
                {
                    // calculate next harvest
                    int   daysToNextHarvest = 0;
                    SDate dayOfNextHarvest  = null;
                    if (!canHarvestNow)
                    {
                        // calculate days until next harvest
                        int daysUntilLastPhase = daysToFirstHarvest - crop.dayOfCurrentPhase.Value - crop.phaseDays.Take(crop.currentPhase.Value).Sum();
                        {
                            // growing: days until next harvest
                            if (!crop.fullyGrown.Value)
                            {
                                daysToNextHarvest = daysUntilLastPhase;
                            }

                            // regrowable crop harvested today
                            else if (crop.dayOfCurrentPhase.Value >= crop.regrowAfterHarvest.Value)
                            {
                                daysToNextHarvest = crop.regrowAfterHarvest.Value;
                            }

                            // regrowable crop
                            else
                            {
                                daysToNextHarvest = crop.dayOfCurrentPhase.Value; // dayOfCurrentPhase decreases to 0 when fully grown, where <=0 is harvestable
                            }
                        }
                        dayOfNextHarvest = SDate.Now().AddDays(daysToNextHarvest);
                    }

                    // generate field
                    string summary;
                    if (canHarvestNow)
                    {
                        summary = this.Translate(L10n.Crop.HarvestNow);
                    }
                    else if (Game1.currentLocation.Name != Constant.LocationNames.Greenhouse && !crop.seasonsToGrowIn.Contains(dayOfNextHarvest.Season))
                    {
                        summary = this.Translate(L10n.Crop.HarvestTooLate, new { date = this.Stringify(dayOfNextHarvest) });
                    }
                    else
                    {
                        summary = $"{this.Stringify(dayOfNextHarvest)} ({this.Text.GetPlural(daysToNextHarvest, L10n.Generic.Tomorrow, L10n.Generic.InXDays).Tokens(new { count = daysToNextHarvest })})";
                    }

                    yield return(new GenericField(this.GameHelper, this.Translate(L10n.Crop.Harvest), summary));
                }

                // crop summary
                {
                    List <string> summary = new List <string>();

                    // harvest
                    summary.Add(crop.regrowAfterHarvest.Value == -1
                        ? this.Translate(L10n.Crop.SummaryHarvestOnce, new { daysToFirstHarvest = daysToFirstHarvest })
                        : this.Translate(L10n.Crop.SummaryHarvestMulti, new { daysToFirstHarvest = daysToFirstHarvest, daysToNextHarvests = crop.regrowAfterHarvest })
                                );

                    // seasons
                    summary.Add(this.Translate(L10n.Crop.SummarySeasons, new { seasons = string.Join(", ", this.Text.GetSeasonNames(crop.seasonsToGrowIn)) }));

                    // drops
                    if (crop.minHarvest != crop.maxHarvest && crop.chanceForExtraCrops.Value > 0)
                    {
                        summary.Add(this.Translate(L10n.Crop.SummaryDropsXToY, new { min = crop.minHarvest, max = crop.maxHarvest, percent = Math.Round(crop.chanceForExtraCrops.Value * 100, 2) }));
                    }
                    else if (crop.minHarvest.Value > 1)
                    {
                        summary.Add(this.Translate(L10n.Crop.SummaryDropsX, new { count = crop.minHarvest }));
                    }

                    // crop sale price
                    Item drop = this.GameHelper.GetObjectBySpriteIndex(crop.indexOfHarvest.Value);
                    summary.Add(this.Translate(L10n.Crop.SummarySellsFor, new { price = GenericField.GetSaleValueString(this.GetSaleValue(drop, false, metadata), 1, this.Text) }));

                    // generate field
                    yield return(new GenericField(this.GameHelper, this.Translate(L10n.Crop.Summary), "-" + string.Join($"{Environment.NewLine}-", summary)));
                }
            }

            // indoor pot crop
            if (obj is IndoorPot pot)
            {
                Crop potCrop = pot.hoeDirt.Value.crop;
                if (potCrop != null)
                {
                    Item drop = this.GameHelper.GetObjectBySpriteIndex(potCrop.indexOfHarvest.Value);
                    yield return(new LinkField(this.GameHelper, this.Translate(L10n.Item.Contents), drop.DisplayName, () => new ItemSubject(this.GameHelper, this.Text, this.GameHelper.GetObjectBySpriteIndex(potCrop.indexOfHarvest.Value), ObjectContext.World, knownQuality: false, fromCrop: potCrop)));
                }
            }

            // held object
            if (obj?.heldObject?.Value != null)
            {
                if (obj is Cask cask)
                {
                    // get cask data
                    SObject     agingObj       = cask.heldObject.Value;
                    ItemQuality curQuality     = (ItemQuality)agingObj.Quality;
                    string      curQualityName = this.Translate(L10n.For(curQuality));

                    // calculate aging schedule
                    float effectiveAge = metadata.Constants.CaskAgeSchedule.Values.Max() - cask.daysToMature.Value;
                    var   schedule     =
                        (
                            from entry in metadata.Constants.CaskAgeSchedule
                            let quality = entry.Key
                                          let baseDays = entry.Value
                                                         where baseDays > effectiveAge
                                                         orderby baseDays ascending
                                                         let daysLeft = (int)Math.Ceiling((baseDays - effectiveAge) / cask.agingRate.Value)
                                                                        select new
                    {
                        Quality = quality,
                        DaysLeft = daysLeft,
                        HarvestDate = SDate.Now().AddDays(daysLeft)
                    }
                        )
                        .ToArray();

                    // display fields
                    yield return(new ItemIconField(this.GameHelper, this.Translate(L10n.Item.Contents), obj.heldObject.Value));

                    if (cask.MinutesUntilReady <= 0 || !schedule.Any())
                    {
                        yield return(new GenericField(this.GameHelper, this.Translate(L10n.Item.CaskSchedule), this.Translate(L10n.Item.CaskScheduleNow, new { quality = curQualityName })));
                    }
                    else
                    {
                        string scheduleStr = string.Join(Environment.NewLine, (
                                                             from entry in schedule
                                                             let tokens = new { quality = this.Translate(L10n.For(entry.Quality)), count = entry.DaysLeft, date = entry.HarvestDate }
                                                             let str = this.Text.GetPlural(entry.DaysLeft, L10n.Item.CaskScheduleTomorrow, L10n.Item.CaskScheduleInXDays).Tokens(tokens)
                                                                       select $"-{str}"
                                                             ));
                        yield return(new GenericField(this.GameHelper, this.Translate(L10n.Item.CaskSchedule), this.Translate(L10n.Item.CaskSchedulePartial, new { quality = curQualityName }) + Environment.NewLine + scheduleStr));
                    }
                }
                else if (obj is Furniture)
                {
                    string summary = this.Translate(L10n.Item.ContentsPlaced, new { name = obj.heldObject.Value.DisplayName });
                    yield return(new ItemIconField(this.GameHelper, this.Translate(L10n.Item.Contents), obj.heldObject.Value, summary));
                }
                else if (obj.ParentSheetIndex == Constant.ObjectIndexes.AutoGrabber)
                {
                    string readyText = this.Text.Stringify(obj.heldObject.Value is Chest output && output.items.Any());
                    yield return(new GenericField(this.GameHelper, this.Translate(L10n.Item.Contents), readyText));
                }
                else
                {
                    string summary = obj.MinutesUntilReady <= 0
                        ? this.Translate(L10n.Item.ContentsReady, new { name = obj.heldObject.Value.DisplayName })
                        : this.Translate(L10n.Item.ContentsPartial, new { name = obj.heldObject.Value.DisplayName, time = this.Stringify(TimeSpan.FromMinutes(obj.MinutesUntilReady)) });
                    yield return(new ItemIconField(this.GameHelper, this.Translate(L10n.Item.Contents), obj.heldObject.Value, summary));
                }
            }

            // item
            if (showInventoryFields)
            {
                // needed for
                {
                    List <string> neededFor = new List <string>();

                    // bundles
                    if (isObject)
                    {
                        string[] bundles = (
                            from bundle in this.GetUnfinishedBundles(obj)
                            orderby bundle.Area, bundle.DisplayName
                            let countNeeded = this.GetIngredientCountNeeded(bundle, obj)
                                              select countNeeded > 1
                                ? $"{this.GetTranslatedBundleArea(bundle)}: {bundle.DisplayName} x {countNeeded}"
                                : $"{this.GetTranslatedBundleArea(bundle)}: {bundle.DisplayName}"
                            ).ToArray();
                        if (bundles.Any())
                        {
                            neededFor.Add(this.Translate(L10n.Item.NeededForCommunityCenter, new { bundles = string.Join(", ", bundles) }));
                        }
                    }

                    // polyculture achievement
                    if (isObject && metadata.Constants.PolycultureCrops.Contains(obj.ParentSheetIndex))
                    {
                        int needed = metadata.Constants.PolycultureCount - this.GameHelper.GetShipped(obj.ParentSheetIndex);
                        if (needed > 0)
                        {
                            neededFor.Add(this.Translate(L10n.Item.NeededForPolyculture, new { count = needed }));
                        }
                    }

                    // full shipment achievement
                    if (isObject && this.GameHelper.GetFullShipmentAchievementItems().Any(p => p.Key == obj.ParentSheetIndex && !p.Value))
                    {
                        neededFor.Add(this.Translate(L10n.Item.NeededForFullShipment));
                    }

                    // a full collection achievement
                    LibraryMuseum museum = Game1.locations.OfType <LibraryMuseum>().FirstOrDefault();
                    if (museum != null && museum.isItemSuitableForDonation(obj))
                    {
                        neededFor.Add(this.Translate(L10n.Item.NeededForFullCollection));
                    }

                    // yield
                    if (neededFor.Any())
                    {
                        yield return(new GenericField(this.GameHelper, this.Translate(L10n.Item.NeededFor), string.Join(", ", neededFor)));
                    }
                }

                // sale data
                if (canSell && !isCrop)
                {
                    // sale price
                    string saleValueSummary = GenericField.GetSaleValueString(this.GetSaleValue(item, this.KnownQuality, metadata), item.Stack, this.Text);
                    yield return(new GenericField(this.GameHelper, this.Translate(L10n.Item.SellsFor), saleValueSummary));

                    // sell to
                    List <string> buyers = new List <string>();
                    if (obj?.canBeShipped() == true)
                    {
                        buyers.Add(this.Translate(L10n.Item.SellsToShippingBox));
                    }
                    buyers.AddRange(
                        from shop in metadata.Shops
                        where shop.BuysCategories.Contains(item.Category)
                        let name = this.Translate(shop.DisplayKey).ToString()
                                   orderby name
                                   select name
                        );
                    yield return(new GenericField(this.GameHelper, this.Translate(L10n.Item.SellsTo), string.Join(", ", buyers)));
                }

                // gift tastes
                var giftTastes = this.GetGiftTastes(item, metadata);
                yield return(new ItemGiftTastesField(this.GameHelper, this.Translate(L10n.Item.LovesThis), giftTastes, GiftTaste.Love));

                yield return(new ItemGiftTastesField(this.GameHelper, this.Translate(L10n.Item.LikesThis), giftTastes, GiftTaste.Like));
            }

            // fence
            if (item is Fence fence)
            {
                string healthLabel = this.Translate(L10n.Item.FenceHealth);

                // health
                if (Game1.getFarm().isBuildingConstructed(Constant.BuildingNames.GoldClock))
                {
                    yield return(new GenericField(this.GameHelper, healthLabel, this.Translate(L10n.Item.FenceHealthGoldClock)));
                }
                else
                {
                    float  maxHealth = fence.isGate.Value ? fence.maxHealth.Value * 2 : fence.maxHealth.Value;
                    float  health    = fence.health.Value / maxHealth;
                    double daysLeft  = Math.Round(fence.health.Value * metadata.Constants.FenceDecayRate / 60 / 24);
                    double percent   = Math.Round(health * 100);
                    yield return(new PercentageBarField(this.GameHelper, healthLabel, (int)fence.health.Value, (int)maxHealth, Color.Green, Color.Red, this.Translate(L10n.Item.FenceHealthSummary, new { percent = percent, count = daysLeft })));
                }
            }

            // recipes
            if (item.GetSpriteType() == ItemSpriteType.Object)
            {
                RecipeModel[] recipes = this.GameHelper.GetRecipesForIngredient(this.DisplayItem).ToArray();
                if (recipes.Any())
                {
                    yield return(new RecipesForIngredientField(this.GameHelper, this.Translate(L10n.Item.Recipes), item, recipes, this.Text));
                }
            }

            // owned
            if (showInventoryFields && !isCrop && !(item is Tool))
            {
                yield return(new GenericField(this.GameHelper, this.Translate(L10n.Item.Owned), this.Translate(L10n.Item.OwnedSummary, new { count = this.GameHelper.CountOwnedItems(item) })));
            }

            // see also crop
            bool seeAlsoCrop =
                isSeed &&
                item.ParentSheetIndex != this.SeedForCrop.indexOfHarvest.Value && // skip seeds which produce themselves (e.g. coffee beans)
                !(item.ParentSheetIndex >= 495 && item.ParentSheetIndex <= 497) && // skip random seasonal seeds
                item.ParentSheetIndex != 770;    // skip mixed seeds

            if (seeAlsoCrop)
            {
                Item drop = this.GameHelper.GetObjectBySpriteIndex(this.SeedForCrop.indexOfHarvest.Value);
                yield return(new LinkField(this.GameHelper, this.Translate(L10n.Item.SeeAlso), drop.DisplayName, () => new ItemSubject(this.GameHelper, this.Text, drop, ObjectContext.Inventory, false, this.SeedForCrop)));
            }
        }
Exemple #12
0
        /// <summary>
        ///
        /// </summary>
        private void fillPickupDic(int dynamicID, ItemType itemtype, string name, string internalname, ItemQuality quality, int level, bool onehanded, bool twohanded, int balanceid)
        {
            object result;

            itemDic = new Dictionary <string, object>();

            // add log unique key
            itemDic.Add("[KEY]", dynamicID.ToString());

            // - BASETYPE ---------------------------------------------------------//
            itemDic.Add("[BASETYPE]", itemtype.ToString());

            // - TYPE -------------------------------------------------------------//
            /// TODO remove this check if it isnt necessary anymore
            if (itemtype == ItemType.Unknown && (name.Contains("Plan") || name.Contains("Design")))
            {
                FunkyTownRunPlugin.DBLog.InfoFormat("There are still buggy itemType infos for craftingPlan around {0} has itemType = {1}", name, itemtype);
                result = ItemType.CraftingPlan.ToString();
            }
            else
            {
                result = itemtype.ToString();
            }
            itemDic.Add("[TYPE]", result);

            // - QUALITY -------------------------------------------------------//
            itemDic.Add("[QUALITY]", Regex.Replace(quality.ToString(), @"[\d-]", string.Empty));
            itemDic.Add("[D3QUALITY]", quality.ToString());

            // - ROLL ----------------------------------------------------------//
            float roll;

            if (float.TryParse(Regex.Replace(quality.ToString(), @"[^\d]", string.Empty), out roll))
            {
                itemDic.Add("[ROLL]", roll);
            }
            else
            {
                itemDic.Add("[ROLL]", 0f);
            }

            // - NAME -------------------------------------------------------------//
            itemDic.Add("[NAME]", name.ToString().Replace(" ", ""));

            // - LEVEL ------------------------------------------------------------//
            itemDic.Add("[LEVEL]", (float)level);
            itemDic.Add("[ONEHAND]", onehanded);
            itemDic.Add("[TWOHAND]", twohanded);
            itemDic.Add("[UNIDENT]", (bool)true);
            itemDic.Add("[INTNAME]", internalname);
            itemDic.Add("[ITEMID]", balanceid.ToString());
        }
Exemple #13
0
 public List <int> weaponEffects = new List <int>(); //附魔效果
 /// <summary>
 /// 设置数据
 /// </summary>
 /// <param name="damage"></param>
 /// <param name="wt"></param>
 /// <param name="id"></param>
 /// <param name="name"></param>
 /// <param name="quality"></param>
 /// <param name="type"></param>
 /// <param name="description"></param>
 /// <param name="amount"></param>
 /// <param name="capacity"></param>
 /// <param name="buyprice"></param>
 /// <param name="sellprice"></param>
 /// <param name="assetId"></param>
 public void SetData(int damage, WeaponType wt, List <int> weaponEffects, int id, string name, ItemQuality quality, ItemType type, string description, int amount, int capacity, int buyprice, int sellprice)
 {
     SetData(id, name, quality, type, description, amount, capacity, buyprice, sellprice);
     this.damage        = damage;
     this.weaponType    = wt;
     this.weaponEffects = weaponEffects;
 }
Exemple #14
0
 /// <summary>
 /// Initializes variable set for single object refresh
 /// </summary>
 private static void RefreshStepInit()
 {
     CurrentCacheObject = new TrinityCacheObject();
     // Start this object as off as unknown type
     CurrentCacheObject.Type = TrinityObjectType.Unknown;
     CurrentCacheObject.GizmoType = GizmoType.None;
     CurrentCacheObject.Distance = 0f;
     CurrentCacheObject.Radius = 0f;
     c_ZDiff = 0f;
     c_ItemDisplayName = "";
     c_ItemLink = "";
     CurrentCacheObject.InternalName = "";
     c_IgnoreReason = "";
     c_IgnoreSubStep = "";
     CurrentCacheObject.ACDGuid = -1;
     CurrentCacheObject.RActorGuid = -1;
     CurrentCacheObject.DynamicID = -1;
     CurrentCacheObject.GameBalanceID = -1;
     CurrentCacheObject.ActorSNO = -1;
     c_ItemLevel = -1;
     c_GoldStackSize = -1;
     c_HitPointsPct = -1;
     c_HitPoints = -1;
     c_IsOneHandedItem = false;
     c_IsTwoHandedItem = false;
     c_unit_IsElite = false;
     c_unit_IsRare = false;
     c_unit_IsUnique = false;
     c_unit_IsMinion = false;
     c_unit_IsTreasureGoblin = false;
     c_unit_IsAttackable = false;
     c_unit_HasShieldAffix = false;
     c_IsEliteRareUnique = false;
     c_IsObstacle = false;
     c_HasBeenNavigable = false;
     c_HasBeenRaycastable = false;
     c_HasBeenInLoS = false;
     c_ItemMd5Hash = string.Empty;
     c_ItemQuality = ItemQuality.Invalid;
     c_DBItemBaseType = ItemBaseType.None;
     c_DBItemType = ItemType.Unknown;
     c_item_tFollowerType = FollowerType.None;
     _cItemTinityItemType = TrinityItemType.Unknown;
     c_unit_MonsterSize = MonsterSize.Unknown;
     c_diaObject = null;
     c_diaGizmo = null;
     c_CurrentAnimation = SNOAnim.Invalid;
     c_HasDotDPS = false;
     c_MonsterAffixes = MonsterAffixes.None;
 }
Exemple #15
0
        /// <summary>Get a schedule indicating when a fruit tree will begin producing higher-quality fruit.</summary>
        /// <param name="tree">The fruit tree.</param>
        /// <param name="currentQuality">The current quality produced by the tree.</param>
        /// <param name="daysPerQuality">The number of days before the tree begins producing a higher quality.</param>
        private IEnumerable <KeyValuePair <ItemQuality, int> > GetQualitySchedule(FruitTree tree, ItemQuality currentQuality, int daysPerQuality)
        {
            if (tree.daysUntilMature > 0)
            {
                yield break; // not mature yet
            }
            // yield current
            yield return(new KeyValuePair <ItemQuality, int>(currentQuality, 0));

            // yield future qualities
            int dayOffset = daysPerQuality - Math.Abs(tree.daysUntilMature % daysPerQuality);

            foreach (ItemQuality futureQuality in new[] { ItemQuality.Silver, ItemQuality.Gold, ItemQuality.Iridium })
            {
                if (currentQuality >= futureQuality)
                {
                    continue;
                }

                yield return(new KeyValuePair <ItemQuality, int>(futureQuality, dayOffset));

                dayOffset += daysPerQuality;
            }
        }
Exemple #16
0
        /// <summary>
        ///     Reads this Item's value from it's source and, if the read value is different from the present value of the
        ///     <see cref="Value"/> property, updates the Value and fires the <see cref="Changed"/> event by invoking the
        ///     <see cref="Write"/> method and passing the read value.
        /// </summary>
        /// <remarks>
        ///     If the <see cref="ItemSource"/> of the Item is <see cref="ItemSource.Item"/>, the value is retrieved from the
        ///     <see cref="ReadFromSource"/> method of the <see cref="SourceItem"/>. If the ItemSource is
        ///     <see cref="ItemSource.Provider"/>, the value is retrieved from the <see cref="Provider"/> object's
        ///     <see cref="IItemProvider.Read(Item)"/> method. If the ItemSource is <see cref="ItemSource.Unknown"/>, the present
        ///     value of the <see cref="Value"/> property is returned. If the ItemSource is <see cref="ItemSource.Unresolved"/>, a
        ///     null value is returned.
        /// </remarks>
        /// <returns>The retrieved value.</returns>
        /// <threadsafety instance="true"/>
        public virtual object ReadFromSource()
        {
            // recursively call ReadFromSource() on each child in this Item's children collection this allows us to update whole
            // branches of the model with a single read
            if (HasChildren)
            {
                IList <Item> children;

                childrenLock.EnterReadLock();

                try
                {
                    children = Children;
                }
                finally
                {
                    childrenLock.ExitReadLock();
                }

                foreach (Item child in Children)
                {
                    child.ReadFromSource();
                }
            }

            // prepare a variable to hold the read result
            object      value   = new object();
            ItemQuality quality = ItemQuality.Good;

            // if the source is an Item, return the result from that Item's ReadFromSource() method. This will recursively refresh
            // each Item in the chain until the last Item (that which the Source = ItemProvider) is refreshed directly from the source.
            if (Source == ItemSource.Item)
            {
                sourceItemLock.EnterReadLock();

                try
                {
                    value = SourceItem.ReadFromSource();
                }
                finally
                {
                    sourceItemLock.ExitReadLock();
                }
            }
            else if (Source == ItemSource.Provider)
            {
                // if the source of this Item is an ItemProvider and it implements IReadable, return the value of the Read() method
                // for the provider. this will be the final read in the chain.
                providerLock.EnterReadLock();

                try
                {
                    value = Provider.Read(this);
                }
                catch (Exception)
                {
                    value   = null;
                    quality = ItemQuality.Bad;
                }
                finally
                {
                    providerLock.ExitReadLock();
                }
            }
            else if (Source == ItemSource.Unknown)
            {
                // if the source of this Item is unknown, the authoritative source for the Item's value is itself, so return the
                // Value property.
                valueLock.EnterReadLock();

                try
                {
                    value = Value;
                }
                finally
                {
                    valueLock.ExitReadLock();
                }
            }
            else if (Source == ItemSource.Unresolved)
            {
                // if the source of this Item is an unresolved FQN, return null.
                value   = null;
                quality = ItemQuality.Bad;
            }

            ChangeValue(value, quality);

            return(Read());
        }
 public Armor(string name, float weight, ItemQuality quality, int defense, ArmorTypes type) : base(name, weight, quality)
 {
     this.Defense = defense;
     this.Type    = type;
 }
 public Weapon(string name, float weight, ItemQuality quality, int damage) : base(name, weight, quality)
 {
     this.Damage = damage;
 }
 public Clothing(string name, float weight, ItemQuality quality, ClothingTypes type) : base(name, weight, quality)
 {
     this.Type = type;
 }
Exemple #20
0
	public void setItemQuality (ItemQuality itemQuality) {
		this.itemQuality = itemQuality;
	}
Exemple #21
0
        /// <summary>
        /// Adds all initial Looters of nearby Characters who may loot this Loot.
        /// When all of the initial Looters gave up the Loot, the Loot becomes free for all.
        /// </summary>
        public void Initialize(Character chr, IList<LooterEntry> looters, MapId mapid)
        {
            Looters = looters;
            if (IsGroupLoot)
            {
                var groupMember = chr.GroupMember;
                if (groupMember != null)
                {
                    Group = groupMember.Group;
                    Method = Group.LootMethod;
                    Threshold = Group.LootThreshold;

                    var decision = Method == LootMethod.MasterLoot ? LootDecision.Master : LootDecision.Rolling;

                    IList<LooterEntry> nearbyLooters = null;

                    // TODO: masterlooter
                    foreach (var item in Items)
                    {
                        if (item.Template.Flags.HasFlag(ItemFlags.MultiLoot) ||
                            item.Template.Quality >= Threshold)
                        {
                            if (UsesRoundRobin)
                            {
                                nearbyLooters = new List<LooterEntry>();
                                Group.GetNearbyLooters(Lootable, chr, nearbyLooters);
                            }
                            else
                            {
                                nearbyLooters = Looters;
                            }
                        }

                        if (item.Template.Flags.HasFlag(ItemFlags.MultiLoot))
                        {
                            item.AddMultiLooters(nearbyLooters);
                        }
                        else if (item.Template.Quality >= Threshold)
                        {
                            item.Decision = decision;
                            if (decision == LootDecision.Rolling)
                            {
                                item.RollProgress = new LootRollProgress(this, item, nearbyLooters);
                                LootHandler.SendStartRoll(this, item, nearbyLooters, mapid);
                            }
                        }
                    }
                    return;
                }
            }
            Method = LootMethod.FreeForAll;
        }
 /// <summary>
 /// Returns the foreground (text) <see cref="System.Drawing.Color"/> for the specified <see cref="Rift.Data.ItemQuality"/>
 /// </summary>
 /// <param name="quality">A <see cref="Rift.Data.ItemQuality"/> to colorize.</param>
 public static Color GetForeColor(ItemQuality quality)
 {
     return colors[quality].ForeColor;
 }
 /// <summary>
 /// Returns the background <see cref="System.Drawing.Color"/> for the specified <see cref="Rift.Data.ItemQuality"/>
 /// </summary>
 /// <param name="quality">A <see cref="Rift.Data.ItemQuality"/> to colorize.</param>
 public static Color GetBackColor(ItemQuality quality)
 {
     return colors[quality].BackColor;
 }
        internal static bool SellValidation(string thisinternalname, int thislevel, ItemQuality thisquality, ItemType thisdbitemtype, FollowerType thisfollowertype)
        {
            PluginItemTypes thisPluginItemType = ItemFunc.DetermineItemType(thisinternalname, thisdbitemtype, thisfollowertype);
            PluginBaseItemTypes thisGilesBaseType = ItemFunc.DetermineBaseType(thisPluginItemType);

            switch (thisGilesBaseType)
            {
                case PluginBaseItemTypes.WeaponRange:
                case PluginBaseItemTypes.WeaponOneHand:
                case PluginBaseItemTypes.WeaponTwoHand:
                case PluginBaseItemTypes.Armor:
                case PluginBaseItemTypes.Offhand:
                case PluginBaseItemTypes.Jewelry:
                case PluginBaseItemTypes.FollowerItem:
                    return true;
                case PluginBaseItemTypes.Gem:
                case PluginBaseItemTypes.Misc:
                case PluginBaseItemTypes.Unknown:
                    if (thisPluginItemType == PluginItemTypes.LegendaryCraftingMaterial)
                        return true;
                    //Sell any plans not already stashed.
                    return thisdbitemtype == ItemType.CraftingPlan;
            } // Switch giles base item type
            return false;
        }
Exemple #25
0
 public Consumable(int id, string name, ItemType type, ItemQuality quality, string des, int capacity, int buyPrice, int sellPrice, string sprite, int hp, int mp)
     : base(id, name, type, quality, des, capacity, buyPrice, sellPrice, sprite)
 {
     this.HP = hp;
     this.MP = mp;
 }
 public Accessoir(string name, float weight, ItemQuality quality, AccessoryTypes type) : base(name, weight, quality)
 {
     this.Type = type;
 }
Exemple #27
0
 /*********
 ** Public methods
 *********/
 /// <summary>Get the quality name.</summary>
 /// <param name="current">The quality.</param>
 public static string GetName(this ItemQuality current)
 {
     return(current.ToString().ToLower());
 }
Exemple #28
0
 public Weapon(int itemId, string itemName, string itemIconName, string gameObjectName, string itemDescription, bool isStackable, int maxStack, ItemType itemType, ItemQuality itemQuality, int itemCost, int defense, int strength, int agility, int intelligence, int stamina, int damageFrom, int damageTo, WeaponType weaponType, float speed)
     : base(itemId, itemName, itemIconName, gameObjectName, itemDescription, isStackable, maxStack, itemType, itemQuality, itemCost, defense, strength, agility, intelligence, stamina)
 {
     this.damageFrom = damageFrom;
     this.damageTo   = damageTo;
     this.weaponType = weaponType;
     this.speed      = speed;
 }
Exemple #29
0
 private Color32 GetQualityColor(ItemQuality itemClass)
 {
     return(STARTUP_DECLARATIONS.itemQualityColors[itemClass]);
 }
Exemple #30
0
 public MagicItem(ItemQuality quality)
 {
     this.Quality = quality;
 }
        internal static SalvageOption GetSalvageOption(ItemQuality qualityLevel)
        {
            if (qualityLevel >= ItemQuality.Inferior && qualityLevel <= ItemQuality.Superior)
            {
                return Trinity.Settings.Loot.TownRun.SalvageWhiteItemOption;
            }

            if (qualityLevel >= ItemQuality.Magic1 && qualityLevel <= ItemQuality.Magic3)
            {
                return Trinity.Settings.Loot.TownRun.SalvageBlueItemOption;
            }

            if (qualityLevel >= ItemQuality.Rare4 && qualityLevel <= ItemQuality.Rare6)
            {
                return Trinity.Settings.Loot.TownRun.SalvageYellowItemOption;
            }

            if (qualityLevel >= ItemQuality.Legendary)
            {
                return Trinity.Settings.Loot.TownRun.SalvageLegendaryItemOption;
            }
            return SalvageOption.Sell;
        }
Exemple #32
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

			int version = reader.PeekInt();

			switch (version)
			{
				case 1000:
					reader.ReadInt();
					this.m_Crafter = reader.ReadMobile();
					this.m_Resource = (CraftResource)reader.ReadInt();
					this.m_Quality = (ItemQuality)reader.ReadInt();
					break;
				case 0:
					// Only these two items had this base class prior to the version change
					if(this is ElvenPodium ||
						this is GiantReplicaAcorn)
					{
						reader.ReadInt();
						this.m_Crafter = reader.ReadMobile();
						this.m_Resource = (CraftResource)reader.ReadInt();
						this.m_Quality = (ItemQuality)reader.ReadInt();
					}
					// If we peeked a zero here any other way we should not consume data
					else
					{
						this.m_Crafter = null;
						this.m_Resource = CraftResource.None;
						this.m_Quality = ItemQuality.Normal;
					}
					break;
				default:
					throw new ArgumentException("Unhandled version number for CraftableFurniture");
			}
        }
Exemple #33
0
        /// <summary>
        ///
        /// </summary>
        public InterpreterAction checkPickUpItem(int dynamicID, ItemType itemtype, string name, string internalname, ItemQuality quality, int level, bool onehanded, bool twohanded, int balanceid, ItemEvaluationType evaluationType)
        {
            fillPickupDic(dynamicID, itemtype, name, internalname, quality, level, onehanded, twohanded, balanceid);

            return(checkItem(evaluationType));
        }
Exemple #34
0
        public string GetCommand(int entry, ItemClass iClass, int subClass, int unk0, string[] name,
            int dispId, ItemQuality quality, ItemFlag flags, ItemFlagExtra flags2, int buyPrice,
            int sellPrice, InventoryType invType, ClassMask allowClass, RaceMask allowRace, int itemLvl,
            int reqLvl, int reqSkill, int reqSkLvl, int reqSpell, int reqHonor, int reqCity,
            int reqRepFaction, int reqRepValue, int maxCount, int stacks, int contSlots, int statsCount,
            ItemModType[] statType, int[] statValue, int ssdId, int ssdVal, float[] dmgMin,
            float[] dmgMax, DamageType[] dmgType, int[] resistance, int delay, AmmoType ammoType,
            float rangedMod, int[] spellId, ItemSpellTriggerType[] spellTrigger, int[] spellCharges,
            int[] spellCooldown, int[] spellCategory, int[] spellCatCooldown, ItemBonding binding,
            string description, int pageText, Language langId, PageMaterial pageMat, int startQuest,
            int lockId, Material material, SheathType sheath, int randomProp, int randomSuffix,
            int block, int itemSet, int maxDura, int area, int map, BagFamilyMask bagFamily,
            TotemCategory totemCat, ItemSocketColor[] color, int[] content, int socketBonus,
            int gemProps, int reqDisEnchSkill, float armorDmgMod, int duration, int limitCategory,
            Holiday holidayId)
        {
            var builder = new CommandBuilder("item_template");

            builder.AddColumnValue("entry", entry);
            builder.AddColumnValue("class", (int)iClass);
            builder.AddColumnValue("subclass", subClass);
            builder.AddColumnValue("unk0", unk0);
            builder.AddColumnValue("name", name[0]);
            builder.AddColumnValue("displayid", dispId);
            builder.AddColumnValue("Quality", (int)quality);
            builder.AddColumnValue("Flags", (int)flags);
            builder.AddColumnValue("BuyCount", 1);
            builder.AddColumnValue("BuyPrice", buyPrice);
            builder.AddColumnValue("SellPrice", sellPrice);
            builder.AddColumnValue("InventoryType", (int)invType);
            builder.AddColumnValue("AllowableClass", (int)allowClass);
            builder.AddColumnValue("AllowableRace", (int)allowRace);
            builder.AddColumnValue("ItemLevel", itemLvl);
            builder.AddColumnValue("RequiredLevel", reqLvl);
            builder.AddColumnValue("RequiredSkill", reqSkill);
            builder.AddColumnValue("RequiredSkillRank", reqSkLvl);
            builder.AddColumnValue("requiredspell", reqSpell);
            builder.AddColumnValue("requiredhonorrank", reqHonor);
            builder.AddColumnValue("RequiredCityRank", reqCity);
            builder.AddColumnValue("RequiredReputationFaction", reqRepFaction);
            builder.AddColumnValue("RequiredReputationRank", reqRepValue);
            builder.AddColumnValue("maxcount", maxCount);

            var stackVal = stacks;
            if (SQLOutput.Format == SqlFormat.Mangos && stacks > 1000)
                stackVal = -1;

            builder.AddColumnValue("stackable", stackVal);
            builder.AddColumnValue("ContainerSlots", contSlots);
            builder.AddColumnValue("StatsCount", statsCount);

            for (var i = 0; i < 10; i++)
            {
                int type;
                int value;

                if (i > statsCount - 1)
                {
                    type = 0;
                    value = 0;
                }
                else
                {
                    type = (int)statType[i];
                    value = statValue[i];
                }

                builder.AddColumnValue("stat_type" + (i + 1), type);
                builder.AddColumnValue("stat_value" + (i + 1), value);
            }

            builder.AddColumnValue("ScalingStatDistribution", ssdId);
            builder.AddColumnValue("ScalingStatValue", ssdVal);

            for (var i = 0; i < 2; i++)
            {
                builder.AddColumnValue("dmg_min" + (i + 1), dmgMin[i]);
                builder.AddColumnValue("dmg_max" + (i + 1), dmgMax[i]);
                builder.AddColumnValue("dmg_type" + (i + 1), (int)dmgType[i]);
            }

            builder.AddColumnValue("armor", resistance[0]);
            builder.AddColumnValue("holy_res", resistance[1]);
            builder.AddColumnValue("fire_res", resistance[2]);
            builder.AddColumnValue("nature_res", resistance[3]);
            builder.AddColumnValue("frost_res", resistance[4]);
            builder.AddColumnValue("shadow_res", resistance[5]);
            builder.AddColumnValue("arcane_res", resistance[6]);
            builder.AddColumnValue("delay", delay);
            builder.AddColumnValue("ammo_type", (int)ammoType);
            builder.AddColumnValue("RangedModRange", rangedMod);

            for (var i = 0; i < 5; i++)
            {
                builder.AddColumnValue("spellid_" + (i + 1), spellId[i]);
                builder.AddColumnValue("spelltrigger_" + (i + 1), (int)spellTrigger[i]);
                builder.AddColumnValue("spellcharges_" + (i + 1), spellCharges[i]);
                builder.AddColumnValue("spellppmRate_" + (i + 1), 0);
                builder.AddColumnValue("spellcooldown_" + (i + 1), spellCooldown[i]);
                builder.AddColumnValue("spellcategory_" + (i + 1), spellCategory[i]);
                builder.AddColumnValue("spellcategorycooldown_" + (i + 1), spellCatCooldown[i]);
            }

            builder.AddColumnValue("bonding", (int)binding);
            builder.AddColumnValue("description", description);
            builder.AddColumnValue("PageText", pageText);
            builder.AddColumnValue("LanguageID", (int)langId);
            builder.AddColumnValue("PageMaterial", (int)pageMat);
            builder.AddColumnValue("startquest", startQuest);
            builder.AddColumnValue("lockid", lockId);
            builder.AddColumnValue("Material", (int)material);
            builder.AddColumnValue("sheath", (int)sheath);
            builder.AddColumnValue("RandomProperty", randomProp);
            builder.AddColumnValue("RandomSuffix", randomSuffix);
            builder.AddColumnValue("block", block);
            builder.AddColumnValue("itemset", itemSet);
            builder.AddColumnValue("MaxDurability", maxDura);
            builder.AddColumnValue("area", area);
            builder.AddColumnValue("map", map);
            builder.AddColumnValue("BagFamily", (int)bagFamily);
            builder.AddColumnValue("TotemCategory", (int)totemCat);

            for (var i = 0; i < 3; i++)
            {
                builder.AddColumnValue("socketColor_" + (i + 1), (int)color[i]);
                builder.AddColumnValue("socketContent_" + (i + 1), content[i]);
            }

            builder.AddColumnValue("socketBonus", socketBonus);
            builder.AddColumnValue("GemProperties", gemProps);
            builder.AddColumnValue("RequiredDisenchantSkill", reqDisEnchSkill);
            builder.AddColumnValue("ArmorDamageModifier", armorDmgMod);
            builder.AddColumnValue("Duration", duration);
            builder.AddColumnValue("ItemLimitCategory", limitCategory);
            builder.AddColumnValue("HolidayID", (int)holidayId);
            builder.AddColumnValue("ScriptName", string.Empty);
            builder.AddColumnValue("DisenchantID", 0);
            builder.AddColumnValue("FoodType", 0);
            builder.AddColumnValue("minMoneyLoot", 0);
            builder.AddColumnValue("maxMoneyLoot", 0);
            builder.AddColumnValue("NonConsumable", 0);

            return builder.BuildInsert(true);
        }
Exemple #35
0
 /// <summary>Get a translation for an enum value.</summary>
 /// <param name="quality">The item quality.</param>
 public static string For(ItemQuality quality)
 {
     return(I18n.GetByKey($"quality.{quality.GetName()}"));
 }
 private void SpawnBonusItem(HealthHaver enemy, ItemQuality itemQuality)
 {
     GameManager.Instance.RewardManager.SpawnTotallyRandomItem(enemy.specRigidbody.UnitCenter, itemQuality, itemQuality);
 }
Exemple #37
0
		/// <inheritdoc />
		public ItemQueryResponseInfo_Vanilla(ItemClassType classType, int subClassType, string[] itemNames, int displayId, ItemQuality quality, ItemFlags itemFlags, int buyPrice, int sellPrice, int inventoryType, uint allowableClass, int allowableRace, int itemLevel, int requiredLevel, int requiredSkill, int requiredSkillRank, int requiredSpell, int requiredHonorRank, int requiredCityRank, int requiredReptuationFaction, int requiredReptuationRank, int maxCount, int maxStackable, int containerSlots, StatInfo[] statInfos, ItemDamageDefinition[] itemDamageMods, int[] resistances, int delay, int ammoType, float rangedModRange, ItemSpellInfo[] spellInfos, ItemBondingType bondingType, string itemDescription, int pageText, int languageId, int pageMaterial, int startQuest, int lockId, int material, int sheath, int randomProperty, int block, int itemSet, int maxdurability, int area, int map, BAG_FAMILY_MASK bagFamily)
		{
			ClassType = classType;
			SubClassType = subClassType;
			ItemNames = itemNames;
			DisplayId = displayId;
			Quality = quality;
			ItemFlags = itemFlags;
			BuyPrice = buyPrice;
			SellPrice = sellPrice;
			InventoryType = inventoryType;
			AllowableClass = allowableClass;
			AllowableRace = allowableRace;
			ItemLevel = itemLevel;
			RequiredLevel = requiredLevel;
			RequiredSkill = requiredSkill;
			RequiredSkillRank = requiredSkillRank;
			RequiredSpell = requiredSpell;
			RequiredHonorRank = requiredHonorRank;
			RequiredCityRank = requiredCityRank;
			RequiredReptuationFaction = requiredReptuationFaction;
			RequiredReptuationRank = requiredReptuationRank;
			MaxCount = maxCount;
			MaxStackable = maxStackable;
			ContainerSlots = containerSlots;
			StatInfos = statInfos;
			ItemDamageMods = itemDamageMods;
			Resistances = resistances;
			Delay = delay;
			AmmoType = ammoType;
			RangedModRange = rangedModRange;
			SpellInfos = spellInfos;
			BondingType = bondingType;
			ItemDescription = itemDescription;
			PageText = pageText;
			LanguageId = languageId;
			PageMaterial = pageMaterial;
			StartQuest = startQuest;
			LockID = lockId;
			Material = material;
			Sheath = sheath;
			RandomProperty = randomProperty;
			Block = block;
			ItemSet = itemSet;
			Maxdurability = maxdurability;
			Area = area;
			Map = map;
			BagFamily = bagFamily;
		}
Exemple #38
0
        public string GetFullItemName(D2Unit item)
        {
            if (!IsValidItem(item))
            {
                return(null);
            }

            string        fullName;
            string        name  = GetGrammaticalName(GetItemName(item), out string grammarCase);
            List <string> words = new List <string>();

            // Non identified items just get the base item name.
            if (!ItemHasFlag(item, ItemFlag.Identified))
            {
                return(name);
            }

            ItemQuality quality = GetItemQuality(item);

            switch (quality)
            {
            case ItemQuality.Low:
                // fullName: quality + name
                fullName  = ExtractGrammaticalCase(GetLowQualityItemName(item), grammarCase);
                fullName += " " + name;
                break;

            case ItemQuality.Normal:
                fullName = name;
                break;

            case ItemQuality.Superior:
                // fullName: quality + name
                fullName = ExtractGrammaticalCase(GetSuperiorItemName(item), grammarCase);
                fullName = " " + name;
                break;

            case ItemQuality.Magic:
                // fullName: prefix + name + suffix
                string magicPrefix = ExtractGrammaticalCase(GetMagicPrefixName(item), grammarCase);
                string magicSuffix = ExtractGrammaticalCase(GetMagicSuffixName(item), grammarCase);
                words.Add(magicPrefix);
                words.Add(name);
                words.Add(magicSuffix);
                fullName = string.Join(" ", words.Where(s => !string.IsNullOrEmpty(s)));

                break;

            case ItemQuality.Set:
                // fullName: prefix + name
                fullName  = ExtractGrammaticalCase(GetItemSetName(item), grammarCase);
                fullName += " " + name;
                break;

            case ItemQuality.Rare:
            case ItemQuality.Crafted:
            case ItemQuality.Tempered:
                // fullName: prefix + suffix + name
                string rarePrefix = ExtractGrammaticalCase(GetRarePrefixName(item), grammarCase);
                string rareSuffix = ExtractGrammaticalCase(GetRareSuffixName(item), grammarCase);
                if (grammarCase == null)
                {
                    words.Add(rarePrefix);
                    words.Add(rareSuffix);
                    words.Add(name);
                }
                else
                {
                    words.Add(rareSuffix);
                    words.Add(rarePrefix);
                    words.Add(name);
                }
                fullName = string.Join(" ", words.Where(s => !string.IsNullOrEmpty(s)));
                break;

            case ItemQuality.Unique:
                // Ignore prefixes for quest items.
                if (Enum.IsDefined(typeof(D2Data.QuestItemId), item.eClass))
                {
                    fullName = name;
                }
                else
                {
                    // fullName: prefix + name
                    fullName  = ExtractGrammaticalCase(GetItemUniqueName(item), grammarCase);
                    fullName += " " + name;
                }
                break;

            default: return(null);
            }

            // Runeword item name.
            string runeword = GetRunewordName(item);

            if (runeword != null)
            {
                fullName = name + " [" + runeword + "]";
            }

            // Ethereal item name.
            if (ItemHasFlag(item, ItemFlag.Ethereal))
            {
                fullName = "Ethereal " + fullName;
            }

            return(fullName);
        }
 public WearableItem(StatsList statsList, Currency price, ItemQuality itemQuality, int id)
     : base(statsList, price, itemQuality, id)
 {
 }
Exemple #40
0
 public CacheACDItem(string internalname, string realname, int level, ItemQuality quality, int balanceid, int dynamicid, bool onehanded, ItemType dbitemtype, FollowerType dbfollowertype)
 {
     ThisInternalName=internalname;
              ThisRealName=realname;
              ThisLevel=level;
              ThisQuality=quality;
              ThisBalanceID=balanceid;
              ThisDynamicID=dynamicid;
              ThisOneHanded=onehanded;
              ThisDyeType=DyeType.None;
              ThisDBItemType=dbitemtype;
              ThisFollowerType=dbfollowertype;
              IsUnidentified=true;
 }
Exemple #41
0
 public void SetQuality(int quality)
 {
     itemQuality = (ItemQuality)quality;
 }
Exemple #42
0
        public CacheACDItem(string internalname, string realname, int level, ItemQuality quality, int goldamount, int balanceid, int dynamicid, float dps,
					 bool onehanded, DyeType dyetype, ItemType dbitemtype, FollowerType dbfollowertype, bool unidentified, int stackquantity, ItemStats thesestats, ACDItem item, int row, int col, bool ispotion, int acdguid)
        {
            ThisInternalName=internalname;
                     ThisRealName=realname;
                     ThisLevel=level;
                     ThisQuality=quality;
                     ThisGoldAmount=goldamount;
                     ThisBalanceID=balanceid;
                     ThisDynamicID=dynamicid;

                     ThisOneHanded=onehanded;
                     ThisDyeType=dyetype;
                     ThisDBItemType=dbitemtype;
                     ThisFollowerType=dbfollowertype;
                     IsUnidentified=unidentified;
                     ThisItemStackQuantity=stackquantity;

                     SpiritRegen=thesestats.SpiritRegen;
                     ExperienceBonus=thesestats.ExperienceBonus;
                     Dexterity=thesestats.Dexterity;
                     Intelligence=thesestats.Intelligence;
                     Strength=thesestats.Strength;
                     Vitality=thesestats.Vitality;
                     LifePercent=thesestats.LifePercent;
                     LifeOnHit=thesestats.LifeOnHit;
                     LifeSteal=thesestats.LifeSteal;
                     HealthPerSecond=thesestats.HealthPerSecond;
                     MagicFind=thesestats.MagicFind;
                     GoldFind=thesestats.GoldFind;
                     MovementSpeed=thesestats.MovementSpeed;
                     PickUpRadius=thesestats.PickUpRadius;
                     Sockets=thesestats.Sockets;
                     CritPercent=thesestats.CritPercent;
                     CritDamagePercent=thesestats.CritDamagePercent;
                     AttackSpeedPercent=thesestats.AttackSpeedPercent;
                     MinDamage=thesestats.MinDamage;
                     MaxDamage=thesestats.MaxDamage;
                     BlockChance=thesestats.BlockChance;
                     Thorns=thesestats.Thorns;
                     ResistAll=thesestats.ResistAll;
                     ResistArcane=thesestats.ResistArcane;
                     ResistCold=thesestats.ResistCold;
                     ResistFire=thesestats.ResistFire;
                     ResistHoly=thesestats.ResistHoly;
                     ResistLightning=thesestats.ResistLightning;
                     ResistPhysical=thesestats.ResistPhysical;
                     ResistPoison=thesestats.ResistPoison;
                     WeaponDamagePerSecond=thesestats.WeaponDamagePerSecond;
                     ArmorBonus=thesestats.ArmorBonus;
                     MaxDiscipline=thesestats.MaxDiscipline;
                     MaxMana=thesestats.MaxMana;
                     ArcaneOnCrit=thesestats.ArcaneOnCrit;
                     ManaRegen=thesestats.ManaRegen;
                     GlobeBonus=thesestats.HealthGlobeBonus;

                     ACDItem=item;
                     invRow=row;
                     invCol=col;
                     IsPotion=ispotion;
                     ACDGUID=acdguid;
        }
Exemple #43
0
 /// <summary>
 ///     Raises the <see cref="Changed"/> event with a new instance of <see cref="ItemChangedEventArgs"/> containing the
 ///     specified value.
 /// </summary>
 /// <param name="value">The value for the raised event.</param>
 /// <param name="previousValue">The value of the Item prior to the event.</param>
 /// <param name="quality">The Quality of the item.</param>
 /// <param name="previousQuality">The quality of the Item prior to the event.</param>
 protected virtual void OnChange(object value, object previousValue, ItemQuality quality, ItemQuality previousQuality)
 {
     if (Changed != null)
     {
         Changed(this, new ItemChangedEventArgs(value, previousValue, quality, previousQuality));
     }
 }
 private static Color ColorForQuality(ItemQuality quality)
 {
     switch (quality)
     {
         case ItemQuality.Artifact:
         case ItemQuality.Heirloom:
             return Colors.Yellow;
         case ItemQuality.Legendary:
             return Colors.Orange;
         case ItemQuality.Epic:
             return Colors.Purple;
         case ItemQuality.Rare:
             return Colors.Blue;
         case ItemQuality.Uncommon:
             return Colors.Green;
         case ItemQuality.Common:
             return Colors.Gray;
         case ItemQuality.Poor:
             return Colors.DarkGray;
         case ItemQuality.Temp:
         default:
             return Colors.Black;
     }
 }
 //构造函数  base继承父类
 public Material(int id, string name, ItemType type, ItemQuality quality, string des, int capacity, int buyPrice, int sellPrice, string sprite)
     : base(id, name, type, quality, des, capacity, buyPrice, sellPrice, sprite)
 {
 }
Exemple #46
0
        public void LootedItemLog(PluginItemTypes itemType, PluginBaseItemTypes baseitemType, ItemQuality itemQuality)
        {
            if (itemType == PluginItemTypes.HealthPotion)
                return;

            switch (baseitemType)
            {
                case PluginBaseItemTypes.WeaponOneHand:
                case PluginBaseItemTypes.WeaponTwoHand:
                case PluginBaseItemTypes.WeaponRange:
                case PluginBaseItemTypes.Offhand:
                case PluginBaseItemTypes.Armor:
                case PluginBaseItemTypes.Jewelry:
                case PluginBaseItemTypes.FollowerItem:
                    if (itemQuality > ItemQuality.Rare6)
                    {
                        FunkyGame.CurrentStats.CurrentProfile.LootTracker.Legendary.Looted++;
                    }
                    else if (itemQuality > ItemQuality.Magic3)
                    {
                        FunkyGame.CurrentStats.CurrentProfile.LootTracker.Rare.Looted++;
                    }
                    else
                    {
                        FunkyGame.CurrentStats.CurrentProfile.LootTracker.Magical.Looted++;
                    }
                    break;

                case PluginBaseItemTypes.Unknown:
                case PluginBaseItemTypes.Misc:
                    if (itemType == PluginItemTypes.CraftingMaterial || itemType == PluginItemTypes.CraftingPlan || itemType == PluginItemTypes.CraftTome)
                    {
                        FunkyGame.CurrentStats.CurrentProfile.LootTracker.Crafting.Looted++;
                    }
                    else if (itemType == PluginItemTypes.InfernalKey)
                    {
                        FunkyGame.CurrentStats.CurrentProfile.LootTracker.Keys.Looted++;
                    }
                    else if (itemType == PluginItemTypes.KeyStone)
                    {
                        FunkyGame.CurrentStats.CurrentProfile.LootTracker.KeyStoneFragments.Looted++;
                    }
                    break;
                case PluginBaseItemTypes.Gem:
                    FunkyGame.CurrentStats.CurrentProfile.LootTracker.Gems.Looted++;
                    break;
            }
        }
Exemple #47
0
 public Consumable(int id, string name, ItemType type, ItemQuality quality, string des, int capacity, int buyPrice, int sellPrice, string sprite, int function, int value)
     : base(id, name, type, quality, des, capacity, buyPrice, sellPrice, sprite)
 {
     this.Function = function;
     this.Value    = value;
 }
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			m_Crafter = reader.ReadMobile();
			m_Resource = (CraftResource) reader.ReadInt();
			m_Quality = (ItemQuality) reader.ReadInt();
		}
Exemple #49
0
        /// <summary>Get the data to display for this subject.</summary>
        /// <param name="metadata">Provides metadata that's not available from the game data directly.</param>
        /// <remarks>Tree growth algorithm reverse engineered from <see cref="FruitTree.dayUpdate"/>.</remarks>
        public override IEnumerable <ICustomField> GetData(Metadata metadata)
        {
            FruitTree tree = this.Target;

            // get basic info
            bool isMature            = tree.daysUntilMature <= 0;
            bool isDead              = tree.stump;
            bool isStruckByLightning = tree.struckByLightningCountdown > 0;

            // show next fruit
            if (isMature && !isDead)
            {
                string label = this.Translate(L10n.FruitTree.NextFruit);
                if (isStruckByLightning)
                {
                    yield return(new GenericField(label, this.Translate(L10n.FruitTree.NextFruitStruckByLightning, new { count = tree.struckByLightningCountdown })));
                }
                else if (Game1.currentSeason != tree.fruitSeason && !tree.greenHouseTree)
                {
                    yield return(new GenericField(label, this.Translate(L10n.FruitTree.NextFruitOutOfSeason)));
                }
                else if (tree.fruitsOnTree == FruitTree.maxFruitsOnTrees)
                {
                    yield return(new GenericField(label, this.Translate(L10n.FruitTree.NextFruitMaxFruit)));
                }
                else
                {
                    yield return(new GenericField(label, this.Translate(L10n.Generic.Tomorrow)));
                }
            }

            // show growth data
            if (!isMature)
            {
                SDate  dayOfMaturity      = SDate.Now().AddDays(tree.daysUntilMature);
                string grownOnDateText    = this.Translate(L10n.FruitTree.GrowthSummary, new { date = this.Stringify(dayOfMaturity) });
                string daysUntilGrownText = this.Text.GetPlural(tree.daysUntilMature, L10n.Generic.Tomorrow, L10n.Generic.InXDays).Tokens(new { count = tree.daysUntilMature });
                string growthText         = $"{grownOnDateText} ({daysUntilGrownText})";

                yield return(new GenericField(this.Translate(L10n.FruitTree.NextFruit), this.Translate(L10n.FruitTree.NextFruitTooYoung)));

                yield return(new GenericField(this.Translate(L10n.FruitTree.Growth), growthText));

                if (this.HasAdjacentObjects(this.Tile))
                {
                    yield return(new GenericField(this.Translate(L10n.FruitTree.Complaints), this.Translate(L10n.FruitTree.ComplaintsAdjacentObjects)));
                }
            }
            else
            {
                // get quality schedule
                ItemQuality currentQuality = this.GetCurrentQuality(tree, metadata.Constants.FruitTreeQualityGrowthTime);
                if (currentQuality == ItemQuality.Iridium)
                {
                    yield return(new GenericField(this.Translate(L10n.FruitTree.Quality), this.Translate(L10n.FruitTree.QualityNow, new { quality = this.Translate(L10n.For(currentQuality)) })));
                }
                else
                {
                    string[] summary = this
                                       .GetQualitySchedule(tree, currentQuality, metadata.Constants.FruitTreeQualityGrowthTime)
                                       .Select(entry =>
                    {
                        // read schedule
                        ItemQuality quality = entry.Key;
                        int daysLeft        = entry.Value;
                        SDate date          = SDate.Now().AddDays(daysLeft);
                        int yearOffset      = date.Year - Game1.year;

                        // generate summary line
                        string qualityName = this.Translate(L10n.For(quality));

                        if (daysLeft <= 0)
                        {
                            return("-" + this.Translate(L10n.FruitTree.QualityNow, new { quality = qualityName }));
                        }

                        string line;
                        if (yearOffset == 0)
                        {
                            line = $"-{this.Translate(L10n.FruitTree.QualityOnDate, new { quality = qualityName, date = this.Stringify(date) })}";
                        }
                        else if (yearOffset == 1)
                        {
                            line = $"-{this.Translate(L10n.FruitTree.QualityOnDateNextYear, new { quality = qualityName, date = this.Stringify(date) })}";
                        }
                        else
                        {
                            line = $"-{this.Translate(L10n.FruitTree.QualityOnDate, new { quality = qualityName, date = this.Text.Stringify(date, withYear: true), year = date.Year })}";
                        }

                        line += $" ({this.Text.GetPlural(daysLeft, L10n.Generic.Tomorrow, L10n.Generic.InXDays).Tokens(new { count = daysLeft })})";

                        return(line);
                    })
                                       .ToArray();

                    yield return(new GenericField(this.Translate(L10n.FruitTree.Quality), string.Join(Environment.NewLine, summary)));
                }
            }

            // show season
            yield return(new GenericField(this.Translate(L10n.FruitTree.Season), this.Translate(L10n.FruitTree.SeasonSummary, new { season = this.Text.GetSeasonName(tree.fruitSeason) })));
        }
Exemple #50
0
        // **********************************************************************************************
        // *****      Sell Validation - Determines what should or should not be sold to vendor      *****
        // **********************************************************************************************
        internal static bool GilesSellValidation(string thisinternalname, int thislevel, ItemQuality thisquality, ItemType thisdbitemtype, FollowerType thisfollowertype)
        {
            GilesItemType thisGilesItemType = DetermineItemType(thisinternalname, thisdbitemtype, thisfollowertype);
            GilesBaseItemType thisGilesBaseType = DetermineBaseType(thisGilesItemType);

            switch (thisGilesBaseType)
            {
                case GilesBaseItemType.WeaponRange:
                case GilesBaseItemType.WeaponOneHand:
                case GilesBaseItemType.WeaponTwoHand:
                case GilesBaseItemType.Armor:
                case GilesBaseItemType.Offhand:
                case GilesBaseItemType.Jewelry:
                case GilesBaseItemType.FollowerItem:
                    return true;
                case GilesBaseItemType.Gem:
                case GilesBaseItemType.Misc:
                case GilesBaseItemType.Unknown:
                    //Sell any plans not already stashed.
                    return thisdbitemtype == ItemType.CraftingPlan;
            } // Switch giles base item type
            return false;
        }
        public void GetDamage(uint itemLevel, out float minDamage, out float maxDamage)
        {
            minDamage = maxDamage = 0.0f;
            ItemQuality quality = GetQuality() != ItemQuality.Heirloom ? GetQuality() : ItemQuality.Rare;

            if (GetClass() != ItemClass.Weapon || quality > ItemQuality.Artifact)
            {
                return;
            }

            // get the right store here
            if (GetInventoryType() > InventoryType.RangedRight)
            {
                return;
            }

            float dps = 0.0f;

            switch (GetInventoryType())
            {
            case InventoryType.Ammo:
                dps = CliDB.ItemDamageAmmoStorage.LookupByKey(itemLevel).Quality[(int)quality];
                break;

            case InventoryType.Weapon2Hand:
                if (GetFlags2().HasAnyFlag(ItemFlags2.CasterWeapon))
                {
                    dps = CliDB.ItemDamageTwoHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
                }
                else
                {
                    dps = CliDB.ItemDamageTwoHandStorage.LookupByKey(itemLevel).Quality[(int)quality];
                }
                break;

            case InventoryType.Ranged:
            case InventoryType.Thrown:
            case InventoryType.RangedRight:
                switch ((ItemSubClassWeapon)GetSubClass())
                {
                case ItemSubClassWeapon.Wand:
                    dps = CliDB.ItemDamageOneHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
                    break;

                case ItemSubClassWeapon.Bow:
                case ItemSubClassWeapon.Gun:
                case ItemSubClassWeapon.Crossbow:
                    if (GetFlags2().HasAnyFlag(ItemFlags2.CasterWeapon))
                    {
                        dps = CliDB.ItemDamageTwoHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
                    }
                    else
                    {
                        dps = CliDB.ItemDamageTwoHandStorage.LookupByKey(itemLevel).Quality[(int)quality];
                    }
                    break;

                default:
                    return;
                }
                break;

            case InventoryType.Weapon:
            case InventoryType.WeaponMainhand:
            case InventoryType.WeaponOffhand:
                if (GetFlags2().HasAnyFlag(ItemFlags2.CasterWeapon))
                {
                    dps = CliDB.ItemDamageOneHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
                }
                else
                {
                    dps = CliDB.ItemDamageOneHandStorage.LookupByKey(itemLevel).Quality[(int)quality];
                }
                break;

            default:
                return;
            }

            float avgDamage = dps * GetDelay() * 0.001f;

            minDamage = (GetDmgVariance() * -0.5f + 1.0f) * avgDamage;
            maxDamage = (float)Math.Floor(avgDamage * (GetDmgVariance() * 0.5f + 1.0f) + 0.5f);
        }
Exemple #52
0
        public List<UnitObject> GetItemsOfQuality(ItemQuality quality)
        {
            List<UnitObject> tmp = new List<UnitObject>();

            foreach (UnitObject item in UnitObject.Items)
            {
                if (UnitHelpFunctions.GetSimpleValue(UnitObject, (int)ItemValueNames.item_quality) == (int)quality)
                {
                    tmp.Add(item);
                }
            }
            return tmp;
        }
Exemple #53
0
        public void DroppedItemLog(PluginItemTypes itemType, ItemQuality itemQuality)
        {
            switch (itemType)
            {
                case PluginItemTypes.CraftingMaterial:
                case PluginItemTypes.CraftingPlan:
                case PluginItemTypes.LegendaryCraftingMaterial:
                case PluginItemTypes.CraftTome:
                    FunkyGame.CurrentStats.CurrentProfile.LootTracker.Crafting.Dropped++;
                    break;

                case PluginItemTypes.Ruby:
                case PluginItemTypes.Emerald:
                case PluginItemTypes.Topaz:
                case PluginItemTypes.Amethyst:
                case PluginItemTypes.Diamond:
                    FunkyGame.CurrentStats.CurrentProfile.LootTracker.Gems.Dropped++;
                    break;

                case PluginItemTypes.Axe:
                case PluginItemTypes.CeremonialKnife:
                case PluginItemTypes.HandCrossbow:
                case PluginItemTypes.Dagger:
                case PluginItemTypes.FistWeapon:
                case PluginItemTypes.Flail:
                case PluginItemTypes.Mace:
                case PluginItemTypes.MightyWeapon:
                case PluginItemTypes.Spear:
                case PluginItemTypes.Sword:
                case PluginItemTypes.Wand:
                case PluginItemTypes.TwoHandAxe:
                case PluginItemTypes.TwoHandBow:
                case PluginItemTypes.TwoHandDaibo:
                case PluginItemTypes.TwoHandCrossbow:
                case PluginItemTypes.TwoHandFlail:
                case PluginItemTypes.TwoHandMace:
                case PluginItemTypes.TwoHandMighty:
                case PluginItemTypes.TwoHandPolearm:
                case PluginItemTypes.TwoHandStaff:
                case PluginItemTypes.TwoHandSword:
                case PluginItemTypes.Mojo:
                case PluginItemTypes.Source:
                case PluginItemTypes.Quiver:
                case PluginItemTypes.Shield:
                case PluginItemTypes.CrusaderShield:
                case PluginItemTypes.Amulet:
                case PluginItemTypes.Ring:
                case PluginItemTypes.Belt:
                case PluginItemTypes.Boots:
                case PluginItemTypes.Bracers:
                case PluginItemTypes.Chest:
                case PluginItemTypes.Cloak:
                case PluginItemTypes.Gloves:
                case PluginItemTypes.Helm:
                case PluginItemTypes.Pants:
                case PluginItemTypes.MightyBelt:
                case PluginItemTypes.Shoulders:
                case PluginItemTypes.SpiritStone:
                case PluginItemTypes.VoodooMask:
                case PluginItemTypes.WizardHat:
                    if (itemQuality == ItemQuality.Legendary)
                    {
                        FunkyGame.CurrentStats.CurrentProfile.LootTracker.Legendary.Dropped++;
                    }
                    else if (itemQuality > ItemQuality.Magic3)
                    {
                        FunkyGame.CurrentStats.CurrentProfile.LootTracker.Rare.Dropped++;
                    }
                    else
                    {
                        FunkyGame.CurrentStats.CurrentProfile.LootTracker.Magical.Dropped++;
                    }
                    break;

                case PluginItemTypes.FollowerEnchantress:
                case PluginItemTypes.FollowerScoundrel:
                case PluginItemTypes.FollowerTemplar:
                    break;

                case PluginItemTypes.SpecialItem:
                    break;

                case PluginItemTypes.HealthPotion:
                    break;

                case PluginItemTypes.HealthGlobe:
                    break;

                case PluginItemTypes.InfernalKey:
                    FunkyGame.CurrentStats.CurrentProfile.LootTracker.Keys.Dropped++;
                    break;
                case PluginItemTypes.KeyStone:
                    break;
                case PluginItemTypes.BloodShard:
                    break;
            }
        }
Exemple #54
0
        public string GetCommand(int entry, ItemClass iClass, int subClass, int unk0, string[] name,
                                 int dispId, ItemQuality quality, ItemFlag flags, ItemFlagExtra flags2, int buyPrice,
                                 int sellPrice, InventoryType invType, ClassMask allowClass, RaceMask allowRace, int itemLvl,
                                 int reqLvl, int reqSkill, int reqSkLvl, int reqSpell, int reqHonor, int reqCity,
                                 int reqRepFaction, int reqRepValue, int maxCount, int stacks, int contSlots, int statsCount,
                                 ItemModType[] statType, int[] statValue, int ssdId, int ssdVal, float[] dmgMin,
                                 float[] dmgMax, DamageType[] dmgType, int[] resistance, int delay, AmmoType ammoType,
                                 float rangedMod, int[] spellId, ItemSpellTriggerType[] spellTrigger, int[] spellCharges,
                                 int[] spellCooldown, int[] spellCategory, int[] spellCatCooldown, ItemBonding binding,
                                 string description, int pageText, Language langId, PageMaterial pageMat, int startQuest,
                                 int lockId, Material material, SheathType sheath, int randomProp, int randomSuffix,
                                 int block, int itemSet, int maxDura, int area, int map, BagFamilyMask bagFamily,
                                 TotemCategory totemCat, ItemSocketColor[] color, int[] content, int socketBonus,
                                 int gemProps, int reqDisEnchSkill, float armorDmgMod, int duration, int limitCategory,
                                 Holiday holidayId)
        {
            var builder = new CommandBuilder("item_template");

            builder.AddColumnValue("entry", entry);
            builder.AddColumnValue("class", (int)iClass);
            builder.AddColumnValue("subclass", subClass);
            builder.AddColumnValue("unk0", unk0);
            builder.AddColumnValue("name", name[0]);
            builder.AddColumnValue("displayid", dispId);
            builder.AddColumnValue("Quality", (int)quality);
            builder.AddColumnValue("Flags", (int)flags);
            builder.AddColumnValue("BuyCount", 1);
            builder.AddColumnValue("BuyPrice", buyPrice);
            builder.AddColumnValue("SellPrice", sellPrice);
            builder.AddColumnValue("InventoryType", (int)invType);
            builder.AddColumnValue("AllowableClass", (int)allowClass);
            builder.AddColumnValue("AllowableRace", (int)allowRace);
            builder.AddColumnValue("ItemLevel", itemLvl);
            builder.AddColumnValue("RequiredLevel", reqLvl);
            builder.AddColumnValue("RequiredSkill", reqSkill);
            builder.AddColumnValue("RequiredSkillRank", reqSkLvl);
            builder.AddColumnValue("requiredspell", reqSpell);
            builder.AddColumnValue("requiredhonorrank", reqHonor);
            builder.AddColumnValue("RequiredCityRank", reqCity);
            builder.AddColumnValue("RequiredReputationFaction", reqRepFaction);
            builder.AddColumnValue("RequiredReputationRank", reqRepValue);
            builder.AddColumnValue("maxcount", maxCount);

            var stackVal = stacks;

            if (SQLOutput.Format == SqlFormat.Mangos && stacks > 1000)
            {
                stackVal = -1;
            }

            builder.AddColumnValue("stackable", stackVal);
            builder.AddColumnValue("ContainerSlots", contSlots);
            builder.AddColumnValue("StatsCount", statsCount);

            for (var i = 0; i < 10; i++)
            {
                int type;
                int value;

                if (i > statsCount - 1)
                {
                    type  = 0;
                    value = 0;
                }
                else
                {
                    type  = (int)statType[i];
                    value = statValue[i];
                }

                builder.AddColumnValue("stat_type" + (i + 1), type);
                builder.AddColumnValue("stat_value" + (i + 1), value);
            }

            builder.AddColumnValue("ScalingStatDistribution", ssdId);
            builder.AddColumnValue("ScalingStatValue", ssdVal);

            for (var i = 0; i < 2; i++)
            {
                builder.AddColumnValue("dmg_min" + (i + 1), dmgMin[i]);
                builder.AddColumnValue("dmg_max" + (i + 1), dmgMax[i]);
                builder.AddColumnValue("dmg_type" + (i + 1), (int)dmgType[i]);
            }

            builder.AddColumnValue("armor", resistance[0]);
            builder.AddColumnValue("holy_res", resistance[1]);
            builder.AddColumnValue("fire_res", resistance[2]);
            builder.AddColumnValue("nature_res", resistance[3]);
            builder.AddColumnValue("frost_res", resistance[4]);
            builder.AddColumnValue("shadow_res", resistance[5]);
            builder.AddColumnValue("arcane_res", resistance[6]);
            builder.AddColumnValue("delay", delay);
            builder.AddColumnValue("ammo_type", (int)ammoType);
            builder.AddColumnValue("RangedModRange", rangedMod);

            for (var i = 0; i < 5; i++)
            {
                builder.AddColumnValue("spellid_" + (i + 1), spellId[i]);
                builder.AddColumnValue("spelltrigger_" + (i + 1), (int)spellTrigger[i]);
                builder.AddColumnValue("spellcharges_" + (i + 1), spellCharges[i]);
                builder.AddColumnValue("spellppmRate_" + (i + 1), 0);
                builder.AddColumnValue("spellcooldown_" + (i + 1), spellCooldown[i]);
                builder.AddColumnValue("spellcategory_" + (i + 1), spellCategory[i]);
                builder.AddColumnValue("spellcategorycooldown_" + (i + 1), spellCatCooldown[i]);
            }

            builder.AddColumnValue("bonding", (int)binding);
            builder.AddColumnValue("description", description);
            builder.AddColumnValue("PageText", pageText);
            builder.AddColumnValue("LanguageID", (int)langId);
            builder.AddColumnValue("PageMaterial", (int)pageMat);
            builder.AddColumnValue("startquest", startQuest);
            builder.AddColumnValue("lockid", lockId);
            builder.AddColumnValue("Material", (int)material);
            builder.AddColumnValue("sheath", (int)sheath);
            builder.AddColumnValue("RandomProperty", randomProp);
            builder.AddColumnValue("RandomSuffix", randomSuffix);
            builder.AddColumnValue("block", block);
            builder.AddColumnValue("itemset", itemSet);
            builder.AddColumnValue("MaxDurability", maxDura);
            builder.AddColumnValue("area", area);
            builder.AddColumnValue("map", map);
            builder.AddColumnValue("BagFamily", (int)bagFamily);
            builder.AddColumnValue("TotemCategory", (int)totemCat);

            for (var i = 0; i < 3; i++)
            {
                builder.AddColumnValue("socketColor_" + (i + 1), (int)color[i]);
                builder.AddColumnValue("socketContent_" + (i + 1), content[i]);
            }

            builder.AddColumnValue("socketBonus", socketBonus);
            builder.AddColumnValue("GemProperties", gemProps);
            builder.AddColumnValue("RequiredDisenchantSkill", reqDisEnchSkill);
            builder.AddColumnValue("ArmorDamageModifier", armorDmgMod);
            builder.AddColumnValue("Duration", duration);
            builder.AddColumnValue("ItemLimitCategory", limitCategory);
            builder.AddColumnValue("HolidayID", (int)holidayId);
            builder.AddColumnValue("ScriptName", string.Empty);
            builder.AddColumnValue("DisenchantID", 0);
            builder.AddColumnValue("FoodType", 0);
            builder.AddColumnValue("minMoneyLoot", 0);
            builder.AddColumnValue("maxMoneyLoot", 0);
            builder.AddColumnValue("NonConsumable", 0);

            return(builder.BuildInsert(true));
        }
Exemple #55
0
 public QualityRow(ItemQuality quality)
 {
     Quality = quality;
     Name = quality.ToString();
 }
Exemple #56
0
        public uint GetArmor(uint itemLevel)
        {
            ItemQuality quality = GetQuality() != ItemQuality.Heirloom ? GetQuality() : ItemQuality.Rare;

            if (quality > ItemQuality.Artifact)
            {
                return(0);
            }

            // all items but shields
            if (GetClass() != ItemClass.Armor || GetSubClass() != (uint)ItemSubClassArmor.Shield)
            {
                ItemArmorQualityRecord armorQuality = CliDB.ItemArmorQualityStorage.LookupByKey(itemLevel);
                ItemArmorTotalRecord   armorTotal   = CliDB.ItemArmorTotalStorage.LookupByKey(itemLevel);
                if (armorQuality == null || armorTotal == null)
                {
                    return(0);
                }

                InventoryType inventoryType = GetInventoryType();
                if (inventoryType == InventoryType.Robe)
                {
                    inventoryType = InventoryType.Chest;
                }

                ArmorLocationRecord location = CliDB.ArmorLocationStorage.LookupByKey(inventoryType);
                if (location == null)
                {
                    return(0);
                }

                if (GetSubClass() < (uint)ItemSubClassArmor.Cloth || GetSubClass() > (uint)ItemSubClassArmor.Plate)
                {
                    return(0);
                }

                float total            = 1.0f;
                float locationModifier = 1.0f;
                switch ((ItemSubClassArmor)GetSubClass())
                {
                case ItemSubClassArmor.Cloth:
                    total            = armorTotal.Cloth;
                    locationModifier = location.Clothmodifier;
                    break;

                case ItemSubClassArmor.Leather:
                    total            = armorTotal.Leather;
                    locationModifier = location.Leathermodifier;
                    break;

                case ItemSubClassArmor.Mail:
                    total            = armorTotal.Mail;
                    locationModifier = location.Chainmodifier;
                    break;

                case ItemSubClassArmor.Plate:
                    total            = armorTotal.Plate;
                    locationModifier = location.Platemodifier;
                    break;

                default:
                    break;
                }

                return((uint)(armorQuality.QualityMod[(int)quality] * total * locationModifier + 0.5f));
            }

            // shields
            ItemArmorShieldRecord shield = CliDB.ItemArmorShieldStorage.LookupByKey(itemLevel);

            if (shield == null)
            {
                return(0);
            }

            return((uint)(shield.Quality[(int)quality] + 0.5f));
        }
Exemple #57
0
        public static bool ContainsItem(int balanceID, ItemQuality quality)
        {
            //Update Item List!
            UpdateItemList();

            //Logger.DBLog.Info("New Items Count: " + NewItemList.Count);

            //Use Gamebalance ID to narrow down the items.
            foreach (var i in NewItemList.Where(i => i.ThisBalanceID == balanceID))
            {
                //and matching Item Quality..
                if (i.ThisQuality == quality)
                    return true;
            }

            return false;
        }
Exemple #58
0
        public float GetDPS(uint itemLevel)
        {
            ItemQuality quality = GetQuality() != ItemQuality.Heirloom ? GetQuality() : ItemQuality.Rare;

            if (GetClass() != ItemClass.Weapon || quality > ItemQuality.Artifact)
            {
                return(0.0f);
            }

            float dps = 0.0f;

            switch (GetInventoryType())
            {
            case InventoryType.Ammo:
                dps = CliDB.ItemDamageAmmoStorage.LookupByKey(itemLevel).Quality[(int)quality];
                break;

            case InventoryType.Weapon2Hand:
                if (GetFlags2().HasAnyFlag(ItemFlags2.CasterWeapon))
                {
                    dps = CliDB.ItemDamageTwoHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
                }
                else
                {
                    dps = CliDB.ItemDamageTwoHandStorage.LookupByKey(itemLevel).Quality[(int)quality];
                }
                break;

            case InventoryType.Ranged:
            case InventoryType.Thrown:
            case InventoryType.RangedRight:
                switch ((ItemSubClassWeapon)GetSubClass())
                {
                case ItemSubClassWeapon.Wand:
                    dps = CliDB.ItemDamageOneHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
                    break;

                case ItemSubClassWeapon.Bow:
                case ItemSubClassWeapon.Gun:
                case ItemSubClassWeapon.Crossbow:
                    if (GetFlags2().HasAnyFlag(ItemFlags2.CasterWeapon))
                    {
                        dps = CliDB.ItemDamageTwoHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
                    }
                    else
                    {
                        dps = CliDB.ItemDamageTwoHandStorage.LookupByKey(itemLevel).Quality[(int)quality];
                    }
                    break;

                default:
                    break;
                }
                break;

            case InventoryType.Weapon:
            case InventoryType.WeaponMainhand:
            case InventoryType.WeaponOffhand:
                if (GetFlags2().HasAnyFlag(ItemFlags2.CasterWeapon))
                {
                    dps = CliDB.ItemDamageOneHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
                }
                else
                {
                    dps = CliDB.ItemDamageOneHandStorage.LookupByKey(itemLevel).Quality[(int)quality];
                }
                break;

            default:
                break;
            }

            return(dps);
        }
Exemple #59
0
 private static int QualityIndex(ItemQuality quality)
 {
     switch (quality)
     { 
         case ItemQuality.Epic:
         default:
             return 0;
         case ItemQuality.Rare:
             return 1;
         case ItemQuality.Uncommon:
             return 2;
     }
 }
Exemple #60
0
        /// <summary>
        /// Checks if current item's level is according to min level for Pickup.
        /// </summary>
        /// <param name="level">The current item's level.</param>
        /// <param name="quality">The item's quality.</param>
        /// <param name="requiredBlueLevel">The blue level required.</param>
        /// <param name="requiredYellowLevel">The yellow level required.</param>
        /// <returns></returns>
        internal static bool CheckLevelRequirements(int level, ItemQuality quality, int requiredBlueLevel, int requiredYellowLevel)
        {
            // Always pick legendaries
            if (quality >= ItemQuality.Legendary)
                return true;

            // Gray Items
            if (quality < ItemQuality.Normal)
            {
                if (Settings.Loot.Pickup.PickupGrayItems)
                    return true;
                else
                    return false;
            }

            // White Items
            if (quality == ItemQuality.Normal || quality == ItemQuality.Superior)
            {
                if (Settings.Loot.Pickup.PickupWhiteItems)
                    return true;
                else
                    return false;
            }

            if (quality < ItemQuality.Normal && Player.Level > 5 && !Settings.Loot.Pickup.PickupLowLevel)
            {
                // Grey item, ignore if we're over level 5
                return false;
            }

            // Ignore Gray/White if player level is <= 5 and we are picking up white
            if (quality <= ItemQuality.Normal && Player.Level <= 5 && !Settings.Loot.Pickup.PickupLowLevel)
            {
                return false;
            }

            if (quality < ItemQuality.Magic1 && Player.Level > 10)
            {
                // White item, ignore if we're over level 10
                return false;
            }

            // PickupLowLevel setting
            if (quality <= ItemQuality.Magic1 && Player.Level <= 10 && !Settings.Loot.Pickup.PickupLowLevel)
            {
                // ignore if we don't have the setting enabled
                return false;
            }

            // Blue/Yellow get scored
            if (quality >= ItemQuality.Magic1 && quality < ItemQuality.Rare4)
            {
                if (requiredBlueLevel == 0 || (requiredBlueLevel != 0 && level < requiredBlueLevel))
                {
                    // Between magic and rare, and either we want no blues, or this level is lower than the blue level we want
                    return false;
                }
            }
            else
            {
                if (requiredYellowLevel == 0 || (requiredYellowLevel != 0 && level < requiredYellowLevel))
                {
                    // Either we want no rares or the item is below the level we want
                    return false;
                }
            }
            return true;
        }