} // 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); }
public void Init(SharedChestComponentData data) { duration = data.duration; updateDropListInterval = data.updateDropListInterval; dropList = data.dropList; UpdateDropList(); }
//----------------------------------------------------------------------------- // 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(); } }
// 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; }
protected override void Start() { base.Start(); LootSpawner = GetComponentInChildren <DropList>(); Spawners = GetComponentsInChildren <MobSpawner>(); BossSpawner = GetComponentInChildren <BossSpawner>(); BossSpawner.transform.GetComponent <SpriteRenderer>().sortingLayerName = SortingLayer.Ground; }
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); } }
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]; } }
//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; } }
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); } }
public static void SpawnLoot(Vector3 position, DropList dropList) { foreach (Drop drop in dropList.drops) { if (Utilities.Chance(drop.chance, false)) { SpawnLootDrop(position, drop.spawnInfo); } } }
//----------------------------------------------------------------------------- // 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)); }
public override void Dispose() { _dataSource?.Dispose(); ThrottleMessageLiteral?.Dispose(); DropList?.Dispose(); TextField?.Dispose(); SpanLiteral?.Dispose(); SpanClosingLiteral?.Dispose(); BrClosingLiteral?.Dispose(); DropImage?.Dispose(); base.Dispose(); }
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); } } }); } }
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); } } }); } }
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(); } } }
//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); }
public SharedChestComponentData(float duration, float updateDropListInterval, DropList dropList) { this.duration = duration; this.updateDropListInterval = updateDropListInterval; this.dropList = dropList; }
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; } }
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); } } }
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); } } }
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(); }