public static bool AddZoneLockBags(Player plr, ref List <string> values) { var destructionLootChest = LootChest.Create(plr.Region, plr.WorldPosition, (ushort)plr.ZoneId); var orderLootChest = LootChest.Create(plr.Region, plr.WorldPosition, (ushort)plr.ZoneId); plr = GetTargetOrMe(plr) as Player; if (plr == null) { return(true); } int numberBags = GetInt(ref values); var _rewardManager = new RVRRewardManager(); var rewardAssigner = new RewardAssigner(StaticRandom.Instance, null); var bagDefinitions = rewardAssigner.DetermineBagTypes(numberBags); // Assign eligible players to the bag definitions. foreach (var lootBagTypeDefinition in bagDefinitions) { var listPlayerContributions = new List <PlayerContribution>(); var pc = new PlayerContribution(); pc.ContributionId = 4; pc.Timestamp = TCPManager.GetTimeStamp(); listPlayerContributions.Add(pc); var cd = new ConcurrentDictionary <uint, List <PlayerContribution> >(); cd.TryAdd(plr.CharacterId, listPlayerContributions); var cm = new ContributionManager(cd, BountyService._ContributionDefinitions); var eligPlayer = new List <KeyValuePair <uint, int> >(); eligPlayer.Add(new KeyValuePair <uint, int>(plr.CharacterId, 10)); var bonuses = new List <RVRPlayerBagBonus>(); var randomRolls = new Dictionary <uint, int>(); var pairingContributions = new Dictionary <uint, int>(); var rewardAssignments = rewardAssigner.AssignLootToPlayers(numberBags, new List <LootBagTypeDefinition> { lootBagTypeDefinition }, eligPlayer, bonuses, randomRolls, pairingContributions, new WorldConfigs { AllowBagBonusContribution = "Y", AllowPairingContribution = "Y", AllowRandomContribution = "Y" }); var bagContentSelector = new BagContentSelector(RVRZoneRewardService.RVRRewardKeepItems, StaticRandom.Instance); foreach (var reward in rewardAssignments) { if (reward.Assignee != 0) { var playerItemList = (from item in plr.ItmInterface.Items where item != null select item.Info.Entry).ToList(); var playerRenown = plr.CurrentRenown.Level; var playerClass = plr.Info.CareerLine; var playerRenownBand = PlayerUtil.CalculateRenownBand(playerRenown); var lootDefinition = bagContentSelector.SelectBagContentForPlayer(_logger, reward, playerRenownBand, playerClass, playerItemList.ToList(), true); if (lootDefinition.IsValid()) { plr.SendClientMessage("Lootdefinition is valid"); // Only distribute if loot is valid var generatedLootBag = new LootBagBuilder().BuildChestLootBag(lootDefinition, plr); if (plr.Realm == Realms.REALMS_REALM_DESTRUCTION) { destructionLootChest.Add(plr.CharacterId, generatedLootBag); } if (plr.Realm == Realms.REALMS_REALM_ORDER) { orderLootChest.Add(plr.CharacterId, generatedLootBag); } } else { plr.SendClientMessage("Lootdefinition is NOT valid"); } } } } return(true); }