Exemplo n.º 1
0
        }                                           // This is to make sure tiles are only updated once per frame.


        //-----------------------------------------------------------------------------
        // Constructors
        //-----------------------------------------------------------------------------

        // Use Tile.CreateTile() instead of this constructor.
        protected Tile()
        {
            tileGridArea     = Rectangle2I.Zero;
            isAlive          = false;
            isInitialized    = false;
            location         = Point2I.Zero;
            layer            = 0;
            offset           = Point2I.Zero;
            size             = Point2I.One;
            spriteAsObject   = new SpriteAnimation();
            isSolid          = false;
            isMoving         = false;
            pushDelay        = 20;
            properties       = new Properties(this);
            tileData         = null;
            moveDirection    = Point2I.Zero;
            dropList         = null;
            hasMoved         = false;
            path             = null;
            pathTimer        = 0;
            pathMoveIndex    = 0;
            fallsInHoles     = true;
            soundMove        = GameData.SOUND_BLOCK_PUSH;
            conveyorVelocity = Vector2F.Zero;
            surfaceTile      = null;
            collisionStyle   = CollisionStyle.Rectangular;
            graphics         = new TileGraphicsComponent(this);
        }
Exemplo n.º 2
0
 public void Init(SharedChestComponentData data)
 {
     duration = data.duration;
     updateDropListInterval = data.updateDropListInterval;
     dropList = data.dropList;
     UpdateDropList();
 }
Exemplo n.º 3
0
        //-----------------------------------------------------------------------------
        // Initialization
        //-----------------------------------------------------------------------------

        public void Initialize(RoomControl control)
        {
            this.roomControl = control;
            this.isAlive     = true;

            if (!isInitialized)
            {
                isInitialized = true;
                hasMoved      = false;
                velocity      = Vector2F.Zero;

                graphics.ImageVariant = roomControl.Room.Zone.ImageVariantID;

                // Begin a path if there is one.
                string   pathString = properties.GetString("path", "");
                TilePath p          = TilePath.Parse(pathString);
                BeginPath(p);

                // Set the solid state.
                isSolid = (SolidType != TileSolidType.NotSolid);

                // Setup default drop list.
                if (IsDigable && !IsSolid)
                {
                    dropList = RoomControl.GameControl.DropManager.GetDropList("dig");
                }
                else
                {
                    dropList = RoomControl.GameControl.DropManager.GetDropList("default");
                }

                // Call the virtual initialization method.
                OnInitialize();
            }
        }
