示例#1
0
        public void TestGroupCountForRace()
        {
            var contract = contractResource.contracts.GetContract("ct001");
            KillNPCGroupContractData killNPCGroupContract = contract as KillNPCGroupContractData;

            Assert.AreEqual(4, killNPCGroupContract.GetGroupCount(Race.Humans));
            Assert.AreEqual(4, killNPCGroupContract.GetGroupCount(Race.Criptizoids));
            Assert.AreEqual(3, killNPCGroupContract.GetGroupCount(Race.Borguzands));
        }
        public override BaseContract Generate(Race race, int level, string sourceWorld, ContractManager manager, IContractResource resource)
        {
            var allowedByLevelAndCategoryContracts = resource.contracts.GetContracts(ContractCategory.killNPCGroup, level);

            if (allowedByLevelAndCategoryContracts.Count == 0)
            {
                return(null);
            }

            List <KillNPCGroupContractData> contractsWithAllowedGroups = new List <KillNPCGroupContractData>();

            foreach (var c in allowedByLevelAndCategoryContracts)
            {
                var killGroupContract = c as KillNPCGroupContractData;
                if (killGroupContract != null)
                {
                    if (killGroupContract.HasGroups(race, level))
                    {
                        contractsWithAllowedGroups.Add(killGroupContract);
                    }
                }
            }

            if (contractsWithAllowedGroups.Count == 0)
            {
                return(null);
            }

            KillNPCGroupContractData resultContractData = contractsWithAllowedGroups.AnyElement();

            var groupData = resultContractData.GetRandomGroup(race, level);

            if (groupData == null)
            {
                return(null);
            }

            KillNPCGroupContract contract = new KillNPCGroupContract(resultContractData.id,
                                                                     0,
                                                                     sourceWorld,
                                                                     manager,
                                                                     groupData.count,
                                                                     groupData.name,
                                                                     groupData.RandomZone());

            return(contract);
        }