Ejemplo n.º 1
0
        public static void Run(TreeElement node, ILexer lexer, ITokenOffsetProvider offsetProvider, bool trimTokens, SeldomInterruptChecker interruptChecker)
        {
            Assertion.Assert(node.parent == null, "node.parent == null");

            var root = node as CompositeElement;

            if (root == null)
            {
                return;
            }

            var inserter = new PsiMissingTokensInserter(lexer, offsetProvider, interruptChecker);

            lexer.Start();

            if (trimTokens)
            {
                using (var container = new DummyContainer(root))
                {
                    inserter.Run(container);
                }
            }
            else
            {
                var terminator = new EofToken(lexer.Buffer);
                root.AppendNewChild(terminator);
                inserter.Run(root);
                root.DeleteChildRange(terminator, terminator);
            }
        }
        public static void Run(
            TreeElement node,
            ILexer lexer,
            ITokenOffsetProvider offsetProvider,
            bool trimTokens,
            SeldomInterruptChecker interruptChecker,
            ITokenIntern intern)
        {
            Assertion.Assert(node.parent == null, "node.parent == null");

            var root = node as CompositeElement;
            if (root == null)
            {
                return;
            }

            var inserter = new NTriplesMissingTokensInserter(lexer, offsetProvider, interruptChecker, intern);
            lexer.Start();

            if (trimTokens)
            {
                using (var container = new DummyContainer(root))
                {
                    inserter.Run(container);
                }
            }
            else
            {
                var terminator = new EofToken(lexer.Buffer);
                root.AppendNewChild(terminator);
                inserter.Run(root);
                root.DeleteChildRange(terminator, terminator);
            }
        }
Ejemplo n.º 3
0
    public void UpdateContainer_IsItemCountCorrect()
    {
        DummyContainer       container = CreateTestContainer();
        IEnumerable <Weapon> weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);

        Assert.AreEqual(container.Items.Count(), 5);
    }
Ejemplo n.º 4
0
    public void UpdateContainer_AreGameObjectsCorrectlySpawned()
    {
        DummyContainer       container = CreateTestContainer();
        IEnumerable <Weapon> weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);

        Assert.AreEqual(5, GameObject.FindObjectsOfType <DummyItem>().Length);
    }
    public void DestroyExistingContainer()
    {
        DummyContainer testContainer = GameObject.FindObjectOfType <DummyContainer>();

        if (testContainer != null)
        {
            GameObject.DestroyImmediate(testContainer.gameObject);
        }
    }
Ejemplo n.º 6
0
    public void DestroyItem_IsItemDestroyed()
    {
        DummyContainer       container = CreateTestContainer();
        IEnumerable <Weapon> weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);
        container.DestroyItem(weapons.First());

        Assert.AreEqual(container.Items.Count(), 4);
    }
Ejemplo n.º 7
0
    public void Clear_IsItemsEmpty()
    {
        DummyContainer       container = CreateTestContainer();
        IEnumerable <Weapon> weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);
        container.Clear();

        Assert.AreEqual(0, container.Items.Count());
    }
Ejemplo n.º 8
0
        public void AddMuzzleMatrix(MyAmmoType ammoType, Matrix localMatrix)
        {
            int iAmmoType = (int)ammoType;

            if (!m_dummiesByAmmoType.ContainsKey(iAmmoType))
            {
                m_dummiesByAmmoType[iAmmoType] = new DummyContainer();
            }

            m_dummiesByAmmoType[iAmmoType].Dummies.Add(MatrixD.Normalize(localMatrix));
        }
Ejemplo n.º 9
0
    public IEnumerator Clear_AreGameObjectsDestroyed()
    {
        DummyContainer       container = CreateTestContainer();
        IEnumerable <Weapon> weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);
        container.Clear();

        yield return(new WaitForEndOfFrame());

        Assert.AreEqual(0, GameObject.FindObjectsOfType <DummyItem>().Length);
    }
Ejemplo n.º 10
0
    public void CreateItem_IsItemsCountIncreased()
    {
        DummyContainer       container = CreateTestContainer();
        IEnumerable <Weapon> weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);
        Weapon weapon = new Weapon();

        container.CreateItem(weapon);

        Assert.AreEqual(6, container.Items.Count());
    }
Ejemplo n.º 11
0
    public void GetItem_IsNewItemNotFound()
    {
        LogAssert.ignoreFailingMessages = true;

        DummyContainer       container = CreateTestContainer();
        IEnumerable <Weapon> weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);
        Weapon nonAddedWeapon = new Weapon();

        container.GetItem(nonAddedWeapon);
        LogAssert.Expect(LogType.Error, new Regex(".*"));
    }
Ejemplo n.º 12
0
    public void UpdateContainer_IsItemCountCorrectAfterNewUpdateContainer()
    {
        DummyContainer       container  = CreateTestContainer();
        IEnumerable <Weapon> oldWeapons = CreateWeaponsList(5);

        container.UpdateContainer(oldWeapons);

        IEnumerable <Weapon> newWeapons = CreateWeaponsList(5);

        container.UpdateContainer(newWeapons);

        Assert.AreEqual(5, container.Items.Count());
    }
