Beispiel #1
0
        public void AssignLootSortingIsCorrectToBags()
        {
            var sortedPairs = new List <KeyValuePair <uint, int> >
            {
                new KeyValuePair <uint, int>(50000, 124),
                new KeyValuePair <uint, int>(50020, 100),
                new KeyValuePair <uint, int>(12332, 78),
                new KeyValuePair <uint, int>(42223, 77),
                new KeyValuePair <uint, int>(73738, 50),
                new KeyValuePair <uint, int>(12202, 12),
                new KeyValuePair <uint, int>(12902, 4),
                new KeyValuePair <uint, int>(12123, 0),
                new KeyValuePair <uint, int>(33222, 220)
            };
            var rewardAssigner = new RewardAssigner(StaticRandom.Instance, _logger);
            var numberOfAwards = 4;

            var x                    = new LootBagTypeDefinition().BuildLootBagTypeDefinitions(numberOfAwards);
            var bonusList            = new List <RVRPlayerBagBonus>();
            var randomRolls          = new Dictionary <uint, int>();
            var pairingContributions = new Dictionary <uint, int>();
            var assignedLoot         = rewardAssigner.AssignLootToPlayers(numberOfAwards, x, sortedPairs, bonusList, randomRolls, pairingContributions, new WorldConfigs {
                AllowBagBonusContribution = "Y", AllowPairingContribution = "Y", AllowRandomContribution = "Y", DebugLootRolls = "N"
            });

            Assert.IsTrue(numberOfAwards == assignedLoot.Count);
            Assert.IsTrue(assignedLoot[0].Assignee == 33222);
            Assert.IsTrue(assignedLoot[1].Assignee == 50000);
            Assert.IsTrue(assignedLoot[2].Assignee == 50020);
            Assert.IsTrue(assignedLoot[3].Assignee == 12332);
        }
        public void DetermineNumberOfAwards_Range()
        {
            var rewardAssigner = new RewardAssigner(StaticRandom.Instance, Logger);

            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(0) == 0);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(1) == 1);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(2) == 1);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(4) == 2);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(9) == 5);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(10) == 5);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(11) == 7);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(17) == 10);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(20) == 12);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(22) == 14);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(33) == 21);
            Assert.IsTrue(rewardAssigner.DetermineNumberOfAwards(44) == 28);
        }
Beispiel #3
0
        public void AssignLootWithBonusesGoldBagBonus()
        {
            var sortedPairs = new List <KeyValuePair <uint, int> >
            {
                new KeyValuePair <uint, int>(50000, 124),
                new KeyValuePair <uint, int>(50020, 100),
                new KeyValuePair <uint, int>(12332, 78),
                new KeyValuePair <uint, int>(42223, 77),
                new KeyValuePair <uint, int>(73738, 50),
                new KeyValuePair <uint, int>(12202, 12),
                new KeyValuePair <uint, int>(12902, 4),
                new KeyValuePair <uint, int>(12123, 0),
                new KeyValuePair <uint, int>(33222, 220)
            };

            // +100 gold bag bonus should mean 50020 wins gold. And nothing else!
            var bonusList = new List <RVRPlayerBagBonus>
            {
                new RVRPlayerBagBonus
                {
                    CharacterId = 50020,
                    GoldBag     = 200,
                    BlueBag     = 1,
                    PurpleBag   = 0,
                    GreenBag    = 0
                }
            };

            var rewardAssigner = new RewardAssigner(StaticRandom.Instance, _logger);
            var numberOfAwards = 4;

            var x           = new LootBagTypeDefinition().BuildLootBagTypeDefinitions(numberOfAwards);
            var randomRolls = new Dictionary <uint, int>();

            var pairingContributions = new Dictionary <uint, int>();
            var assignedLoot         = rewardAssigner.AssignLootToPlayers(numberOfAwards, x, sortedPairs, bonusList, randomRolls, pairingContributions, new WorldConfigs {
                AllowBagBonusContribution = "Y", AllowPairingContribution = "Y", AllowRandomContribution = "Y", DebugLootRolls = "N"
            });

            Assert.IsTrue(numberOfAwards == assignedLoot.Count);
            Assert.IsTrue(assignedLoot[0].Assignee == 50020);
            Assert.IsTrue(assignedLoot[1].Assignee == 33222);
            Assert.IsTrue(assignedLoot[2].Assignee == 50000);
            Assert.IsTrue(assignedLoot[3].Assignee == 12332);
        }
        public void CTOR_Null()
        {
            var rewardAssigner = new RewardAssigner(StaticRandom.Instance, null);

            Assert.IsNotNull(rewardAssigner);
        }
Beispiel #5
0
        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);
        }