/// <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); } }
public static ResolvedLootItemList GetEntries(this ILootable lootable, LootEntryType type) { return(GetEntries(type, lootable.GetLootId(type))); }