Exemplo n.º 4
0
        //  This will update the items odds for the interactables that utilize ExplicitPickupDropTable for specific boss items.
        private static void UpdateDropTableItemOdds(DropList dropList, ExplicitPickupDropTable dropTable, string interactableName)
        {
            if (!DropTableItemOdds.ContainsKey(interactableName))
            {
                DropTableItemOdds.Add(interactableName, new List <float>());
                foreach (ExplicitPickupDropTable.Entry entry in dropTable.entries)
                {
                    DropTableItemOdds[interactableName].Add(entry.pickupWeight);
                }
            }

            if (DropTableItemOdds.ContainsKey(interactableName))
            {
                for (int entryIndex = 0; entryIndex < dropTable.entries.Length; entryIndex++)
                {
                    dropTable.entries[entryIndex].pickupWeight = DropTableItemOdds[interactableName][entryIndex];
                }
            }
            for (int entryIndex = 0; entryIndex < dropTable.entries.Length; entryIndex++)
            {
                if (!dropList.AvailableBossDropList.Contains(PickupCatalog.FindPickupIndex(dropTable.entries[entryIndex].pickupName)))
                {
                    dropTable.entries[entryIndex].pickupWeight = 0;
                }
            }

            //dropTable.GenerateWeightedSelection();
        }
            void SetDefaultDropLists(Run run)
            {
                List <PickupIndex> masterList = new List <PickupIndex>();

                foreach (PickupIndex pickupIndex in run.availableTier1DropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableTier2DropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableTier3DropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableBossDropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableLunarDropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableEquipmentDropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (EquipmentIndex equipmentIndex in Catalogue.eliteEquipment)
                {
                    masterList.Add(PickupCatalog.FindPickupIndex(equipmentIndex));
                }
                DropList.DuplicateDropList(masterList, playerItems);
                DropList.DuplicateDropList(masterList, monsterItems);
            }
        public void SetDropped(DropList dropped, int rx, int ry)
        {
            Dropped     = dropped;
            position.X  = currentX - rx;
            position.Y  = currentY - ry + 22;
            size.width  = 0;
            size.height = 0;
            uint spacer = Dropped.Spacer;
            List <DropListItem> itemList = Dropped.ItemList;
            int tempY = (int)Dropped.Top;

            foreach (DropListItem iter in itemList)
            {
                Size perfectSize = iter.GetPreferedSize();
                iter.Position.X = (int)Dropped.Left;
                iter.Position.Y = tempY;
                size.width      = Math.Max(perfectSize.width, size.width);
                size.height    += spacer + perfectSize.height;
                tempY          += (int)(perfectSize.height + spacer);
            }

            foreach (DropListItem iter in itemList)
            {
                iter.Size.width = size.width;
            }

            size.width  += Dropped.Left + Dropped.Right;
            size.height += Dropped.Top + Dropped.Bottom - spacer;
        }
Exemplo n.º 7
0
 protected override void Start()
 {
     base.Start();
     LootSpawner = GetComponentInChildren <DropList>();
     Spawners    = GetComponentsInChildren <MobSpawner>();
     BossSpawner = GetComponentInChildren <BossSpawner>();
     BossSpawner.transform.GetComponent <SpriteRenderer>().sortingLayerName = SortingLayer.Ground;
 }
Exemplo n.º 8
0
 public static void UpdateDropTableItemOdds(DropList dropList, SpawnCard spawnCard, string interactableName)
 {
     if (DropTableItemInteractables.Contains(interactableName))
     {
         var dropTable = spawnCard.prefab.GetComponent <ShopTerminalBehavior>().dropTable as ExplicitPickupDropTable;
         DropOdds.UpdateDropTableItemOdds(dropList, dropTable, interactableName);
     }
 }
Exemplo n.º 9
0
 protected internal KComboBox(bool ownerDraw)
 {
     MaxDropDownItems            = 8;
     _list                       = new DropList(this, ownerDraw);
     _list.IntegralHeight        = true;
     _list.TabStop               = false;
     _list.SelectedIndexChanged += _list_SelectedIndexChanged;
     DropControl                 = _list;
 }
            void OnEnter(On.EntityStates.ScavMonster.FindItem.orig_OnEnter orig, EntityStates.ScavMonster.FindItem findItem)
            {
                bool valid = false;

                foreach (bool tierValid in tierValidScav.Values)
                {
                    if (tierValid)
                    {
                        valid = true;
                        break;
                    }
                }
                if (valid)
                {
                    List <PickupIndex> tier1Adjusted = monsterDropList.availableTier1DropList;
                    if (!tierValidMonsterTeam[ItemTier.Tier1])
                    {
                        tier1Adjusted = DropList.tier1DropListOriginal;
                    }
                    List <PickupIndex> tier2Adjusted = monsterDropList.availableTier2DropList;
                    if (!tierValidMonsterTeam[ItemTier.Tier2])
                    {
                        tier2Adjusted = DropList.tier2DropListOriginal;
                    }
                    List <PickupIndex> tier3Adjusted = monsterDropList.availableTier3DropList;
                    if (!tierValidScav[ItemTier.Tier3])
                    {
                        tier3Adjusted = DropList.tier3DropListOriginal;
                    }
                    DropList.SetDropLists(tier1Adjusted, tier2Adjusted, tier3Adjusted, DropList.equipmentDropListOriginal);

                    List <float> scavTierChanceBackup = new List <float>();
                    scavTierChanceBackup.Add(EntityStates.ScavMonster.FindItem.tier1Chance);
                    scavTierChanceBackup.Add(EntityStates.ScavMonster.FindItem.tier2Chance);
                    scavTierChanceBackup.Add(EntityStates.ScavMonster.FindItem.tier3Chance);

                    if (!tierValidScav[ItemTier.Tier1])
                    {
                        EntityStates.ScavMonster.FindItem.tier1Chance = 0;
                    }
                    if (!tierValidScav[ItemTier.Tier2])
                    {
                        EntityStates.ScavMonster.FindItem.tier2Chance = 0;
                    }
                    if (!tierValidScav[ItemTier.Tier3])
                    {
                        EntityStates.ScavMonster.FindItem.tier3Chance = 0;
                    }

                    orig(findItem);

                    DropList.RevertDropLists();
                    EntityStates.ScavMonster.FindItem.tier1Chance = scavTierChanceBackup[0];
                    EntityStates.ScavMonster.FindItem.tier2Chance = scavTierChanceBackup[1];
                    EntityStates.ScavMonster.FindItem.tier3Chance = scavTierChanceBackup[2];
                }
            }
Exemplo n.º 11
0
 //Pass user data into the list and instantiate UI elements.
 void PopulateList(DropList targetList, List <ListItemData> data, GameObject prefab, Action <Draggable, Draggable> OnDraggableDropped)
 {
     foreach (ListItemData datum in data)
     {
         ListItem lI = targetList.AddItem(datum, prefab);
         lI.OnDraggableDropped += OnDraggableDropped;
         lI.IsShortcut          = false;
     }
 }
Exemplo n.º 12
0
        public static void Calc_DropItem(Account User, NormalRoom room, byte rank, byte last)
        {
            if (User.Attribute != 3)
            {
                int PlayerCount = room.Players.FindAll(p => p.Attribute != 3).Count;
                int TR          = 0;
                int EXP         = 0;
                //rank = rank > 10 ? (byte)10 : rank;

                TR  = Calc_TR(User, room, rank > 10 ? (byte)10 : rank, out short BounsTR);
                EXP = Calc_EXP(User, room, rank > 10 ? (byte)10 : rank, out short BounsEXP);

                /*Console.WriteLine("BounsTR: {0}", BounsTR);
                 * Console.WriteLine("BounsEXP: {0}", BounsEXP);*/
                /*if (User.GameEndType == 1)
                 * {
                 *  TR = Calc_TR(User, room, rank, out short initTR);
                 *  EXP = Calc_EXP(User, room, rank, out short initEXP);
                 * }
                 * else
                 * {
                 *  TR = 1 * PlayerCount;
                 *  EXP = 1 * PlayerCount;
                 * }*/

                addEXP(User.UserNum, EXP);
                addTR(User.UserNum, TR);
                User.Exp += EXP;
                User.TR  += TR;
                Random rand     = new Random();
                var    takecard = MapCardHolder.MapCardInfos.Any(c => c.Value.MapNum == room.PlayingMapNum) ? MapCardHolder.MapCardInfos.Where(c => c.Value.MapNum == room.PlayingMapNum).Select(c => c.Value.CardNum).OrderBy(x => rand.Next()).Take(1).ToList() : new List <int> {
                    0
                };
                //Console.WriteLine(takecard[0]);
                foreach (var card in takecard)
                {
                    if (card != 0)
                    {
                        giveCard(User.UserNum, card);
                    }
                    //Console.WriteLine("giveCard");
                }
                DropList dropList = new DropList
                {
                    UserNum  = User.UserNum,
                    BounsTR  = BounsTR,
                    BounsEXP = BounsEXP,
                    TR       = TR,
                    EXP      = EXP,
                    Rank     = rank,
                    CardID   = takecard
                };
                Log.Info("Drop Item - Nickname: {0}, TR: {1}, EXP: {2}, Rank: {3}", User.NickName, TR, EXP, rank);
                room.DropItem.Add(dropList);
            }
        }
Exemplo n.º 13
0
 public static void SpawnLoot(Vector3 position, DropList dropList)
 {
     foreach (Drop drop in dropList.drops)
     {
         if (Utilities.Chance(drop.chance, false))
         {
             SpawnLootDrop(position, drop.spawnInfo);
         }
     }
 }
Exemplo n.º 14
0
        //-----------------------------------------------------------------------------
        // Drop Lists Loading
        //-----------------------------------------------------------------------------

        public static void LoadDrops(DropManager dropManager, RewardManager rewardManager)
        {
            DropList dropsRupees = dropManager.CreateDropList("rupees");

            dropsRupees.AddDrop(3, rewardManager.GetReward("rupees_1"));
            dropsRupees.AddDrop(1, rewardManager.GetReward("rupees_5"));

            DropList dropsHearts = dropManager.CreateDropList("hearts");

            dropsHearts.AddDrop(4, rewardManager.GetReward("hearts_1"));
            dropsHearts.AddDrop(1, typeof(CollectibleFairy));

            DropList dropsSeeds = dropManager.CreateDropList("seeds");

            dropsSeeds.AddDrop(1, rewardManager.GetReward("ammo_ember_seeds_5"));
            dropsSeeds.AddDrop(1, rewardManager.GetReward("ammo_scent_seeds_5"));
            dropsSeeds.AddDrop(1, rewardManager.GetReward("ammo_pegasus_seeds_5"));
            dropsSeeds.AddDrop(1, rewardManager.GetReward("ammo_gale_seeds_5"));
            dropsSeeds.AddDrop(1, rewardManager.GetReward("ammo_mystery_seeds_5"));

            DropList dropsAmmo = dropManager.CreateDropList("ammo");

            dropsAmmo.AddDrop(1, rewardManager.GetReward("ammo_bombs_5"));
            dropsAmmo.AddDrop(1, rewardManager.GetReward("ammo_arrows_5"));
            dropsAmmo.AddDrop(5, dropsSeeds);


            // Drops that are created by default for tiles.
            DropList dropsDefault = dropManager.CreateDropList("default", 1, 3);

            dropsDefault.AddDrop(50, dropsAmmo);
            dropsDefault.AddDrop(46, dropsRupees);
            dropsDefault.AddDrop(25, dropsHearts);

            // Drops that are created when a ground tile is dug up.
            DropList dropsDigRupees = new DropList();

            dropsDigRupees.AddDrop(25, dropsRupees);
            dropsDigRupees.AddDrop(1, rewardManager.GetReward("rupees_100"));
            DropList dropsDigMonsters = new DropList();

            dropsDigMonsters.AddDrop(5, typeof(MonsterBeetle));
            dropsDigMonsters.AddDrop(2, typeof(MonsterRope));
            DropList dropsDig = dropManager.CreateDropList("dig", 1, 4);

            dropsDig.AddDrop(46, dropsDigRupees);
            dropsDig.AddDrop(25, dropsHearts);
            dropsDig.AddDrop(7, dropsDigMonsters);

            //DropList dropsDig = dropManager.CreateDropList("dig", 1, 1);
            //dropsDig.AddDrop(1, typeof(MonsterRope));
            //dropsDig.AddDrop(1, typeof(MonsterBeetle));
            //dropsDig.AddDrop(1, typeof(MonsterLynel));
        }
Exemplo n.º 15
0
 public override void Dispose()
 {
     _dataSource?.Dispose();
     ThrottleMessageLiteral?.Dispose();
     DropList?.Dispose();
     TextField?.Dispose();
     SpanLiteral?.Dispose();
     SpanClosingLiteral?.Dispose();
     BrClosingLiteral?.Dispose();
     DropImage?.Dispose();
     base.Dispose();
 }
Exemplo n.º 16
0
        public static void GameMode_LapTimeCountdwon(ClientConnection Client, PacketReader reader, byte last)
        {
            //FF C0 02 FF 15 03 06 00 00 01 01
            //FF C0 02 FF 15 03 06 00 01 01 20
            //FF C0 02 FF 15 03 06 00 02 01 20
            Account    User = Client.CurrentAccount;
            NormalRoom room = Rooms.GetRoom(User.CurrentRoomId);
            //Console.WriteLine("LapTimeCountdwon: {0}", Utility.ByteArrayToString(reader.Buffer));
            short second = reader.ReadLEInt16();
            byte  round  = reader.ReadByte(); //round?

            room.BroadcastToAll(new GameRoom_LapTimeCountdwon(second, round, last));
            if (room.GameMode == 38) //小遊戲
            {
                Task.Run(() => Task.Delay(second * 1000))
                .ContinueWith((t) =>
                {
                    room.Players.ForEach((RoomPlayer) => {
                        RoomPlayer.Connection.SendAsync(new GameRoom_LapTimeCountdwon2(second, round, last));
                        RoomPlayer.GameEndType = 0;
                    });
                    room.Round = round;
                    if (room.Round == 0)     //init pointlist
                    {
                        foreach (Account Player in room.Players)
                        {
                            DropList dropList = new DropList
                            {
                                UserNum       = Player.UserNum,
                                RaceDistance  = Player.RaceDistance,
                                ServerLapTime = Player.ServerLapTime,
                                LapTime       = Player.LapTime,
                                Pos           = Player.RoomPos,
                                Team          = Player.Team,
                                BounsTR       = 0,
                                BounsEXP      = 0,
                                TR            = 0,
                                EXP           = 0,
                                Rank          = 0,
                                CardID        = new List <int> {
                                    0
                                },
                                MiniGamePoint     = 0,
                                MiniGameStarPoint = 0
                            };
                            room.DropItem.Add(dropList);
                        }
                    }
                });
            }
        }
Exemplo n.º 17
0
        public static void GameMode_LapTimeCountdwon(ClientConnection Client, PacketReader reader, byte last)
        {
            //FF C0 02 FF 15 03 06 00 00 01 01
            //FF C0 02 FF 15 03 06 00 01 01 20
            //FF C0 02 FF 15 03 06 00 02 01 20
            Account    User = Client.CurrentAccount;
            NormalRoom room = Rooms.NormalRoomList.Find(rm => rm.ID == User.CurrentRoomId);
            //Console.WriteLine("LapTimeCountdwon: {0}", Utility.ByteArrayToString(reader.Buffer));
            short second = reader.ReadLEInt16();
            byte  round  = reader.ReadByte(); //round?

            foreach (Account RoomPlayer in room.Players)
            {
                RoomPlayer.Connection.SendAsync(new GameRoom_LapTimeCountdwon(RoomPlayer, second, round, last));
            }
            if (room.GameMode == 38) //小遊戲
            {
                Task.Run(() => Task.Delay(second * 1000))
                .ContinueWith((t) =>
                {
                    foreach (Account RoomPlayer in room.Players)
                    {
                        RoomPlayer.Connection.SendAsync(new GameRoom_LapTimeCountdwon2(RoomPlayer, second, round, last));
                    }
                    room.Round = round;
                    if (room.Round == 0)     //init pointlist
                    {
                        foreach (Account Player in room.Players)
                        {
                            DropList dropList = new DropList
                            {
                                UserNum  = Player.UserNum,
                                BounsTR  = 0,
                                BounsEXP = 0,
                                TR       = 0,
                                EXP      = 0,
                                Rank     = 0,
                                CardID   = new List <int> {
                                    0
                                },
                                MiniGamePoint     = 0,
                                MiniGameStarPoint = 0
                            };
                            room.DropItem.Add(dropList);
                        }
                    }
                });
            }
        }
Exemplo n.º 18
0
        public ActionResult Create()
        {
            string mail    = HttpContext.User.Identity.Name;
            int    buyerId = unit.GetBuyer(mail).Id;

            ViewBag.BuyerId = buyerId;
            List <AppCarBrand> brands = unit.GetAllBrands().Select(x => x.FromDomainBrandsToAppCarBrand()).ToList();

            brands.Add(new AppCarBrand {
                Id = 0, BrandName = "Свой бренд"
            });
            DropList ViewBrands = new DropList {
                brands = new SelectList(brands, "Id", "BrandName")
            };

            return(View(ViewBrands));
        }
            //-------------------------
            //-------------------------


            void BuildDropTable(On.RoR2.Run.orig_BuildDropTable orig, Run run)
            {
                System.Type type = typeof(R2API.ItemDropAPI);
                System.Reflection.MethodInfo runOnBuildDropTable = type.GetMethod("RunOnBuildDropTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
                runOnBuildDropTable.Invoke(null, new object[2] {
                    orig, run
                });
                SetDefaultDropLists(run);
                orig(run);
                setDropLists();
                monsterDropList.GenerateItems(run);
                playerDropList.ClearAllLists(run);
                playerDropList.GenerateItems(run);
                playerDropList.SetItems(run);
                DropList.AddChestChoices(run);
                playerInteractables.CalculateInvalidInteractables(playerItems);
                monsterInteractables.CalculateInvalidInteractables(monsterItems);
            }
            void DropRewards(On.RoR2.BossGroup.orig_DropRewards orig, BossGroup bossGroup)
            {
                System.Reflection.FieldInfo info     = typeof(BossGroup).GetField("bossDrops", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                ICollection        collection        = info.GetValue(bossGroup) as ICollection;
                List <PickupIndex> bossDrops         = new List <PickupIndex>();
                List <PickupIndex> bossDropsAdjusted = new List <PickupIndex>();

                foreach (object bossDrop in collection)
                {
                    PickupIndex pickupIndex = (PickupIndex)bossDrop;
                    bossDrops.Add(pickupIndex);
                    if (PickupCatalog.GetPickupDef(pickupIndex).itemIndex != ItemIndex.None && playerItems.Contains(pickupIndex))
                    {
                        bossDropsAdjusted.Add(pickupIndex);
                    }
                }
                int normalCount = Run.instance.availableTier2DropList.Count;

                if (bossGroup.forceTier3Reward)
                {
                    normalCount = Run.instance.availableTier3DropList.Count;
                }
                if (normalCount != 0 || bossDropsAdjusted.Count != 0)
                {
                    float bossDropChanceOld = bossGroup.bossDropChance;
                    if (normalCount == 0)
                    {
                        DropList.SetDropLists(new List <PickupIndex>(), new List <PickupIndex>(), new List <PickupIndex>(), new List <PickupIndex>());
                        bossGroup.bossDropChance = 1;
                    }
                    else if (bossDropsAdjusted.Count == 0)
                    {
                        bossGroup.bossDropChance = 0;
                    }
                    info.SetValue(bossGroup, bossDropsAdjusted);
                    orig(bossGroup);
                    info.SetValue(bossGroup, bossDrops);
                    bossGroup.bossDropChance = bossDropChanceOld;
                    if (normalCount == 0)
                    {
                        DropList.RevertDropLists();
                    }
                }
            }
Exemplo n.º 21
0
    //Playlist only allows songs to be added. Duplicates are allowed.
    void DroppedOnPlaylist(DropZone dropZone, Draggable draggable)
    {
        DropList dropList = dropZone as DropList;
        ListItem listItem = draggable as ListItem;

        if (listItem == null || listItem.originalParent == dropZone.transform)
        {
            return;
        }
        if (listItem.Data.DataType == ItemDataType.Music)
        {
            ListItem shortcut = dropList.AddItemAtIndex(
                listItem.Data,
                listItemPrefab,
                listItem.newSiblingIndex
                );
            shortcut.IsShortcut = true;
        }
        draggable.parentToReturnTo = draggable.originalParent;
        draggable.newSiblingIndex  = draggable.originalSiblingIndex;
    }
        public TextNDropTestDialog()
            : base("TextField and DropList Test", 200, 200, 320, 200)
        {
            girdLayout        = new GirdLayout(4, 1);
            girdLayout.Right  = 16;
            girdLayout.Left   = 16;
            girdLayout.Top    = 8;
            girdLayout.Bottom = 8;
            girdLayout.Spacer = 4;

            girdLayout.SetHorizontalAlignment(1, 0, EHAlignment.HLeft);
            girdLayout.SetHorizontalAlignment(2, 0, EHAlignment.HCenter);
            girdLayout.SetHorizontalAlignment(3, 0, EHAlignment.HRight);

            closeButton = new Button("Close");
            //textField=new TextField(160);
            dropList = new DropList();
            option1  = new DropListItem("Option one");
            option2  = new DropListItem("Option Two");
            option3  = new DropListItem("Option Three");
            dropList.Add(option1);
            dropList.Add(option2);
            dropList.Add(option3);

            textLabel   = new Label("Text input here:");
            optionLabel = new Label("Drop List test:");

            Layout = girdLayout;

            Add(textLabel);
            //Add(textField);
            Add(optionLabel);
            Add(dropList);
            Add(closeButton);

            Pack();

            closeButton.MouseReleasedEvent += new MouseReleasedHandler(closeButton_MouseReleasedEvent);
        }
Exemplo n.º 23
0
 public SharedChestComponentData(float duration, float updateDropListInterval, DropList dropList)
 {
     this.duration = duration;
     this.updateDropListInterval = updateDropListInterval;
     this.dropList = dropList;
 }
Exemplo n.º 24
0
 public SharedChestComponentData(XElement e)
 {
     duration = e.GetFloat("duration");
     updateDropListInterval = e.GetFloat("update_drop_list_interval");
     dropList = (DropList)Enum.Parse(typeof(DropList), e.GetString("drop_list"));
 }
            //-------------------------
            //-------------------------


            void GenerateAvailableItemsSet(On.RoR2.Artifacts.MonsterTeamGainsItemsArtifactManager.orig_GenerateAvailableItemsSet orig)
            {
                List <ItemTag> forbiddenTags = new List <ItemTag>();

                System.Type type = typeof(RoR2.Artifacts.MonsterTeamGainsItemsArtifactManager);
                System.Reflection.FieldInfo info = type.GetField("forbiddenTags", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
                ICollection collection           = info.GetValue(null) as ICollection;

                foreach (object itemTag in collection)
                {
                    forbiddenTags.Add((ItemTag)itemTag);
                }

                tierValidScav.Clear();
                tierValidMonsterTeam.Clear();
                List <PickupIndex> tier1Adjusted = monsterDropList.availableTier1DropList;

                tierValidMonsterTeam.Add(ItemTier.Tier1, ListContainsValidItems(forbiddenTags, tier1Adjusted));
                tierValidScav.Add(ItemTier.Tier1, ListContainsValidItems(new List <ItemTag>()
                {
                    ItemTag.AIBlacklist
                }, tier1Adjusted));
                if (!tierValidMonsterTeam[ItemTier.Tier1])
                {
                    tier1Adjusted = DropList.tier1DropListOriginal;
                }
                List <PickupIndex> tier2Adjusted = monsterDropList.availableTier2DropList;

                tierValidMonsterTeam.Add(ItemTier.Tier2, ListContainsValidItems(forbiddenTags, tier2Adjusted));
                tierValidScav.Add(ItemTier.Tier2, ListContainsValidItems(new List <ItemTag>()
                {
                    ItemTag.AIBlacklist
                }, tier2Adjusted));
                if (!tierValidMonsterTeam[ItemTier.Tier2])
                {
                    tier2Adjusted = DropList.tier2DropListOriginal;
                }
                List <PickupIndex> tier3Adjusted = monsterDropList.availableTier3DropList;

                tierValidMonsterTeam.Add(ItemTier.Tier3, ListContainsValidItems(forbiddenTags, tier3Adjusted));
                tierValidScav.Add(ItemTier.Tier3, ListContainsValidItems(new List <ItemTag>()
                {
                    ItemTag.AIBlacklist
                }, tier3Adjusted));
                if (!tierValidMonsterTeam[ItemTier.Tier3])
                {
                    tier3Adjusted = DropList.tier3DropListOriginal;
                }

                DropList.SetDropLists(tier1Adjusted, tier2Adjusted, tier3Adjusted, DropList.equipmentDropListOriginal);
                orig();
                DropList.RevertDropLists();


                info       = type.GetField("pattern", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
                collection = info.GetValue(null) as ICollection;
                List <ItemTier> patternAdjustedList = new List <ItemTier>();
                int             patternIndex        = 0;

                foreach (object itemTier in collection)
                {
                    patternAdjustedList.Add((ItemTier)itemTier);
                    patternIndex += 1;
                }
                if (!tierValidMonsterTeam[ItemTier.Tier1])
                {
                    while (patternAdjustedList.Contains(ItemTier.Tier1))
                    {
                        patternAdjustedList.Remove(ItemTier.Tier1);
                    }
                }
                if (!tierValidMonsterTeam[ItemTier.Tier2])
                {
                    while (patternAdjustedList.Contains(ItemTier.Tier2))
                    {
                        patternAdjustedList.Remove(ItemTier.Tier2);
                    }
                }
                if (!tierValidMonsterTeam[ItemTier.Tier3])
                {
                    while (patternAdjustedList.Contains(ItemTier.Tier3))
                    {
                        patternAdjustedList.Remove(ItemTier.Tier3);
                    }
                }
                patternAdjusted = new ItemTier[patternAdjustedList.Count];
                patternIndex    = 0;
                foreach (ItemTier itemTier in patternAdjustedList)
                {
                    patternAdjusted[patternIndex] = itemTier;
                    patternIndex += 1;
                }
            }
Exemplo n.º 26
0
        public void CalculateInvalidInteractables(DropList dropList)
        {
            /*
             *  These sections of code will determine if each of the subset lists are populated.
             */
            TiersPresent.Clear();
            foreach (DropType dropType in System.Enum.GetValues(typeof(DropType)))
            {
                TiersPresent.Add(dropType, false);
            }
            SubsetTiersPresent.Clear();
            foreach (var subsetChest in _subsetChests)
            {
                SubsetTiersPresent.Add(subsetChest, new Dictionary <DropType, bool>());
                foreach (DropType dropType in System.Enum.GetValues(typeof(DropType)))
                {
                    SubsetTiersPresent[subsetChest].Add(dropType, false);
                }
            }

            if (dropList.AvailableTier1DropList.Count > 0)
            {
                TiersPresent[DropType.tier1] = true;
            }
            if (dropList.AvailableTier2DropList.Count > 0)
            {
                TiersPresent[DropType.tier2] = true;
            }
            if (dropList.AvailableTier3DropList.Count > 0)
            {
                TiersPresent[DropType.tier3] = true;
            }
            if (dropList.AvailableBossDropList.Count > 0)
            {
                TiersPresent[DropType.boss] = true;
            }
            if (dropList.AvailableLunarDropList.Count > 0)
            {
                TiersPresent[DropType.lunar] = true;
            }
            if (dropList.AvailableNormalEquipmentDropList.Count > 0)
            {
                TiersPresent[DropType.equipment] = true;
            }
            if (dropList.AvailableLunarEquipmentDropList.Count > 0)
            {
                TiersPresent[DropType.lunar] = true;
            }
            foreach (var pickupIndex in dropList.AvailableSpecialItems)
            {
                var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                if (pickupDef != null)
                {
                    if (Catalog.Pearls.Contains(pickupDef.itemIndex))
                    {
                        TiersPresent[DropType.pearl] = true;
                        break;
                    }
                }
            }

            var everyItem = new List <PickupIndex>();

            AddItemsToList(everyItem, dropList.AvailableTier1DropList);
            AddItemsToList(everyItem, dropList.AvailableTier2DropList);
            AddItemsToList(everyItem, dropList.AvailableTier3DropList);
            foreach (var pickupIndex in everyItem)
            {
                var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                if (pickupDef != null)
                {
                    var itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
                    if (itemDef != null)
                    {
                        foreach (var itemTag in itemDef.tags)
                        {
                            var interactableName = "";
                            if (itemTag == ItemTag.Damage)
                            {
                                TiersPresent[DropType.damage] = true;
                                interactableName = "CategoryChestDamage";
                            }
                            else if (itemTag == ItemTag.Healing)
                            {
                                TiersPresent[DropType.healing] = true;
                                interactableName = "CategoryChestHealing";
                            }
                            else if (itemTag == ItemTag.Utility)
                            {
                                TiersPresent[DropType.utility] = true;
                                interactableName = "CategoryChestUtility";
                            }
                            if (_subsetChests.Contains(interactableName))
                            {
                                if (dropList.AvailableTier1DropList.Contains(pickupIndex))
                                {
                                    SubsetTiersPresent[interactableName][DropType.tier1] = true;
                                }
                                if (dropList.AvailableTier2DropList.Contains(pickupIndex))
                                {
                                    SubsetTiersPresent[interactableName][DropType.tier2] = true;
                                }
                                if (dropList.AvailableTier3DropList.Contains(pickupIndex))
                                {
                                    SubsetTiersPresent[interactableName][DropType.tier3] = true;
                                }
                            }
                        }
                    }
                }
            }


            /*
             *  Updates the interactable types with which subset lists are populated.
             */
            var interactableTypeKeys = InteractablesTiers.Keys.ToList();

            foreach (var interactableType in interactableTypeKeys)
            {
                var interactableTypeTierKeys = InteractablesTiers[interactableType].Keys.ToList();
                foreach (var tier in interactableTypeTierKeys)
                {
                    InteractablesTiers[interactableType][tier] = false;
                }
            }
            foreach (var tier in TiersPresent.Keys)
            {
                if (TiersPresent[tier])
                {
                    foreach (var interactableType in interactableTypeKeys)
                    {
                        if (InteractablesTiers[interactableType].ContainsKey(tier))
                        {
                            InteractablesTiers[interactableType][tier] = true;
                        }
                    }
                }
            }
            var scrapTierKeys = InteractablesTiers["Scrapper"].Keys.ToList();

            foreach (DropType tier in scrapTierKeys)
            {
                if (InteractablesTiers["Scrapper"][tier])
                {
                    if (Catalog.ScrapItems.ContainsKey(TierConversion[tier]))
                    {
                        if (!dropList.AvailableSpecialItems.Contains(PickupCatalog.FindPickupIndex(Catalog.ScrapItems[TierConversion[tier]])))
                        {
                            InteractablesTiers["Scrapper"][tier] = false;
                        }
                    }
                }
            }

            /*
             *  Determines which interactables should be prevented from spawning based on which subset lists are populated.
             */
            InvalidInteractables.Clear();
            foreach (var interactableType in InteractablesTiers.Keys)
            {
                var interactableValid = false;
                var allTrue           = true;
                foreach (var tier in InteractablesTiers[interactableType].Keys)
                {
                    if (InteractablesTiers[interactableType][tier])
                    {
                        interactableValid = true;
                    }
                    else
                    {
                        allTrue = false;
                    }
                }
                if (!interactableValid || AllTiersMustBePresent.Contains(interactableType) && !allTrue)
                {
                    InvalidInteractables.Add(interactableType);
                }
            }
        }
Exemplo n.º 27
0
        public void CalculateInvalidInteractables(DropList dropList)
        {
            TiersPresent.Clear();
            foreach (DropType dropType in System.Enum.GetValues(typeof(DropType)))
            {
                TiersPresent.Add(dropType, false);
            }

            SubsetTiersPresent.Clear();
            foreach (var subsetChest in _subsetChests)
            {
                SubsetTiersPresent.Add(subsetChest, new Dictionary <DropType, bool>());
                foreach (DropType dropType in System.Enum.GetValues(typeof(DropType)))
                {
                    SubsetTiersPresent[subsetChest].Add(dropType, false);
                }
            }

            if (DropList.IsValidList(dropList.AvailableTier1DropList))
            {
                foreach (var pickupIndex in dropList.AvailableTier1DropList)
                {
                    var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                    if (pickupDef != null)
                    {
                        TiersPresent[DropType.tier1] = true;
                        break;
                    }
                }
            }

            if (DropList.IsValidList(dropList.AvailableTier2DropList))
            {
                foreach (var pickupIndex in dropList.AvailableTier2DropList)
                {
                    var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                    if (pickupDef != null)
                    {
                        TiersPresent[DropType.tier2] = true;
                        break;
                    }
                }
            }

            if (DropList.IsValidList(dropList.AvailableTier3DropList))
            {
                foreach (var pickupIndex in dropList.AvailableTier3DropList)
                {
                    var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                    if (pickupDef != null)
                    {
                        TiersPresent[DropType.tier3] = true;
                        break;
                    }
                }
            }

            foreach (var pickupIndex in dropList.AvailableSpecialItems)
            {
                var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                if (pickupDef != null)
                {
                    if (pickupDef.itemIndex != ItemIndex.None &&
                        Catalog.Pearls.Contains(pickupDef.itemIndex))
                    {
                        TiersPresent[DropType.pearl] = true;
                        break;
                    }
                }
            }

            if (DropList.IsValidList(dropList.AvailableBossDropList))
            {
                foreach (var pickupIndex in dropList.AvailableBossDropList)
                {
                    var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                    if (pickupDef != null)
                    {
                        TiersPresent[DropType.boss] = true;
                        break;
                    }
                }
            }

            if (DropList.IsValidList(dropList.AvailableLunarDropList))
            {
                foreach (var pickupIndex in dropList.AvailableLunarDropList)
                {
                    var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                    if (pickupDef != null)
                    {
                        TiersPresent[DropType.lunar] = true;
                        break;
                    }
                }
            }

            var everyItem = new List <PickupIndex>();

            AddItemsToList(everyItem, dropList.AvailableTier1DropList);
            AddItemsToList(everyItem, dropList.AvailableTier2DropList);
            AddItemsToList(everyItem, dropList.AvailableTier3DropList);
            foreach (var pickupIndex in everyItem)
            {
                var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                if (pickupDef != null)
                {
                    var itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
                    if (itemDef != null)
                    {
                        foreach (var itemTag in itemDef.tags)
                        {
                            var interactableName = "";
                            if (itemTag == ItemTag.Damage)
                            {
                                TiersPresent[DropType.damage] = true;
                                interactableName = "CategoryChestDamage";
                            }
                            else if (itemTag == ItemTag.Healing)
                            {
                                TiersPresent[DropType.healing] = true;
                                interactableName = "CategoryChestHealing";
                            }
                            else if (itemTag == ItemTag.Utility)
                            {
                                TiersPresent[DropType.utility] = true;
                                interactableName = "CategoryChestUtility";
                            }
                            if (_subsetChests.Contains(interactableName))
                            {
                                if (dropList.AvailableTier1DropList.Contains(pickupIndex))
                                {
                                    SubsetTiersPresent[interactableName][DropType.tier1] = true;
                                }
                                if (dropList.AvailableTier2DropList.Contains(pickupIndex))
                                {
                                    SubsetTiersPresent[interactableName][DropType.tier2] = true;
                                }
                                if (dropList.AvailableTier3DropList.Contains(pickupIndex))
                                {
                                    SubsetTiersPresent[interactableName][DropType.tier3] = true;
                                }
                            }
                        }
                    }
                }
            }
            List <List <PickupIndex> > allDropLists = new List <List <PickupIndex> >()
            {
                dropList.AvailableTier1DropList,
                dropList.AvailableTier2DropList,
                dropList.AvailableTier3DropList,
                dropList.AvailableBossDropList,
                dropList.AvailableLunarDropList,
                dropList.AvailableSpecialItems,
                dropList.AvailableEquipmentDropList,
                dropList.AvailableNormalEquipmentDropList,
                dropList.AvailableLunarEquipmentDropList,
                dropList.AvailableSpecialEquipment,
            };

            foreach (List <PickupIndex> availableDropList in allDropLists)
            {
                foreach (PickupIndex pickupIndex in availableDropList)
                {
                    PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                    if (pickupDef != null)
                    {
                        ItemIndex itemIndex = pickupDef.itemIndex;
                        if (itemIndex != ItemIndex.None)
                        {
                            if (!ItemCatalog.GetItemDef(itemIndex).ContainsTag(ItemTag.Scrap))
                            {
                                ItemTier itemTier = ItemCatalog.GetItemDef(itemIndex).tier;
                                if (itemTier == ItemTier.Tier1)
                                {
                                    TiersPresent[DropType.tier1Tier] = true;
                                }
                                else if (itemTier == ItemTier.Tier2)
                                {
                                    TiersPresent[DropType.tier2Tier] = true;
                                }
                                else if (itemTier == ItemTier.Tier3)
                                {
                                    TiersPresent[DropType.tier3Tier] = true;
                                }
                                else if (itemTier == ItemTier.Boss)
                                {
                                    TiersPresent[DropType.bossTier] = true;
                                }
                                else if (itemTier == ItemTier.Lunar)
                                {
                                    TiersPresent[DropType.lunarTier] = true;
                                }
                            }
                        }
                        EquipmentIndex equipmentIndex = pickupDef.equipmentIndex;
                        if (equipmentIndex != EquipmentIndex.None)
                        {
                            TiersPresent[DropType.equipmentTier] = true;
                        }
                    }
                }
            }

            if (DropList.IsValidList(dropList.AvailableNormalEquipmentDropList))
            {
                TiersPresent[DropType.equipment] = true;
            }
            if (DropList.IsValidList(dropList.AvailableLunarEquipmentDropList))
            {
                TiersPresent[DropType.lunar] = true;
            }
            var interactableTypeKeys = InteractablesTiers.Keys.ToList();

            foreach (var interactableType in interactableTypeKeys)
            {
                var interactableTypeTierKeys = InteractablesTiers[interactableType].Keys.ToList();
                foreach (var tier in interactableTypeTierKeys)
                {
                    InteractablesTiers[interactableType][tier] = false;
                }
            }
            foreach (var tier in TiersPresent.Keys)
            {
                if (TiersPresent[tier])
                {
                    foreach (var interactableType in interactableTypeKeys)
                    {
                        if (InteractablesTiers[interactableType].ContainsKey(tier))
                        {
                            InteractablesTiers[interactableType][tier] = true;
                        }
                    }
                }
            }
            var scrapTierKeys = InteractablesTiers["Scrapper"].Keys.ToList();

            foreach (DropType tier in scrapTierKeys)
            {
                if (InteractablesTiers["Scrapper"][tier])
                {
                    if (Catalog.ScrapItems.ContainsKey(TierConversion[tier]))
                    {
                        if (!dropList.AvailableSpecialItems.Contains(PickupCatalog.FindPickupIndex(Catalog.ScrapItems[TierConversion[tier]])))
                        {
                            InteractablesTiers["Scrapper"][tier] = false;
                        }
                    }
                }
            }

            InvalidInteractables.Clear();
            foreach (var interactableType in InteractablesTiers.Keys)
            {
                var interactableValid = false;
                var allTrue           = true;
                foreach (var tier in InteractablesTiers[interactableType].Keys)
                {
                    if (InteractablesTiers[interactableType][tier])
                    {
                        interactableValid = true;
                    }
                    else
                    {
                        allTrue = false;
                    }
                }
                if (!interactableValid || AllTiersMustBePresent.Contains(interactableType) && !allTrue)
                {
                    InvalidInteractables.Add(interactableType);
                }
            }
        }
Exemplo n.º 28
0
        private void OldButtonStart()
        {
            string sSpawnListFile;
            string sTemp;

            string[] aTemp;

            System.IO.StreamReader inSpawnFile;


            // LOADING npc_pch.txt
            if (System.IO.File.Exists("npc_pch.txt") == false)
            {
                MessageBox.Show("npc_pch.txt not found", "Need npc_pch.txt", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            var aNpcPch = new string[40001];

            inSpawnFile = new System.IO.StreamReader("npc_pch.txt", System.Text.Encoding.Default, true, 1);
            ToolStripProgressBar.Maximum = Conversions.ToInteger(inSpawnFile.BaseStream.Length);
            ToolStripStatusLabel.Text    = "Loading npc_pch.txt ...";

            while (inSpawnFile.EndOfStream != true)
            {
                sTemp = inSpawnFile.ReadLine().Trim();
                ToolStripProgressBar.Value = Conversions.ToInteger(inSpawnFile.BaseStream.Position);
                if (!string.IsNullOrEmpty(sTemp) & sTemp.StartsWith("//") == false)
                {
                    // [pet_wolf_a] = 1012077
                    sTemp = sTemp.Replace(" ", "").Replace(Conversions.ToString((char)9), "");
                    aTemp = sTemp.Split(Conversions.ToChar("="));
                    try
                    {
                        aNpcPch[Conversions.ToInteger(aTemp[1]) - 1000000] = aTemp[0];
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error in loading npc_pch.txt. Last reading line:" + Constants.vbNewLine + sTemp);
                        inSpawnFile.Close();
                        return;
                    }
                }
            }
            inSpawnFile.Close();
            ToolStripProgressBar.Value = 0;

            // LOADING item_pch.txt
            if (System.IO.File.Exists("item_pch.txt") == false)
            {
                MessageBox.Show("item_pch.txt not found", "Need item_pch.txt", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            var aItemPch = new string[25001];

            inSpawnFile = new System.IO.StreamReader("item_pch.txt", System.Text.Encoding.Default, true, 1);
            ToolStripProgressBar.Maximum = Conversions.ToInteger(inSpawnFile.BaseStream.Length);
            ToolStripStatusLabel.Text    = "Loading item_pch.txt ...";

            while (inSpawnFile.EndOfStream != true)
            {
                sTemp = inSpawnFile.ReadLine().Trim();
                ToolStripProgressBar.Value = Conversions.ToInteger(inSpawnFile.BaseStream.Position);
                if (!string.IsNullOrEmpty(sTemp) & sTemp.StartsWith("//") == false)
                {
                    // [small_sword] = 1
                    sTemp = sTemp.Replace(" ", "").Replace(Conversions.ToString((char)9), "");
                    aTemp = sTemp.Split(Conversions.ToChar("="));
                    try
                    {
                        aItemPch[Conversions.ToInteger(aTemp[1])] = aTemp[0];
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error in loading item_pch.txt. Last reading line:" + Constants.vbNewLine + sTemp);
                        inSpawnFile.Close();
                        return;
                    }
                }
            }
            inSpawnFile.Close();
            ToolStripProgressBar.Value = 0;

            OpenFileDialog.Filter = "L2J NpcData Drop (droplist.sql)|droplist.sql|All files|*.*";
            if (OpenFileDialog.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }
            sSpawnListFile = OpenFileDialog.FileName;
            inSpawnFile    = new System.IO.StreamReader(sSpawnListFile, System.Text.Encoding.Default, true, 1);
            var outFile = new System.IO.StreamWriter("npcdata_drop_l2j.txt", false, System.Text.Encoding.Unicode, 1);

            ToolStripProgressBar.Maximum = Conversions.ToInteger(inSpawnFile.BaseStream.Length);
            ToolStripStatusLabel.Text    = "Loading droplist.sql...";

            int    iNpcCount    = 0;
            string sCurNpcName  = "";
            string sPrevNpcName = null;
            string sTempNpcName;
            string sTempItemName;
            // Dim sTempDropSpoil As String, sTempDropItems As String
            bool bItemCategory = false;

            var aItemList     = new DropList[1];
            var aItemCategory = new string[256];
            var aItemMiss     = new int[1];
            var aNpcMiss      = new int[1];

            while (inSpawnFile.EndOfStream != true)
            {
                sTemp = inSpawnFile.ReadLine().Trim();
                ToolStripProgressBar.Value = Conversions.ToInteger(inSpawnFile.BaseStream.Position);
                if (!string.IsNullOrEmpty(sTemp) & sTemp.StartsWith("(") == true)
                {
                    // ---------- Prepare for importing
                    // `mobId` INT NOT NULL DEFAULT '0',
                    // `itemId` INT NOT NULL DEFAULT '0',
                    // `min` INT NOT NULL DEFAULT '0',
                    // `max` INT NOT NULL DEFAULT '0',
                    // `category` INT NOT NULL DEFAULT '0',
                    // `chance` INT NOT NULL DEFAULT '0',

                    // (18001,1806,1,1,-1,10868),-- Recipe: Soulshot: B-Grade
                    // (18001,57,765,1528,0,700000),-- Adena
                    // (18001,4069,1,1,1,2102),-- Tunic of Zubei Fabric
                    // (18001,4070,1,1,1,3192),-- Stockings of Zubei Fabric
                    // (18001,4071,1,1,1,1615),-- Avadon Robe Fabric
                    // (18001,1419,1,1,2,200000),-- Blood Mark
                    // (18001,1864,1,1,2,166667),-- Stem

                    sTemp = sTemp.Substring(Strings.InStr(sTemp, "("), Strings.InStr(sTemp, ")") - Strings.InStr(sTemp, "(") - 1);
                    sTemp = sTemp.Replace("'", "");
                    aTemp = sTemp.Split(Conversions.ToChar(","));

                    // 0     1    2 3 4 5
                    // (18001,4069,1,1,1,2102),-- Tunic of Zubei Fabric

                    sCurNpcName = aTemp[0];
                    if (Conversions.ToInteger(aTemp[1]) > 25000)
                    {
                        MessageBox.Show("Wrong item_id [" + aTemp[0] + "] in line" + Constants.vbNewLine + sTemp);
                        inSpawnFile.Close();
                        outFile.Close();
                        ToolStripProgressBar.Value = 0;
                        return;
                    }

                    if (sPrevNpcName == null)
                    {
                        sPrevNpcName = sCurNpcName;
                    }
                    if ((sCurNpcName ?? "") != (sPrevNpcName ?? ""))
                    {
                        // Checking exising npc in NpcPch
                        if (aNpcPch[Conversions.ToInteger(sPrevNpcName)] == null)
                        {
                            if (Array.IndexOf(aNpcMiss, sPrevNpcName) == -1)
                            {
                                aNpcMiss[aNpcMiss.Length - 1] = Conversions.ToInteger(sPrevNpcName);
                                Array.Resize(ref aNpcMiss, aNpcMiss.Length + 1);
                            }

                            sTempNpcName = "[_need_" + sPrevNpcName + "_]";
                        }
                        else
                        {
                            sTempNpcName = aNpcPch[Conversions.ToInteger(sPrevNpcName)];
                        }

                        // Start writing npc
                        // npc_begin	warrior	20761	[pytan]
                        outFile.Write("npc_begin" + Conversions.ToString((char)9) + "warrior" + Conversions.ToString((char)9) + sPrevNpcName + Conversions.ToString((char)9) + sTempNpcName + Conversions.ToString((char)9));

                        for (int iTemp = 0, loopTo = iNpcCount - 1; iTemp <= loopTo; iTemp++)
                        {
                            // sTempItemName
                            // Checking exising Items in ItemPch
                            if (aItemPch[aItemList[iTemp].itemId] == null)
                            {
                                if (Array.IndexOf(aItemMiss, aItemList[iTemp].itemId) == -1)
                                {
                                    aItemMiss[aItemMiss.Length - 1] = aItemList[iNpcCount].itemId;
                                    Array.Resize(ref aItemMiss, aItemMiss.Length + 1);
                                }
                                sTempItemName = "[_need_" + Conversions.ToString(Conversions.ToInteger(aItemList[iTemp].itemId)) + "_]";
                            }
                            else
                            {
                                sTempItemName = aItemPch[aItemList[iTemp].itemId];
                            }

                            // corpse_make_list={
                            // {[rp_soulshot_a];1;1;0.9041};{[oriharukon_ore];1;1;45.2069};{[stone_of_purity];1;1;45.2069}  }

                            if (aItemList[iTemp].category == -1)
                            {
                                if (aItemCategory[255] != null)
                                {
                                    aItemCategory[255] = aItemCategory[255] + ";";
                                }
                                aItemCategory[255] = aItemCategory[255] + "{" + sTempItemName + ";" + Conversions.ToString(aItemList[iTemp].min) + ";" + Conversions.ToString(aItemList[iTemp].max) + ";" + Conversions.ToString(aItemList[iTemp].chance) + "}";
                            }
                            else
                            {
                                if (aItemCategory[aItemList[iTemp].category] != null)
                                {
                                    aItemCategory[aItemList[iTemp].category] = aItemCategory[aItemList[iTemp].category] + ";";
                                }
                                aItemCategory[aItemList[iTemp].category] = aItemCategory[aItemList[iTemp].category] + "{" + sTempItemName + ";" + Conversions.ToString(aItemList[iTemp].min) + ";" + Conversions.ToString(aItemList[iTemp].max) + ";" + Conversions.ToString(aItemList[iTemp].chance) + "}";
                            }
                        }

                        outFile.Write("corpse_make_list={" + aItemCategory[255] + "}");
                        outFile.Write(Conversions.ToString((char)9) + "additional_make_multi_list={");
                        for (iNpcCount = 0; iNpcCount <= 254; iNpcCount++)
                        {
                            if (aItemCategory[iNpcCount] != null)
                            {
                                if (bItemCategory == true)
                                {
                                    outFile.Write(";");
                                }
                                outFile.Write("{{" + aItemCategory[iNpcCount] + "};100}");
                                bItemCategory = true;
                            }
                        }
                        bItemCategory = false;
                        outFile.Write("}" + Conversions.ToString((char)9));
                        outFile.WriteLine("npc_end");

                        iNpcCount = 0;
                        Array.Clear(aItemList, 0, aItemList.Length);
                        Array.Resize(ref aItemList, 1);

                        Array.Clear(aItemCategory, 0, aItemCategory.Length);

                        // sCurNpcName = sPrevNpcName
                        // sTempDropSpoil = ""
                        // sTempDropItems = ""
                        sPrevNpcName = sCurNpcName;
                    }

                    // ADD new Drop Items to Array
                    Array.Resize(ref aItemList, iNpcCount + 1);

                    // 0     1    2 3 4 5
                    // (18001,4069,1,1,1,2102),-- Tunic of Zubei Fabric

                    aItemList[iNpcCount].itemId   = Conversions.ToInteger(aTemp[1]);
                    aItemList[iNpcCount].min      = Conversions.ToInteger(aTemp[2]);
                    aItemList[iNpcCount].max      = Conversions.ToInteger(aTemp[3]);
                    aItemList[iNpcCount].category = Conversions.ToInteger(aTemp[4]);
                    aItemList[iNpcCount].chance   = Conversions.ToInteger(Conversions.ToDouble(aTemp[5]) / 10000);

                    iNpcCount = iNpcCount + 1;
                }
            }
            ToolStripProgressBar.Value = 0;
            inSpawnFile.Close();
            outFile.Close();

            if (aNpcMiss.Length > 0)
            {
                outFile = new System.IO.StreamWriter("npcdata_drop_l2j.log", false, System.Text.Encoding.Unicode, 1);
                outFile.WriteLine("Missed Npc. Required for NpcData drop:");
                var loopTo1 = aNpcMiss.Length - 2;
                for (iNpcCount = 0; iNpcCount <= loopTo1; iNpcCount++)
                {
                    outFile.WriteLine("npc_id=" + Conversions.ToString(aNpcMiss[iNpcCount]));
                }
                outFile.Close();
            }
            if (aItemMiss.Length > 0)
            {
                outFile = new System.IO.StreamWriter("npcdata_drop_l2j.log", true, System.Text.Encoding.Unicode, 1);
                outFile.WriteLine("Missed Items. Required for NpcData drop:");
                var loopTo2 = aItemMiss.Length - 2;
                for (iNpcCount = 0; iNpcCount <= loopTo2; iNpcCount++)
                {
                    outFile.WriteLine("item_id=" + Conversions.ToString(aItemMiss[iNpcCount]));
                }
                outFile.Close();
            }


            MessageBox.Show("Completed. With [" + Conversions.ToString(aItemMiss.Length - 1) + "] missed item's [" + Conversions.ToString(aNpcMiss.Length - 1) + "] missed npc's.");
        }
        /*********
        ** Private methods
        *********/
        /// <summary>Initialise the edit-chest overlay for rendering.</summary>
        private void ReinitialiseComponents()
        {
            Rectangle bounds = new Rectangle(this.Menu.xPositionOnScreen, this.Menu.yPositionOnScreen, this.Menu.width, this.Menu.height);

            // group dropdown
            if (this.ShowGroupTab)
            {
                // tab
                Vector2 tabSize = Tab.GetTabSize(this.Font, this.SelectedGroup);
                this.GroupTab = new Tab(this.SelectedGroup, bounds.Right - (int)tabSize.X - Game1.tileSize, bounds.Y - Game1.pixelZoom * 25, true, this.Font);

                // dropdown
                this.GroupSelector = new DropList <string>(this.SelectedGroup, this.Groups, group => group, this.GroupTab.bounds.Right, this.GroupTab.bounds.Bottom, false, this.Font);
            }

            // chest dropdown
            {
                // tab
                this.ChestTab = new Tab(this.Chest.Name, bounds.X, bounds.Y - Game1.pixelZoom * 25, true, this.Font);

                // dropdown
                ManagedChest[] chests = this.Chests.Where(chest => !this.ShowGroupTab || chest.GetGroup() == this.SelectedGroup).ToArray();
                this.ChestSelector = new DropList <ManagedChest>(this.Chest, chests, chest => chest.Name, this.ChestTab.bounds.X, this.ChestTab.bounds.Bottom, true, this.Font);
            }

            // edit chest button overlay (based on chest dropdown position)
            {
                Rectangle sprite       = Sprites.Icons.SpeechBubble;
                float     zoom         = Game1.pixelZoom / 2f;
                Rectangle buttonBounds = new Rectangle(this.ChestTab.bounds.X + this.ChestTab.bounds.Width, this.ChestTab.bounds.Y, (int)(sprite.Width * zoom), (int)(sprite.Height * zoom));
                this.EditButton = new ClickableTextureComponent("edit-chest", buttonBounds, null, "edit chest", Sprites.Icons.Sheet, sprite, zoom);
            }

            // sort inventory button overlay (based on OK button position)
            {
                Rectangle sprite = Sprites.Buttons.Organize;
                ClickableTextureComponent okButton = this.Menu.okButton;
                float     zoom         = Game1.pixelZoom;
                Rectangle buttonBounds = new Rectangle(okButton.bounds.X, (int)(okButton.bounds.Y - sprite.Height * zoom - 5 * zoom), (int)(sprite.Width * zoom), (int)(sprite.Height * zoom));
                this.SortInventoryButton = new ClickableTextureComponent("sort-inventory", buttonBounds, null, "sort inventory", Sprites.Icons.Sheet, sprite, zoom);
            }

            // edit form
            int longTextWidth = (int)Game1.smallFont.MeasureString("A sufficiently, reasonably long string").X;

            this.EditNameField = new ValidatedTextBox(Game1.smallFont, Color.Black, ch => ch != '|')
            {
                Width = longTextWidth, Text = this.Chest.Name
            };
            this.EditCategoryField = new ValidatedTextBox(Game1.smallFont, Color.Black, ch => ch != '|')
            {
                Width = longTextWidth, Text = this.Chest.Category
            };
            this.EditOrderField = new ValidatedTextBox(Game1.smallFont, Color.Black, char.IsDigit)
            {
                Width = (int)Game1.smallFont.MeasureString("9999999").X, Text = this.Chest.Order?.ToString()
            };
            this.EditHideChestField = new Checkbox(this.Chest.IsIgnored);
            this.EditSaveButton     = new ClickableTextureComponent("save-chest", new Rectangle(0, 0, Game1.tileSize, Game1.tileSize), null, "OK", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, IClickableMenu.borderWithDownArrowIndex), 1f);
            this.EditExitButton     = new ClickableTextureComponent(new Rectangle(bounds.Right - 9 * Game1.pixelZoom, bounds.Y - Game1.pixelZoom * 2, Sprites.Icons.ExitButton.Width * Game1.pixelZoom, Sprites.Icons.ExitButton.Height * Game1.pixelZoom), Sprites.Icons.Sheet, Sprites.Icons.ExitButton, Game1.pixelZoom);

            // adjust menu to fit
            this.Menu.trashCan.bounds.Y = this.SortInventoryButton.bounds.Y - this.Menu.trashCan.bounds.Height - 2 * Game1.pixelZoom;
        }
 void AddShrineStack(On.RoR2.ShrineChanceBehavior.orig_AddShrineStack orig, ShrineChanceBehavior shrineChangeBehavior, Interactor interactor)
 {
     DropList.SetDropLists(RoR2.Run.instance.availableTier1DropList, RoR2.Run.instance.availableTier2DropList, RoR2.Run.instance.availableTier3DropList, RoR2.Run.instance.availableEquipmentDropList);
     orig(shrineChangeBehavior, interactor);
     DropList.RevertDropLists();
 }