public override LootList GenerateLoot(GameNPC mob, GameObject killer) { LootList loot = base.GenerateLoot(mob, killer); List<LootOTD> lootOTDs = null; try { if (m_mobOTDList.ContainsKey(mob.Name.ToLower())) { lootOTDs = m_mobOTDList[mob.Name.ToLower()]; } if (lootOTDs != null) { foreach (GameObject gainer in mob.XPGainers.Keys) { GamePlayer player = null; if (gainer is GamePlayer) { player = gainer as GamePlayer; } else if (gainer is GameNPC) { IControlledBrain brain = ((GameNPC)gainer).Brain as IControlledBrain; if (brain != null) { player = brain.GetPlayerOwner(); } } if (player != null) { foreach (LootOTD drop in lootOTDs) { if (drop.MinLevel <= player.Level) { CharacterXOneTimeDrop hasDrop = GameServer.Database.SelectObject<CharacterXOneTimeDrop>("CharacterID = '" + GameServer.Database.Escape(player.QuestPlayerID) + "' AND ItemTemplateID = '" + GameServer.Database.Escape(drop.ItemTemplateID) + "'"); if (hasDrop == null) { ItemTemplate item = GameServer.Database.FindObjectByKey<ItemTemplate>(drop.ItemTemplateID); if (item != null) { if (player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, GameInventoryItem.Create<ItemTemplate>(item))) { CharacterXOneTimeDrop charXDrop = new CharacterXOneTimeDrop(); charXDrop.CharacterID = player.QuestPlayerID; charXDrop.ItemTemplateID = drop.ItemTemplateID; GameServer.Database.AddObject(charXDrop); player.Out.SendMessage(string.Format("You receive {0} from {1}!", item.GetName(1, false), mob.GetName(1, false)), eChatType.CT_Loot, eChatLoc.CL_SystemWindow); InventoryLogging.LogInventoryAction(mob, player, eInventoryActionType.Loot, item); } else { // do not drop, player will have to try again player.Out.SendMessage("Your inventory is full and a one time drop cannot be added!", eChatType.CT_Important, eChatLoc.CL_SystemWindow); log.DebugFormat("OTD Failed, Inventory full: {0} from mob {1} for player {2}.", drop.ItemTemplateID, drop.MobName, player.Name); break; } } else { log.ErrorFormat("Error trying to drop ItemTemplate {0} from {1}. Item not found.", drop.ItemTemplateID, drop.MobName); } } } } } } } } catch (Exception ex) { log.Error("LootGeneratorOneTimeDrop exception for mob " + mob.Name + ":", ex); } return loot; }
public override LootList GenerateLoot(GameNPC mob, GameObject killer) { LootList loot = base.GenerateLoot(mob, killer); List <LootOTD> lootOTDs = null; try { if (m_mobOTDList.ContainsKey(mob.Name.ToLower())) { lootOTDs = m_mobOTDList[mob.Name.ToLower()]; } if (lootOTDs != null) { foreach (GameObject gainer in mob.XPGainers.Keys) { GamePlayer player = null; if (gainer is GamePlayer) { player = gainer as GamePlayer; } else if (gainer is GameNPC) { IControlledBrain brain = ((GameNPC)gainer).Brain as IControlledBrain; if (brain != null) { player = brain.GetPlayerOwner(); } } if (player != null) { foreach (LootOTD drop in lootOTDs) { if (drop.MinLevel <= player.Level) { CharacterXOneTimeDrop hasDrop = GameServer.Database.SelectObject <CharacterXOneTimeDrop>("CharacterID = '" + GameServer.Database.Escape(player.QuestPlayerID) + "' AND ItemTemplateID = '" + GameServer.Database.Escape(drop.ItemTemplateID) + "'"); if (hasDrop == null) { ItemTemplate item = GameServer.Database.FindObjectByKey <ItemTemplate>(drop.ItemTemplateID); if (item != null) { if (player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, GameInventoryItem.Create <ItemTemplate>(item))) { CharacterXOneTimeDrop charXDrop = new CharacterXOneTimeDrop(); charXDrop.CharacterID = player.QuestPlayerID; charXDrop.ItemTemplateID = drop.ItemTemplateID; GameServer.Database.AddObject(charXDrop); player.Out.SendMessage(string.Format("You receive {0} from {1}!", item.GetName(1, false), mob.GetName(1, false)), eChatType.CT_Loot, eChatLoc.CL_SystemWindow); InventoryLogging.LogInventoryAction(mob, player, eInventoryActionType.Loot, item); } else { // do not drop, player will have to try again player.Out.SendMessage("Your inventory is full and a one time drop cannot be added!", eChatType.CT_Important, eChatLoc.CL_SystemWindow); log.DebugFormat("OTD Failed, Inventory full: {0} from mob {1} for player {2}.", drop.ItemTemplateID, drop.MobName, player.Name); break; } } else { log.ErrorFormat("Error trying to drop ItemTemplate {0} from {1}. Item not found.", drop.ItemTemplateID, drop.MobName); } } } } } } } } catch (Exception ex) { log.Error("LootGeneratorOneTimeDrop exception for mob " + mob.Name + ":", ex); } return(loot); }