Exemple #1
0
        /// <summary>
        /// Creates a new Loot object and returns it or null, if there is nothing to be looted.
        /// </summary>
        /// <typeparam name="T"><see cref="ObjectLoot"/> or <see cref="NPCLoot"/></typeparam>
        /// <param name="lootable"></param>
        /// <param name="initialLooter"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static T CreateLoot <T>(ILootable lootable, Character initialLooter, LootEntryType type, bool heroic, MapId mapid)
            where T : Loot, new()
        {
            var looters = FindLooters(lootable, initialLooter);

            var items = CreateLootItems(lootable.GetLootId(type), type, heroic, looters);
            var money = lootable.LootMoney * DefaultMoneyDropFactor;

            if (items.Length == 0 && money == 0)
            {
                if (lootable is GameObject)
                {
                    // TODO: Don't mark GO as lootable if it has nothing to loot
                    money = 1;
                }
            }

            if (items.Length > 0 || money > 0)
            {
                var loot = new T {
                    Lootable = lootable, Money = money, Items = items
                };
                loot.Initialize(initialLooter, looters, mapid);
                return(loot);
            }
            else
            {
                //var loot = new T { Lootable = lootable, Money = 1, Items = LootItem.EmptyArray };
                //loot.Initialize(initialLooter, looters);
                //return loot;
                return(null);
            }
        }
Exemple #2
0
 public static ResolvedLootItemList GetEntries(this ILootable lootable, LootEntryType type)
 {
     return(GetEntries(type, lootable.GetLootId(type)));
 }