Ejemplo n.º 13
0
    private DummyContainer CreateTestContainer()
    {
        GameObject containerGo = new GameObject();
        GameObject itemGo      = new GameObject();

        itemGo.transform.SetParent(containerGo.transform);
        DummyContainer container = containerGo.AddComponent <DummyContainer>();
        DummyItem      item      = itemGo.AddComponent <DummyItem>();

        container.ItemTemplate = item;
        container.Initialize();

        return(container);
    }
Ejemplo n.º 14
0
        public void TestApply()
        {
            DummyContainer dc      = new DummyContainer();
            Parameters     @params = Parameters.GetAllDefaultParameters();

            @params.SetParameterByKey(Parameters.KEY.COLUMN_DIMENSIONS, new[] { 2048 });
            @params.SetParameterByKey(Parameters.KEY.POTENTIAL_PCT, 20.0);
            @params.SetParameterByKey(Parameters.KEY.CELLS_PER_COLUMN, null);
            @params.SetParameterByKey(Parameters.KEY.SP_PARALLELMODE, true);
            @params.Apply(dc);
            Assert.AreEqual(20.0, dc.PotentialPct, 0, "Setter did not work");
            Assert.IsTrue(Arrays.AreEqual(new[] { 2048 }, dc.GetColumnDimensions()), "Setter did not work");
            Assert.IsTrue(dc.SpParallelMode, "dc.SpParallelMode");
        }
Ejemplo n.º 15
0
    public void GetItem_IsItemSame()
    {
        DummyContainer       container = CreateTestContainer();
        IEnumerable <Weapon> weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);
        Weapon weapon = new Weapon();

        container.CreateItem(weapon);

        DummyItem item = container.GetItem(weapon);

        Assert.AreSame(weapon, item.Data);
    }
Ejemplo n.º 16
0
    public void UpdateContainer_AreOldItemsNotFoundAfterNewUpdateContainer()
    {
        DummyContainer       container  = CreateTestContainer();
        IEnumerable <Weapon> oldWeapons = CreateWeaponsList(5);

        container.UpdateContainer(oldWeapons);

        IEnumerable <Weapon> newWeapons = CreateWeaponsList(5);

        container.UpdateContainer(newWeapons);

        LogAssert.ignoreFailingMessages = true;
        container.GetItem(oldWeapons.First());
        LogAssert.Expect(LogType.Error, new Regex(".*"));
    }
Ejemplo n.º 17
0
    public void DestroyItem_IsItemsEmpty()
    {
        DummyContainer container = CreateTestContainer();
        List <Weapon>  weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);

        for (int i = 0; i < 5; i++)
        {
            Weapon weaponToDelete = weapons.First();
            container.DestroyItem(weaponToDelete);
            weapons.Remove(weaponToDelete);
        }

        Assert.AreEqual(0, container.Items.Count());
    }
Ejemplo n.º 18
0
    public IEnumerator DestroyItem_AreItemGameObjectsDestroyed()
    {
        DummyContainer container = CreateTestContainer();
        List <Weapon>  weapons   = CreateWeaponsList(5);

        container.UpdateContainer(weapons);

        for (int i = 0; i < 5; i++)
        {
            Weapon weaponToDelete = weapons.First();
            container.DestroyItem(weaponToDelete);
            weapons.Remove(weaponToDelete);
        }

        yield return(new WaitForEndOfFrame());

        Assert.AreEqual(0, GameObject.FindObjectsOfType <DummyItem>().Length);
    }
Ejemplo n.º 19
0
        public void Run_TypesOnSameInterfaceRegisteredByDifferentBehaviors_LastRegisteredBehaviorOverwrites()
        {
            DummyAssembly  assembly       = new DummyAssembly(typeof(Implementation), typeof(ProxyImpl));
            DummyContainer dummyContainer = new DummyContainer();
            IBootstrapper  bootstrapper   = new Bootstrapper(new[] { assembly })
                                            .ConfigureWith(dummyContainer)
                                            .ConfigureWith(new Mock <IContextStore>().Object);

            IRegistrationBehavior proxyBeh   = new DummyBehavior("Proxy");
            IRegistrationBehavior serviceBeh = new DummyBehavior("Service");

            bootstrapper.AddRegistrationBehavior(proxyBeh);
            bootstrapper.AddRegistrationBehavior(serviceBeh);

            bootstrapper.Run();

            ServiceInfo resolved = dummyContainer.GetRegistration(typeof(IService));

            Assert.Equal(typeof(Implementation), resolved.To);
        }
