public void FillBagNoClassMatch() { SampleRewardList = new List <RVRRewardItem> { new RVRRewardItem { ItemId = 1, CanAwardDuplicate = 0, Class = 2, ItemCount = 1, RRBand = 0, Rarity = 2, RewardId = 123123 }, new RVRRewardItem { ItemId = 2, CanAwardDuplicate = 0, Class = 2, ItemCount = 1, RRBand = 0, Rarity = 2, RewardId = 456465 }, new RVRRewardItem { ItemId = 3, CanAwardDuplicate = 0, Class = 2, ItemCount = 1, RRBand = 0, Rarity = 1, RewardId = 789789 }, }; // Dont use random - turn off shuffle var bagContentSelector = new BagContentSelector(SampleRewardList, new Random(1)); var emptyBag = new LootBagTypeDefinition { Assignee = 1, BagRarity = LootBagRarity.Blue, LootBagNumber = 1 }; var playerExistingItems = new List <uint> { 1 }; var filledBag = bagContentSelector.SelectBagContentForPlayer(Logger, emptyBag, 40, 6, playerExistingItems, false); Assert.IsFalse(filledBag.IsValid()); }
public void DetermineRVRZoneReward_NMatches_ValidBag_PlayerItemsMatchDupeOk() { var lootDecider = new BagContentSelector(this.SampleZoneItemOptions, new LockedRandomNumberGenerator(10)); var bag = new LootBagTypeDefinition { BagRarity = LootBagRarity.Blue, Assignee = 1, LootBagNumber = 1 }; SamplePlayerItems.Add(301); SamplePlayerItems.Add(601); // SHould match 3 record var result = lootDecider.SelectBagContentForPlayer(Logger, bag, 20, 64, SamplePlayerItems, false); Assert.IsTrue(result.IsValid()); Assert.IsTrue(result.RenownBand == 20); Assert.IsTrue(result.ItemId == 601); SamplePlayerItems.Add(602); // SHould match 3 record var result2 = lootDecider.SelectBagContentForPlayer(Logger, bag, 20, 64, SamplePlayerItems, false); Assert.IsTrue(result2.IsValid()); Assert.IsTrue(result2.RenownBand == 20); Assert.IsTrue(result2.ItemId == 601); }
public void DetermineRVRZoneReward_NoMatches() { var lootDecider = new BagContentSelector(this.SampleZoneItemOptions, StaticRandom.Instance); var bag = new LootBagTypeDefinition(); var result = lootDecider.SelectBagContentForPlayer(Logger, bag, 70, 64, new List <uint>()); Assert.IsFalse(result.IsValid()); }
public void DetermineRVRZoneReward_ManualTest_ValidBag() { var lootDecider = new BagContentSelector(this.SampleZoneItemOptions, new LockedRandomNumberGenerator(10)); var bag = new LootBagTypeDefinition { BagRarity = LootBagRarity.Blue, Assignee = 1, LootBagNumber = 1 }; // SHould match 3 record var result = lootDecider.SelectBagContentForPlayer(Logger, bag, 10, 64, new List <uint>(), true); Assert.IsTrue(1 == 1); }
public void DetermineRVRZoneReward_1Match_ValidBag() { var lootDecider = new BagContentSelector(this.SampleZoneItemOptions, new LockedRandomNumberGenerator(10)); var bag = new LootBagTypeDefinition { BagRarity = LootBagRarity.Blue, Assignee = 1, LootBagNumber = 1 }; // SHould match 1 record var result = lootDecider.SelectBagContentForPlayer(Logger, bag, 20, 64, new List <uint>(), false); Assert.IsTrue(result.IsValid()); Assert.IsTrue(result.RenownBand == 20); Assert.IsTrue(result.ItemId == 601); }
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); }