Exemple #1
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);
        }