Ejemplo n.º 20
0
        public void CouldCreateWriteReadInlinedVariantInALoop()
        {
            var count = 100000000;
            var sw    = new Stopwatch();

            for (int round = 0; round < 10; round++)
            {
                sw.Restart();
                var sum = 0.0;
                var v   = Variant.Create <double>(0.0);
                for (int i = 0; i < count; i++)
                {
                    v.Set <double>(i);
                    var d = v.Get <double>();
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue)
                {
                    Console.WriteLine($"Variant Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                sw.Restart();
                for (int i = 0; i < count; i++)
                {
                    v.UnsafeSetInlined <double>(i);
                    var d = v.UnsafeGetInilned <double>();
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue)
                {
                    Console.WriteLine($"Unsafe Variant Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                sw.Restart();
                for (int i = 0; i < count; i++)
                {
                    var span = v.Span <double>();
                    span[0] = i;
                    var d = span[0];
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue)
                {
                    Console.WriteLine($"Span (Inline) Variant Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                var v2 = Variant.Create <double>(new[] { 0.0 });
                sw.Restart();
                for (int i = 0; i < count; i++)
                {
                    var span = v2.Span <double>();
                    span[0] = i;
                    var d = span[0];
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue)
                {
                    Console.WriteLine($"Span (Array) Variant Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                sw.Restart();
                for (int i = 0; i < count; i++)
                {
                    v2.Set <double>(0, 0.0);
                    var d = v2.Get <double>(0);
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue)
                {
                    Console.WriteLine($"Get/Set(idx) Variant Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                sw.Restart();
                sum = 0.0;
                var array = new[] { 0.0 };
                for (int i = 0; i < count; i++)
                {
                    array[0] = i;
                    var d = array[0];
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue && array[0] > 0)
                {
                    Console.WriteLine($"Array Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                sw.Restart();
                sum = 0.0;
                var container = new Container <double>();
                for (int i = 0; i < count; i++)
                {
                    container.Value = i;
                    var d = container.Value;
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue && container.Value > 0)
                {
                    Console.WriteLine($"Inlined Property Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                sw.Restart();
                sum = 0.0;
                var dummyContainer = new DummyContainer <double>();
                for (int i = 0; i < count; i++)
                {
                    dummyContainer.Value = i;
                    var d = dummyContainer.Value;
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue && dummyContainer.Value > 0)
                {
                    Console.WriteLine($"Noninlined Property Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                sw.Restart();
                sum = 0.0;
                var boxed = new BoxedContainer();
                for (int i = 0; i < count; i++)
                {
                    boxed.Value = (double)i;
                    var d = (double)boxed.Value;
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue)
                {
                    Console.WriteLine($"Inlined Boxed Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                sw.Restart();
                sum = 0.0;
                var boxedDummy = new BoxedDummyContainer();
                for (int i = 0; i < count; i++)
                {
                    boxedDummy.Value = (double)i;
                    var d = (double)boxed.Value;
                    sum += d;
                }
                sw.Stop();
                if (sum < double.MaxValue)
                {
                    Console.WriteLine($"Noninlined Boxed Elapsed: {sw.ElapsedMilliseconds}, Mops: {count / (sw.ElapsedMilliseconds * 0.001)}");
                }

                Console.WriteLine("---------------------------------");
            }
        }
Ejemplo n.º 21
0
        public void AddMuzzleMatrix(MyAmmoType ammoType, Matrix localMatrix)
        {
            int iAmmoType = (int)ammoType;
            if (!m_dummiesByAmmoType.ContainsKey(iAmmoType))
            {
                m_dummiesByAmmoType[iAmmoType] = new DummyContainer();
            }

            m_dummiesByAmmoType[iAmmoType].Dummies.Add(MatrixD.Normalize(localMatrix));
        }
Ejemplo n.º 22
0
        static void Main(string[] args)
        {
            Utility.WriteExeDetails();

            InvBonuses bonuses = new InvBonuses();
            bonuses.BonusItems = new List<BonusData>();
            var utility = Utility<Quest>.Instance;

            Console.WriteLine("Loading strings...");
            Utility.LoadStrings(root);
            Console.WriteLine("Loading items...");
            Utility.LoadItems(root);

            var test = Utility.ItemIndex.ItemList.Where(i => i.name.IndexOf("_head_") != -1 &&
                                                             i.Description != null /*&&
                                                             i.Description.IndexOf("hairpin", StringComparison.InvariantCultureIgnoreCase) != -1*/
                                                                                                                                                  );
            StringBuilder heads = new StringBuilder();

            foreach (var hh in test) {
                string trimmed = hh.name.Remove(hh.name.Length - 4, 4);
                if (trimmed.EndsWith("_a_r2") || trimmed.EndsWith("_a_l2"))
                    heads.AppendLine(String.Format("{0}\t{1}\t{2}", hh.name, hh.Description, hh.Quality));
            }

            CultureInfo ci = new CultureInfo("");
            int lvl = 0;
            var junks = Utility.ItemIndex.ItemList.Where(i => i.Quality == ItemQualities.junk && i.quest == 0);

            var lvlJunks = from it in junks
                           let under = it.desc.LastIndexOf('_')
                           let hasNumber = under == -1 ? false : Int32.TryParse(it.desc.Substring(under + 1), out lvl)
                           where hasNumber && it.desc.StartsWith("STR_JUNK_")
                           select new { Item = it, Level = lvl, Name = it.desc.Substring(9, under - 9) };

            Console.WriteLine("Loading pet feeds...");
            Utility.LoadClientPetFeed(root);

            var expFeed = Utility<ToypetFeed>.Instance;
            expFeed.AddGetter("favorite_flavor_id");
            expFeed.AddGetter("favorite_flavor_desc");

            var ourFeed = new PetFeed();
            string[] groupNames = Enum.GetNames(typeof(FoodType));
            ourFeed.ItemGroups = groupNames.Select(n => new ItemGroup()
            {
                type = ((FoodType)Enum.Parse(typeof(FoodType), n))
            }).Where(g => g.type != FoodType.ALL && g.type != FoodType.NONE && g.type != FoodType.DOPING)
              .ToArray();

            foreach (ItemGroup group in ourFeed.ItemGroups) {
                if (group.type == FoodType.ARMOR) {
                    var ncArmors = lvlJunks.Where(i => armors.Contains(i.Name));
                    group.itemids = String.Join(",", ncArmors.Select(i => i.Item.id.ToString()).ToArray());
                    foreach (var armor in ncArmors) {
                        List<ItemFeed> feeds;
                        var feedItem = new ItemFeed() { type = group.type, level = armor.Level };
                        if (feedItems.ContainsKey(armor.Item.id))
                            feeds = feedItems[armor.Item.id];
                        else {
                            feeds = new List<ItemFeed>();
                            feedItems.Add(armor.Item.id, feeds);
                        }
                        feeds.Add(feedItem);
                    }
                } else if (group.type == FoodType.BALAUR) {
                    var ncScales = lvlJunks.Where(i => balaurscales.Contains(i.Name));
                    group.itemids = String.Join(",", ncScales.Select(i => i.Item.id.ToString()).ToArray());
                    foreach (var scale in ncScales) {
                        List<ItemFeed> feeds;
                        var feedItem = new ItemFeed() { type = group.type, level = scale.Level };
                        if (feedItems.ContainsKey(scale.Item.id))
                            feeds = feedItems[scale.Item.id];
                        else {
                            feeds = new List<ItemFeed>();
                            feedItems.Add(scale.Item.id, feeds);
                        }
                        feeds.Add(feedItem);
                    }
                } else if (group.type == FoodType.BISCUIT) {
                    group.itemids = String.Join(",", biscuits.Select(i => i.ToString()).ToArray());
                    foreach (var bis in biscuits) {
                        List<ItemFeed> feeds;
                        var feedItem = new ItemFeed() { type = group.type };
                        if (feedItems.ContainsKey(bis))
                            feeds = feedItems[bis];
                        else {
                            feeds = new List<ItemFeed>();
                            feedItems.Add(bis, feeds);
                        }
                        feeds.Add(feedItem);
                    }
                } else if (group.type == FoodType.BONE) {
                    var ncBones = lvlJunks.Where(i => bones.Contains(i.Name));
                    group.itemids = String.Join(",", ncBones.Select(i => i.Item.id.ToString()).ToArray());
                    foreach (var bone in ncBones) {
                        List<ItemFeed> feeds;
                        var feedItem = new ItemFeed() { type = group.type, level = bone.Level };
                        if (feedItems.ContainsKey(bone.Item.id))
                            feeds = feedItems[bone.Item.id];
                        else {
                            feeds = new List<ItemFeed>();
                            feedItems.Add(bone.Item.id, feeds);
                        }
                        feeds.Add(feedItem);
                    }
                } else if (group.type == FoodType.CRYSTAL) {
                    group.itemids = "182006376";
                    List<ItemFeed> feeds;
                    var feedItem = new ItemFeed() { type = group.type };
                    if (feedItems.ContainsKey(182006376))
                        feeds = feedItems[182006376];
                    else {
                        feeds = new List<ItemFeed>();
                        feedItems.Add(182006376, feeds);
                    }
                    feeds.Add(feedItem);
                } else if (group.type == FoodType.FLUID) {
                    var ncFluids = lvlJunks.Where(i => fluids.Contains(i.Name));
                    group.itemids = String.Join(",", ncFluids.Select(i => i.Item.id.ToString()).ToArray());
                    foreach (var fluid in ncFluids) {
                        List<ItemFeed> feeds;
                        var feedItem = new ItemFeed() { type = group.type, level = fluid.Level };
                        if (feedItems.ContainsKey(fluid.Item.id))
                            feeds = feedItems[fluid.Item.id];
                        else {
                            feeds = new List<ItemFeed>();
                            feedItems.Add(fluid.Item.id, feeds);
                        }
                        feeds.Add(feedItem);
                    }
                } else if (group.type == FoodType.GEM) {
                    group.itemids = "182006377";
                    List<ItemFeed> feeds;
                    var feedItem = new ItemFeed() { type = group.type };
                    if (feedItems.ContainsKey(182006377))
                        feeds = feedItems[182006377];
                    else {
                        feeds = new List<ItemFeed>();
                        feedItems.Add(182006377, feeds);
                    }
                    feeds.Add(feedItem);
                } else if (group.type == FoodType.HEALTHY1 || group.type == FoodType.HEALTHY2) {
                    group.itemids = String.Join(",", healthyfood.Select(i => i.ToString()).ToArray());
                    foreach (var hf in healthyfood) {
                        List<ItemFeed> feeds;
                        var feedItem = new ItemFeed() { type = group.type };
                        if (feedItems.ContainsKey(hf))
                            feeds = feedItems[hf];
                        else {
                            feeds = new List<ItemFeed>();
                            feedItems.Add(hf, feeds);
                        }
                        feeds.Add(feedItem);
                    }
                } else if (group.type == FoodType.POWDER) {
                    group.itemids = "182006375";
                    List<ItemFeed> feeds;
                    var feedItem = new ItemFeed() { type = group.type };
                    if (feedItems.ContainsKey(182006375))
                        feeds = feedItems[182006375];
                    else {
                        feeds = new List<ItemFeed>();
                        feedItems.Add(182006375, feeds);
                    }
                    feeds.Add(feedItem);
                } else if (group.type == FoodType.SOUL) {
                    var ncSouls = lvlJunks.Where(i => souls.Contains(i.Name));
                    group.itemids = String.Join(",", ncSouls.Select(i => i.Item.id.ToString()).ToArray());
                    foreach (var soul in ncSouls) {
                        List<ItemFeed> feeds;
                        var feedItem = new ItemFeed() { type = group.type, level = soul.Level };
                        if (feedItems.ContainsKey(soul.Item.id))
                            feeds = feedItems[soul.Item.id];
                        else {
                            feeds = new List<ItemFeed>();
                            feedItems.Add(soul.Item.id, feeds);
                        }
                        feeds.Add(feedItem);
                    }
                } else if (group.type == FoodType.THORN) {
                    var ncThorns = lvlJunks.Where(i => souls.Contains(i.Name));
                    group.itemids = String.Join(",", ncThorns.Select(i => i.Item.id.ToString()).ToArray());
                    foreach (var thorn in ncThorns) {
                        List<ItemFeed> feeds;
                        var feedItem = new ItemFeed() { type = group.type, level = thorn.Level };
                        if (feedItems.ContainsKey(thorn.Item.id))
                            feeds = feedItems[thorn.Item.id];
                        else {
                            feeds = new List<ItemFeed>();
                            feedItems.Add(thorn.Item.id, feeds);
                        }
                        feeds.Add(feedItem);
                    }
                } else if (group.type == FoodType.MISC) {
                    group.itemids = "MISC";
                } else if (group.type == FoodType.MISC1) {
                    group.itemids = "182006362";
                    List<ItemFeed> feeds;
                    var feedItem = new ItemFeed() { type = group.type };
                    if (feedItems.ContainsKey(182006362))
                        feeds = feedItems[182006362];
                    else {
                        feeds = new List<ItemFeed>();
                        feedItems.Add(182006362, feeds);
                    }
                    feeds.Add(feedItem);
                } else if (group.type == FoodType.MISC2) {
                    group.itemids = String.Join(",", testfeed.Select(i => i.ToString()).ToArray());
                    foreach (var t in testfeed) {
                        List<ItemFeed> feeds;
                        var feedItem = new ItemFeed() { type = group.type };
                        if (feedItems.ContainsKey(t))
                            feeds = feedItems[t];
                        else {
                            feeds = new List<ItemFeed>();
                            feedItems.Add(t, feeds);
                        }
                        feeds.Add(feedItem);
                    }
                }
            }

            Dictionary<FoodType, OrderedDictionary> priceLevelStats = new Dictionary<FoodType, OrderedDictionary>();
            foreach (var gr in ourFeed.ItemGroups) {
                if (gr.itemids == null)
                    continue;
                OrderedDictionary levelStats = null;
                if (!priceLevelStats.ContainsKey(gr.type)) {
                    levelStats = new OrderedDictionary();
                    priceLevelStats.Add(gr.type, levelStats);
                } else {
                    levelStats = priceLevelStats[gr.type];
                }
                List<int> itemIds = new List<int>();
                if (gr.itemids == "MISC") {
                    itemIds.AddRange(Utility.ItemIndex.ItemList.Where(i => i.quest == 0 && i.Quality == ItemQualities.junk)
                                                               .Select(i => i.id));
                } else {
                    itemIds.AddRange(gr.itemids.Split(',').Select(i => Int32.Parse(i)));
                }
                foreach (int id in itemIds) {
                    Item item = Utility.ItemIndex.GetItem(id);
                    MinMaxMean stats = null;
                    if (!levelStats.Contains(item.level)) {
                        stats = new MinMaxMean();
                        levelStats.Add(item.level, stats);
                    } else {
                        stats = (MinMaxMean)levelStats[(object)item.level];
                    }
                    stats.AddValue(item.price, item);
                }
            }

            StringBuilder print = new StringBuilder();
            foreach (var pair in priceLevelStats) {
                print.AppendLine(String.Format("Food type {0}", pair.Key.ToString()));
                foreach (DictionaryEntry entry in pair.Value) {
                    MinMaxMean stat = (MinMaxMean)entry.Value;
                    print.AppendLine(String.Format("\tLevel {0}: Min={1} ({2}), Max={3} ({4}), Mean={5}", entry.Key,
                        stat.Min, stat.MinItem.id, stat.Max, stat.MaxItem.id, stat.Mean));
                }
                print.AppendLine();
            }

            foreach (ToypetFeed feed in Utility.PetFeed.Items) {
                PetFlavour flavour = new PetFlavour();
                flavour.id = feed.id;
                flavour.count = feed.feeding_count;
                flavour.cd = feed.feeding_cooltime;
                flavour.love_count = feed.limit_love_count;
                // flavour.name = Utility.StringIndex.GetString(feed.name);
                flavour.desc = Utility.StringIndex.GetString(feed.desc);
                List<PetFood> list = new List<PetFood>();
                expFeed.Export<PetFood>(feed, "favorite_flavor_id", list);
                expFeed.Export<PetFood>(feed, "favorite_flavor_desc", list);
                List<PetFood> lovedList = new List<PetFood>();
                expFeed.Export<PetFood>(feed, "love_flavor_id_", lovedList);
                expFeed.Export<PetFood>(feed, "love_flavor_desc_", lovedList);
                list.AddRange(lovedList);
                flavour.food = list.Where(f => f.type != FoodType.NONE && (f.type != FoodType.ALL || f.rewards.Count > 0))
                                   .ToList();
                ourFeed.Flavours.Add(flavour);
            }

            HashSet<int> exportedRwds = new HashSet<int>();

            foreach (var f in ourFeed.Flavours) {
                foreach (var i in f.food) {
                    int nonEventItems = 0;
                    foreach (var ri in i.rewards) {
                        Item item = Utility.ItemIndex.GetItem(ri.item);
                        if (!item.Description.StartsWith("[Event]"))
                            nonEventItems++;
                    }

                    bool usePercent = true;
                    int healthyStartItem = 182006413;
                    int count = i.loved ? f.love_count : f.count;

                    for (int x = 0; x < i.rewards.Count; x++) {
                        PetReward r = i.rewards[x];
                        int priceItem = 0;
                        switch (i.type) {
                            case FoodType.POWDER:
                                priceItem = 182006375;
                                break;
                            case FoodType.CRYSTAL:
                                priceItem = 182006376;
                                break;
                            case FoodType.GEM:
                                priceItem = 182006377;
                                break;
                            case FoodType.HEALTHY1:
                            case FoodType.HEALTHY2:
                                priceItem = healthyStartItem++;
                                break;
                            default:
                                usePercent = false;
                                priceItem = r.item;
                                count = 1;
                                break;
                        }
                        Item item = Utility.ItemIndex.GetItem(r.item);
                        if (!item.Description.StartsWith("[Event]")) {
                            decimal percent = 100;
                            if (usePercent)
                                percent -= 100M / nonEventItems * (nonEventItems - x - 1);
                            decimal finalPrice = Utility.ItemIndex.GetItem(priceItem).price * count * percent / 100;
                            r.price = (long)Math.Round(finalPrice, 0);
                        }
                        exportedRwds.Add(r.item);
                    }
                }
            }

            var prwd = Utility.ItemIndex.ItemList.Where(i => i.tag == ItemTag.pet && !exportedRwds.Contains(i.id));
            StringBuilder ps = new StringBuilder();
            foreach (var p in prwd)
                ps.AppendLine(String.Format("{0}: {1}\t{2}\t{3}", p.id, p.Description, p.name, p.Quality));

            var saveSettings = new XmlWriterSettings()
            {
                CheckCharacters = false,
                CloseOutput = false,
                Encoding = new UTF8Encoding(false),
                Indent = true,
                IndentChars = "\t",
                NewLineChars = "\n",
            };

            string outputPath = Path.Combine(root, @".\output\");
            if (!Directory.Exists(outputPath))
                Directory.CreateDirectory(outputPath);

            using (FileStream stream = new FileStream(Path.Combine(outputPath, "pet_feed.xml"),
                                                      FileMode.Create, FileAccess.Write)) {
                using (XmlWriter wr = XmlWriter.Create(stream, saveSettings)) {
                    XmlSerializer ser = new XmlSerializer(typeof(PetFeed));
                    ser.Serialize(wr, ourFeed);
                }
            }

            Console.WriteLine("Loading quests...");
            Utility.LoadQuestFile(root);
            Console.WriteLine("Loading cosmetics...");
            Utility.LoadClientCosmetics(root);
            Console.WriteLine("Loading recipes...");
            Utility.LoadCombinedRecipes(root);
            Console.WriteLine("Loading skills...");
            Utility.LoadSkills(root);
            Console.WriteLine("Loading skill learns...");
            Utility.LoadSkillLearns(root);
            Console.WriteLine("Loading NPCs...");
            Utility.LoadClientNpcs(root);
            Console.WriteLine("Loading droplist...");
            Utility.LoadDroplist(root);
            Console.WriteLine("Loading presets...");

            string presetsPath = Path.Combine(root, @"data\presets");
            string[] presetFiles = Directory.GetFiles(presetsPath, "preset_*.xml");

            ClientPresetFile combinedPresets = null;

            foreach (string presetPath in presetFiles) {
                Utility.LoadClientPreset(presetPath);
                if (combinedPresets == null) {
                    combinedPresets = Utility.Presets;
                } else {
                    ClientPresetFile newPreset = Utility.Presets;
                    combinedPresets.Presets.Add(newPreset.Presets.First());
                }
            }

            List<OurPreset> ourPresets = new List<OurPreset>();
            foreach (Preset preset in combinedPresets.Presets) {
                OurPreset ourPreset = new OurPreset()
                {
                    name = preset.name.ToUpper(),
                    @class = (Class)Enum.Parse(typeof(Class), preset.pc_class.ToString(), true),
                    detail = preset.detail.ToLower(),
                    gender = preset.pc_type == PcType.pc_dm || preset.pc_type == PcType.pc_lm ? Gender.MALE : Gender.FEMALE,
                    race = preset.pc_type == PcType.pc_df || preset.pc_type == PcType.pc_dm ? ItemRace.ASMODIANS : ItemRace.ELYOS,
                    hair_color = getHexRGB(preset.hair_color),
                    lip_color = getHexRGB(preset.lip_color),
                    skin_color = getHexRGB(preset.skin_color),
                    height = (float)preset.scale,
                    hair_type = preset.hair_type,
                    face_type = preset.face_type
                };
                ourPresets.Add(ourPreset);
            }

            Utility.Presets.Presets = null;
            Utility.Presets.OurPresets = ourPresets;

            Console.WriteLine("Saving presets...");
            using (FileStream stream = new FileStream(Path.Combine(outputPath, "presets.xml"),
                                                      FileMode.Create, FileAccess.Write)) {
                using (XmlWriter wr = XmlWriter.Create(stream, saveSettings)) {
                    XmlSerializer ser = new XmlSerializer(typeof(ClientPresetFile));
                    ser.Serialize(wr, Utility.Presets);
                }
            }

            Console.WriteLine("Saving item groups...");
            ExportItemGroups(saveSettings, outputPath);

            Console.WriteLine("Saving recipes...");
            ExportRecipes(saveSettings, outputPath);

            Console.WriteLine("Saving grouped task items... ");

            taskExport = new TaskExport();
            foreach (var recipe in Utility.RecipeIndex.RecipeList) {
                if (recipe.qualification_race == RecipeRace.all)
                    continue;

                Task task = null;
                string skill = recipe.name;
                if (skill.StartsWith("rd"))
                    skill = skill.Remove(0, 1);
                skill = skill.Remove(0, 2).Substring(0, 2);

                if (recipe.qualification_race == RecipeRace.pc_light)
                    task = taskExport.RaceTasks[0][recipe.required_skillpoint, skill];
                else
                    task = taskExport.RaceTasks[1][recipe.required_skillpoint, skill];

                List<string> searchSuffixes = new List<string>();
                if (skill == "ha") {
                    searchSuffixes.Add("jr");
                    searchSuffixes.Add("hw");
                }
                searchSuffixes.Add(skill);

                HashSet<string> items = new HashSet<string>();
                foreach (string suffix in searchSuffixes) {
                    // products only if used to produce other products
                    // This won't add items as "item_d_ha_q6302"
                    if (recipe.product.Contains("_" + suffix + "_") && !recipe.product.StartsWith("item_"))
                        items.Add(recipe.product);
                    if (recipe.component1.StartsWith(suffix + "_part") ||
                        recipe.component1.StartsWith("shopmaterial_" + suffix + "_"))
                        items.Add(recipe.component1);
                    if (recipe.component2 != null && (recipe.component2.StartsWith(suffix + "_part") ||
                        recipe.component2.StartsWith("shopmaterial_" + suffix + "_")))
                        items.Add(recipe.component2);
                    if (recipe.component3 != null && (recipe.component3.StartsWith(suffix + "_part") ||
                        recipe.component3.StartsWith("shopmaterial_" + suffix + "_")))
                        items.Add(recipe.component3);
                    if (recipe.component4 != null && (recipe.component4.StartsWith(suffix + "_part") ||
                        recipe.component4.StartsWith("shopmaterial_" + suffix + "_")))
                        items.Add(recipe.component4);
                    if (recipe.component5 != null && (recipe.component5.StartsWith(suffix + "_part") ||
                        recipe.component5.StartsWith("shopmaterial_" + suffix + "_")))
                        items.Add(recipe.component5);
                    if (recipe.component6 != null && (recipe.component6.StartsWith(suffix + "_part") ||
                        recipe.component6.StartsWith("shopmaterial_" + suffix + "_")))
                        items.Add(recipe.component6);
                    if (recipe.component7 != null && (recipe.component7.StartsWith(suffix + "_part") ||
                        recipe.component7.StartsWith("shopmaterial_" + suffix + "_")))
                        items.Add(recipe.component7);
                }

                items.Add("rec_" + recipe.name);

                // All shopmaterials fall into range: min = 169400010; max = 169405025
                foreach (string item in items) {
                    Item inItem = Utility.ItemIndex.GetItem(item);
                    if (inItem != null) {
                        if (task.ContainsItem(inItem.id))
                            continue;

                        // exclude recipes which are autolearned
                        if (inItem.craft_recipe_info != null &&
                            Utility.RecipeIndex[inItem.craft_recipe_info].auto_learn > 0)
                            continue;
                        RecipeItem rcItem = new RecipeItem();
                        rcItem.id = inItem.id;
                        rcItem.level = inItem.level;
                        rcItem.name = inItem.name;
                        rcItem.price = inItem.price;
                        rcItem.desc = inItem.Description;
                        rcItem.race = task.race;
                        rcItem.isRecipe = inItem.craft_recipe_info != null;
                        task.Items.Add(rcItem);
                    } else {
                        Debug.Print("Missing recipe item: '{0}'", item);
                    }
                }
            }

            taskExport.RaceTasks[0].Tasks = taskExport.RaceTasks[0].Tasks.OrderBy(t => t.SortString).ToList();
            taskExport.RaceTasks[1].Tasks = taskExport.RaceTasks[1].Tasks.OrderBy(t => t.SortString).ToList();

            using (FileStream stream = new FileStream(Path.Combine(root, @".\output\tasks.xml"),
                                                      FileMode.Create, FileAccess.Write)) {
                using (XmlWriter wr = XmlWriter.Create(stream, saveSettings)) {
                    XmlSerializer ser = new XmlSerializer(typeof(TaskExport));
                    ser.Serialize(wr, taskExport);
                }
            }

            Console.WriteLine("Modifying item templates...");
            InjectBonusesToItemTemplate(saveSettings, outputPath);

            Console.Write("Parsing quests... ");
            int top = Console.CursorTop;
            int left = Console.CursorLeft;

            foreach (var q in Utility.QuestIndex.QuestList) {

                Console.SetCursorPosition(left, top);
                Console.Write("Q" + q.id);

                //WrappedBonus wi = null;
                //if (q.reward_item_ext_1 != null && q.reward_item_ext_1.StartsWith("wrap_")) {
                //    wi = new WrappedBonus();
                //    string[] itemData = q.reward_item_ext_1.Split(' ');
                //    Item item = Utility.ItemIndex.GetItem(itemData[0]);
                //    if (item == null)
                //        wi.originalItemId = 0;
                //    else
                //        wi.originalItemId = item.id;

                //    wi.bonusLevel = Utility.GetLevelFromName(itemData[0]);
                //    if (itemData[0].Contains("_enchant_"))
                //        wi.type = BonusType.ENCHANT;
                //    else if (itemData[0].Contains("_matter_option_"))
                //        wi.type = BonusType.MANASTONE;
                //    else
                //        wi = null; // _matter_matter_ do not contain names in client_strings yet
                //}
                if (q.HasRandomRaward()) {
                    BonusData bi = new BonusData();
                    bi.questId = q.id;
                    bi.BonusInfos = new List<AbstractInventoryBonus>();

                    var container = new DummyContainer();
                    container.checkItems = new List<CheckItem>();
                    utility.Export(q, "reward_item", container.checkItems);
                    utility.Export(q, "check_item", container.checkItems);
                    bi.BonusInfos = container.checkItems.Where(item => item.bonuses.Count > 0)
                                                        .SelectMany(item => item.bonuses).ToList();
                    //if (wi != null) {
                    //    bi.BonusInfos.Add(wi);
                    //}
                    bonuses.BonusItems.Add(bi);
                } /*else if (wi != null) {
                    BonusData bi = new BonusData();
                    bi.questId = q.id;
                    bi.BonusInfos = new List<AbstractInventoryBonus>() { wi };
                    bonuses.BonusItems.Add(bi);
                }*/

                Thread.Sleep(1);
            }

            Console.Clear();
            Console.WriteLine("Saving bonuses template... ");

            using (FileStream stream = new FileStream(Path.Combine(outputPath, "bonuses.xml"),
                                                      FileMode.Create, FileAccess.Write)) {
                using (XmlWriter wr = XmlWriter.Create(stream, saveSettings)) {
                    XmlSerializer ser = new XmlSerializer(typeof(InvBonuses));
                    ser.Serialize(wr, bonuses);
                }
            }

            Console.WriteLine("Done. Press any key...");
            Console.Read();
        }
Ejemplo n.º 23
0
 static Container()
 {
     Current = new DummyContainer();
 }