private void onUpdateLabel(DefaultLabelController labelController, EncounterTrackable encounter, PickupObject item) { NoBrainJsonItem noBrainJsonItem; var success = NoBrain.jsonItemDict.TryGetValue(item.PickupObjectId, out noBrainJsonItem); if (!success) { return; } // Text change var newText = labelController.label.Text; var indexOf = newText.IndexOf(SEPARATOR_TEXT) + SEPARATOR_TEXT.Length; if (indexOf == -1) { newText = "ERROR FINDING SEPARATOR"; } else { newText = newText.Substring(0, indexOf); newText += getTextForPage(labelController, encounter, item); } labelController.label.Text = newText; // NoBrain.LogFine("NoBrainBehaviour updating text to: " + newText); // Layouting labelController.label.AutoHeight = true; labelController.label.Invalidate(); labelController.panel.FitToContents(); labelController.panel.Invalidate(); labelController.Trigger(); }
/// <summary> /// Gets the item unlocked by <paramref name="blueprintTrackable"/> /// </summary> /// <param name="blueprintTrackable">Target blueprint</param> /// <returns>The item unlocked by <paramref name="blueprintTrackable"/> or <see langword="null"/> if it didn't find it</returns> public static PickupObject GetBlueprintUnlockedItem(EncounterTrackable blueprintTrackable) { for (int i = 0; i < PickupObjectDatabase.Instance.Objects.Count; i++) { PickupObject pickupObject = PickupObjectDatabase.Instance.Objects[i]; if (pickupObject) { EncounterTrackable encounterTrackable = pickupObject.encounterTrackable; if (encounterTrackable) { string itemkey = encounterTrackable.journalData.PrimaryDisplayName; if (itemkey.Equals(blueprintTrackable.journalData.PrimaryDisplayName, StringComparison.OrdinalIgnoreCase)) { string itemkey2 = encounterTrackable.journalData.NotificationPanelDescription; if (itemkey2.Equals(blueprintTrackable.journalData.NotificationPanelDescription, StringComparison.OrdinalIgnoreCase)) { string itemkey3 = encounterTrackable.journalData.AmmonomiconFullEntry; if (itemkey3.Equals(blueprintTrackable.journalData.AmmonomiconFullEntry, StringComparison.OrdinalIgnoreCase)) { string sprite = encounterTrackable.journalData.AmmonomiconSprite; if (sprite.Equals(blueprintTrackable.journalData.AmmonomiconSprite, StringComparison.OrdinalIgnoreCase)) { return(pickupObject); } } } } } } } return(null); }
private void onNewLabel(DefaultLabelController labelController, EncounterTrackable encounter, PickupObject item) { if (ITEM_BLACKLIST.Contains(item.PickupObjectId)) { return; } // add padding fix behaviour that only updates position and not the padding labelController.gameObject.AddComponent <PositionUpdater>(); // Text change var newText = labelController.label.Text; newText += SEPARATOR_TEXT; newText += getTextForPage(labelController, encounter, item); labelController.label.Text = newText; // Layouting labelController.enabled = false; labelController.label.TextScale = 2f; labelController.label.AutoHeight = true; labelController.label.WordWrap = true; labelController.label.Width = Screen.width / 3f; labelController.label.Padding = new RectOffset(6, 6, 0, 0); labelController.label.Invalidate(); labelController.panel.FitToContents(); labelController.panel.Invalidate(); labelController.Trigger(); }
public static void SetupUnlockOnFlag(this PickupObject self, GungeonFlags flag, bool requiredFlagValue) //thanks SpAPI { EncounterTrackable encounterTrackable = self.encounterTrackable; bool flag2 = encounterTrackable.prerequisites == null; if (flag2) { encounterTrackable.prerequisites = new DungeonPrerequisite[1]; encounterTrackable.prerequisites[0] = new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.FLAG, requireFlag = requiredFlagValue, saveFlagToCheck = flag }; } else { encounterTrackable.prerequisites = encounterTrackable.prerequisites.Concat(new DungeonPrerequisite[] { new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.FLAG, requireFlag = requiredFlagValue, saveFlagToCheck = flag } }).ToArray <DungeonPrerequisite>(); } EncounterDatabaseEntry entry = EncounterDatabase.GetEntry(encounterTrackable.EncounterGuid); bool flag3 = !string.IsNullOrEmpty(entry.ProxyEncounterGuid); if (flag3) { entry.ProxyEncounterGuid = ""; } bool flag4 = entry.prerequisites == null; if (flag4) { entry.prerequisites = new DungeonPrerequisite[1]; entry.prerequisites[0] = new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.FLAG, requireFlag = requiredFlagValue, saveFlagToCheck = flag }; } else { entry.prerequisites = entry.prerequisites.Concat(new DungeonPrerequisite[] { new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.FLAG, requireFlag = requiredFlagValue, saveFlagToCheck = flag } }).ToArray <DungeonPrerequisite>(); } }
/// <summary> /// Creates a new <c>EncounterDatabaseEntry</c>. /// </summary> /// <returns>The new encounter database entry.</returns> /// <param name="enc_track">Encounter trackable object.</param> /// <param name="path">String to set as the asset path.</param> public static EncounterDatabaseEntry CreateEncounterDatabaseEntry(EncounterTrackable enc_track, string path) { var enc_entry = new EncounterDatabaseEntry(enc_track); enc_entry.path = path; enc_entry.unityGuid = enc_entry.myGuid = enc_track.EncounterGuid; return(enc_entry); }
public new void OnEnteredRange(PlayerController interactor) { if (!this) { return; } SpriteOutlineManager.RemoveOutlineFromSprite(base.sprite, false); SpriteOutlineManager.AddOutlineToSprite(base.sprite, Color.white); Vector3 offset = new Vector3(base.sprite.GetBounds().max.x + 0.1875f, base.sprite.GetBounds().min.y, 0f); EncounterTrackable component = this.item.GetComponent <EncounterTrackable>(); string arg = (!(component != null)) ? this.item.DisplayName : component.journalData.GetPrimaryDisplayName(false); string text = this.ModifiedPrice.ToString(); if (this.m_baseParentShop != null) { if (this.CurrencyType == CustomShopItemController.ShopCurrencyType.META_CURRENCY) { text += "[sprite \"hbux_text_icon\"]"; } else if (this.CurrencyType == CustomShopItemController.ShopCurrencyType.COINS) { text += "[sprite \"ui_coin\"]"; } else if (this.CurrencyType == CustomShopItemController.ShopCurrencyType.KEYS) { text += "[sprite \"ui_key\"]"; } else if (this.CurrencyType == CustomShopItemController.ShopCurrencyType.BLANKS) { text += "[sprite \"ui_blank\"]"; } else if (this.CurrencyType == CustomShopItemController.ShopCurrencyType.CUSTOM) { text += "[sprite \"" + customPriceSprite + "\"]"; } else { text += "[sprite \"ui_coin\"]"; } } string text2; if ((this.m_baseParentShop && (this.m_baseParentShop.IsCapableOfBeingStolenFrom) || interactor.IsCapableOfStealing) && this.m_baseParentShop.canBeRobbed) { text2 = string.Format("[color red]{0}: {1} {2}[/color]", arg, text, StringTableManager.GetString("#STEAL")); } else { text2 = string.Format("{0}: {1}", arg, text); } GameObject gameObject = GameUIRoot.Instance.RegisterDefaultLabel(base.transform, offset, text2); dfLabel componentInChildren = gameObject.GetComponentInChildren <dfLabel>(); componentInChildren.ColorizeSymbols = false; componentInChildren.ProcessMarkup = true; }
public void Interact(PlayerController player) { if (player != null) { GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(ETGMod.Databases.Items["TakeableEnemy"].gameObject, Vector2.zero, Quaternion.identity); TakeableEnemy component = gameObject.GetComponent <TakeableEnemy>(); EncounterTrackable component2 = component.GetComponent <EncounterTrackable>(); if (component2 != null) { component2.DoNotificationOnEncounter = false; } component.suppressPickupVFX = true; component.Pickup(player); component.enemyguid = base.aiActor.EnemyGuid; component.DelayedInitialization(); component.sprite.SetSprite(base.sprite.Collection, base.sprite.spriteId); component.encounterTrackable.journalData.PrimaryDisplayName = base.encounterTrackable.journalData.PrimaryDisplayName; component.encounterTrackable.journalData.NotificationPanelDescription = base.encounterTrackable.journalData.NotificationPanelDescription; component.encounterTrackable.journalData.AmmonomiconFullEntry = base.encounterTrackable.journalData.AmmonomiconFullEntry; Destroy(base.gameObject); } }
private string getTextForPage(DefaultLabelController labelController, EncounterTrackable encounter, PickupObject item) { string pageDescription; string text = ""; var itemDictSuccess = NoBrain.jsonItemDict.TryGetValue(item.PickupObjectId, out var noBrainJsonItem); var passiveActiveString = item is PassiveItem ? "Passive" : "Active"; text = "[color #7d7d7d]"; if (NoBrain.SHOW_ITEM_IDS) { text += " " + item.PickupObjectId; } text += " " + item.quality.getUISpriteString() + " " + passiveActiveString + "[/color]"; if (currentPage == PAGE_AMMO || !itemDictSuccess) { pageDescription = "Ammonomicon"; var ammonomiconFullEntry = encounter.journalData.GetAmmonomiconFullEntry(false, false); if (ammonomiconFullEntry.Length > 0) { text += "\n[color #a0a0a0]" + ammonomiconFullEntry.TrimEnd() + "[/color]"; } } else if (currentPage == PAGE_DESC) { pageDescription = "Description"; text += "\n[color #a0a0a0]" + noBrainJsonItem.desc + "[/color]"; } else if (currentPage == PAGE_STATS) { pageDescription = "Stats"; text += "\n[color #a0a0a0]" + noBrainJsonItem.stats + "[/color]"; } else if (currentPage == PAGE_SYNERGIES) { pageDescription = "Synergies"; var synergySuccess = NoBrain.synergyDict.TryGetValue(item.PickupObjectId, out var synergyList); if (synergySuccess) { foreach (var advancedSynergyEntry in synergyList) { var mandatoryItemString = advancedSynergyEntry.getMandatoryString(); var optionalItemString = advancedSynergyEntry.getOptionalString(); text += "\n[color #98FAFF]" + advancedSynergyEntry.getName() + "[/color] " + advancedSynergyEntry.NumberObjectsRequired + " of (" + mandatoryItemString + ") [" + optionalItemString + "]"; } text += ""; } else { text = "\nNo Synergies found."; } } else { pageDescription = "ERROR"; text = "INVALID PAGE"; } if (!itemDictSuccess) { // skip footer, only one page available return(text); } return(text + "\n[color #3f704d]" + pageDescription + "(" + (currentPage + 1) + "/" + PAGE_LENGTH + ") Press " + reloadSpriteTag + "[/color]"); }
/// <summary> /// Adds a new translation for <paramref name="track"/>'s long description. /// </summary> /// <param name="track">The <see cref="EncounterTrackable"/> to add the translation to.</param> /// <param name="language">The language to which the translation will be applied.</param> /// <param name="translation">The translated text.</param> public static void TranslateLongDescription(this EncounterTrackable track, StringTableManager.GungeonSupportedLanguages language, string translation) { AddTranslation(language, track.journalData.AmmonomiconFullEntry, translation, StringTableType.Items); }
/// <summary> /// Adds a new translation for <paramref name="track"/>'s short description. /// </summary> /// <param name="track">The <see cref="EncounterTrackable"/> to add the translation to.</param> /// <param name="language">The language to which the translation will be applied.</param> /// <param name="translation">The translated text.</param> public static void TranslateShortDescription(this EncounterTrackable track, StringTableManager.GungeonSupportedLanguages language, string translation) { AddTranslation(language, track.journalData.NotificationPanelDescription, translation, StringTableType.Items); }
/// <summary> /// Adds a new translation for <paramref name="track"/>'s name. /// </summary> /// <param name="track">The <see cref="EncounterTrackable"/> to add the translation to.</param> /// <param name="language">The language to which the translation will be applied.</param> /// <param name="translation">The translated text.</param> public static void TranslateName(this EncounterTrackable track, StringTableManager.GungeonSupportedLanguages language, string translation) { AddTranslation(language, track.journalData.PrimaryDisplayName, translation, StringTableType.Items); }
public override void Start() { try { FakePrefabHooks.Init(); ItemBuilder.Init(); PlayerEventAdder.Init(); UnlockHookInators.AddHooks(); MagmaticBlood.Init(); MimicSkin.Init(); //Added to the doc SaplingBullets.Init(); //Added to the doc SlightlyLargerBullets.Init(); //Added to the doc WarriorsSyringe.Init(); //Added to the doc VultureFeather.Init(); //Added to the doc StraponRPG.Init(); //Added to the doc Jeremy.Init(); //Added to the doc Gasoline.Init(); //Added to the doc CatSnack.Init(); //Added to the doc ClassicCatSnack.Init(); JunkSynthesizer.Init(); WyrmBlood.Init(); //Added to the doc //GreenCandy.Init(); //KeyCandy.Init(); //GoldenCandy.Init(); //BlueCandy.Init(); //RedCandy.Init(); //HeartCandy.Init(); //MonsterCandy.Init(); ImprovedCandies.CandiesInit(); ImprovedCandies.PositiveEffectsInit(); //TrickOTreater.Init(); //Added to the doc BlackSkull.Init(); StoneSword.Init(); StoneAmmolet.Init(); Randy.Init(); BeeGun.Add(); //BloodyCannon.Add(); //WindStaff.Add(); RedAndWhite.Add(); RoyalShotgun.Add(); //Shotstool.Add(); RescueRanger.Add(); NuclearShotgun.Add(); NuclearAmmoPickup.Init(); SweeperGun.Add(); MaliciousRailcannon.Add(); Superbug.Add(); PetrifyingMirror.Init(); EnchantedTome.Init(); BronzeKey.Init(); StackOfCash.Init(); ExecutionShells.Init(); BloodBullets.Init(); HoodedShells.Init(); ClockworkCog.Init(); HighPriestCloak.Init(); LuckyCoin.Init(); LuckyHorseshoe.Init(); ToxicFungus.Init(); PurpleGuonStone.Init(); GarbageBin.Init(); ColdAmmo.Init(); MaidenPlating.Init(); PlagueBullets.Init(); CrownOfBlood.Init(); GalacticChest.Init(); Bravery.Init(); RaidersAxe.Init(); BulletSynthesizer.Init(); ElectricRounds.Init(); ThunderRounds.Init(); ToxicHoneycomb.Init(); BoomerangBullets.Init(); OilyGreaves.Init(); ShadyChest.Init(); //CandyBag.Init(); MinerHelmet.Init(); Depthmeter.Init(); Smore.Init(); KeyDoubler.Init(); BlankDoubler.Init(); CursedCandle.Init(); MyNameIsYoshikageKira.Init(); MythrilBullets.Init(); Charcoal.Init(); CodexUmbra.Init(); BloodyDice.Init(); StarFruit.Init(); HeartyKey.Init(); DeadlyKnife.Init(); Overloader.Init(); Sushi.Init(); AmmoEnhancer.Init(); BanditHat.Init(); Ushanka.Init(); BigBoom.Init(); Seashell.Init(); //GoldenBox.Init(); CobaltCoin.Init(); RingOfWealth.Init(); QuartzCrystal.Init(); DeadRinger.Init(); RoyalCapacitator.Init(); Cookbook.Init(); ParrotsFeather.Init(); Soulbauble.Init(); FlameWisp.Init(); CatsEye.Init(); GunPermit.Init(); DormantStabiliser.Init(); CaveCarrot.Init(); BlueAlbum.Init(); DoubleABattery.Init(); ScarecrowsHead.Init(); OnyxBracelet.Init(); LemonPig.Init(); IfritsHorn.Init(); EnderHelmet.Init(); BabyGoodRobot.Init(); CaptainsBrooch.Init(); SoulInator.Init(); TwoOfHearts.Init(); ParasiticFungus.Init(); ExperimentalRocketLauncher.Init(); AbyssalShield.Init(); //Coil.Init(); //Restock.Init(); //ChainOfBeing.Init(); //RangeCrystal.Init(); //BloodyLockpick.Init(); //Bitey.Init(); //JestersHat.Init(); //PrismaticLexicon.Init(); //GhoulBullets.Init(); IncubusStartingPassive.Init(); IncubusStartingActive.Init(); /*BlueExplosive.Init(); * RedExplosive.Init(); * WhiteExplosive.Init(); * SwarmSneak.Init(); * YVSwarmPickup.Init(); * WhiteDamageUp.Init(); * Drone.Init();*/ ETGModConsole.Commands.AddGroup("psmdebug", delegate(string[] args) { Log("Please specify a command.", TEXT_COLOR); }); ETGModConsole.Commands.GetGroup("psmdebug").AddUnit("guaranteeproc", delegate(string[] args) { DebugChance = !DebugChance; Log($"Guarantee Proc is now: {DebugChance}", TEXT_COLOR); }); ETGModConsole.Commands.GetGroup("psmdebug").AddUnit("unlocks", delegate(string[] args) { int totalItems = 0; int unlockedItems = 0; List <PickupObject> list = new List <PickupObject>(); List <PickupObject> list2 = new List <PickupObject>(); foreach (PickupObject item in ItemBuilder.AddedItems) { EncounterTrackable trolling = item.GetComponent <EncounterTrackable>(); if (trolling && trolling.prerequisites != null && trolling.prerequisites.Length > 0) { totalItems++; if (trolling.PrerequisitesMet()) { unlockedItems++; list2.Add(item); } else { list.Add(item); } } } Log($"Unlocked: {unlockedItems}/{totalItems}", TEXT_COLOR); if (list2.Count > 0) { Log("Items Unlocked:", TEXT_COLOR); foreach (PickupObject item in list2) { Log(item.name, TEXT_COLOR); } } if (list.Count > 0) { Log("Items Left:", TEXT_COLOR); foreach (PickupObject item in list) { Log($"{item.name}: {Unlocks[item.PickupObjectId]}", TEXT_COLOR); } } }); ETGModConsole.Commands.GetGroup("psmdebug").AddUnit("getcustommaximums", delegate(string[] args) { Log($"Most Damage Had: {DaveAPIManager.GetPlayerMaximum(CustomTrackedMaximums.MAXIMUM_DAMAGE)}", TEXT_COLOR); Log($"Most Health Had: {DaveAPIManager.GetPlayerMaximum(CustomTrackedMaximums.MAXIMUM_HEALTH)}", TEXT_COLOR); Log($"Most Money Had: {DaveAPIManager.GetPlayerMaximum(CustomTrackedMaximums.MOST_MONEY)}", TEXT_COLOR); }); } catch (Exception ex) { itemsLoad = $"{ex}"; } ETGMod.StartGlobalCoroutine(IfOtherModsExist()); }
public static IEnumerator HandleOpenAmmonomiconHook(Action <AmmonomiconController, bool, bool, EncounterTrackable> orig, AmmonomiconController self, bool isDeath, bool isShortAnimation, EncounterTrackable targetTrackable) { List <AmmonomiconFrameDefinition> TargetAnimationFrames = self.OpenAnimationFrames; if (!isShortAnimation || isDeath) { if (isShortAnimation) { TargetAnimationFrames = new List <AmmonomiconFrameDefinition>(); for (int i = 0; i < 9; i++) { TargetAnimationFrames.Add(self.OpenAnimationFrames[i]); } for (int j = 23; j < self.OpenAnimationFrames.Count; j++) { TargetAnimationFrames.Add(self.OpenAnimationFrames[j]); } AkSoundEngine.PostEvent("Play_UI_ammonomicon_open_01", self.gameObject); } else { AkSoundEngine.PostEvent("Play_UI_ammonomicon_intro_01", self.gameObject); } float animationTime = (float)GetAnimationLength.Invoke(self, new object[] { TargetAnimationFrames }); float elapsed = 0f; int currentFrameIndex = 0; float nextFrameTime = TargetAnimationFrames[0].frameTime * (float)GLOBAL_ANIMATION_SCALE.GetValue(self); SetFrame.Invoke(self, new object[] { TargetAnimationFrames[0] }); while (elapsed < animationTime) { elapsed += GameManager.INVARIANT_DELTA_TIME; if (elapsed >= animationTime) { break; } if (elapsed >= nextFrameTime) { currentFrameIndex++; nextFrameTime += TargetAnimationFrames[currentFrameIndex].frameTime * (float)GLOBAL_ANIMATION_SCALE.GetValue(self); SetFrame.Invoke(self, new object[] { TargetAnimationFrames[currentFrameIndex] }); } while (!((bool)m_applicationFocus.GetValue(self))) { yield return(null); } yield return(null); } } SetFrame.Invoke(self, new object[] { TargetAnimationFrames[TargetAnimationFrames.Count - 1] }); if (isDeath) { ((AmmonomiconInstanceManager)m_AmmonomiconInstance.GetValue(self)).OpenDeath(); } else { ((AmmonomiconInstanceManager)m_AmmonomiconInstance.GetValue(self)).Open(); } if (targetTrackable != null) { AmmonomiconPokedexEntry pokedexEntry = self.CurrentLeftPageRenderer.GetPokedexEntry(targetTrackable); if (pokedexEntry != null) { Debug.Log("GET INFO SUCCESS"); pokedexEntry.ForceFocus(); } } m_isPageTransitioning.SetValue(self, false); HandleQueuedUnlocks.Invoke(self, new object[] { }); yield break; }
public static void SetupUnlockOnStat(this PickupObject self, TrackedStats stat, DungeonPrerequisite.PrerequisiteOperation operation, int comparisonValue) { EncounterTrackable encounterTrackable = self.encounterTrackable; bool flag = encounterTrackable.prerequisites == null; if (flag) { encounterTrackable.prerequisites = new DungeonPrerequisite[1]; encounterTrackable.prerequisites[0] = new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.COMPARISON, prerequisiteOperation = operation, statToCheck = stat, comparisonValue = (float)comparisonValue }; } else { encounterTrackable.prerequisites = encounterTrackable.prerequisites.Concat(new DungeonPrerequisite[] { new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.COMPARISON, prerequisiteOperation = operation, statToCheck = stat, comparisonValue = (float)comparisonValue } }).ToArray <DungeonPrerequisite>(); } EncounterDatabaseEntry entry = EncounterDatabase.GetEntry(encounterTrackable.EncounterGuid); bool flag2 = !string.IsNullOrEmpty(entry.ProxyEncounterGuid); if (flag2) { entry.ProxyEncounterGuid = ""; } bool flag3 = entry.prerequisites == null; if (flag3) { entry.prerequisites = new DungeonPrerequisite[1]; entry.prerequisites[0] = new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.COMPARISON, prerequisiteOperation = operation, statToCheck = stat, comparisonValue = (float)comparisonValue }; } else { entry.prerequisites = entry.prerequisites.Concat(new DungeonPrerequisite[] { new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.COMPARISON, prerequisiteOperation = operation, statToCheck = stat, comparisonValue = (float)comparisonValue } }).ToArray <DungeonPrerequisite>(); } }
private static void WindowFunction(int windowID) { if (windowID == 0) { GUILayout.BeginArea(new Rect(5f, 15f, 290f, 400f)); GUILayout.Label(string.Format("Current Actor Name: {0}", GameManager.Instance.PrimaryPlayer.ActorName), new GUILayoutOption[0]); GUILayout.Label(string.Format("Current Gun Name: {0}", GameManager.Instance.PrimaryPlayer.CurrentGun.name), new GUILayoutOption[0]); if (GUILayout.Button(string.Format("Stealthed {0}", GameManager.Instance.PrimaryPlayer.IsStealthed ? "On" : "Off"), new GUILayoutOption[0])) { if (GameManager.Instance.PrimaryPlayer.IsStealthed) { GameManager.Instance.PrimaryPlayer.gameActor.SetIsStealthed(false, "box"); } else { GameManager.Instance.PrimaryPlayer.gameActor.SetIsStealthed(true, "box"); } } if (GUILayout.Button(string.Format("Clear Floor", new object[0]), new GUILayoutOption[0])) { GameManager.Instance.Dungeon.FloorCleared(); } if (GUILayout.Button(string.Format("Heal All Players", new object[0]), new GUILayoutOption[0])) { for (int i = 0; i < GameManager.Instance.AllPlayers.Length; i++) { if (GameManager.Instance.AllPlayers[i].healthHaver.IsAlive) { GameManager.Instance.AllPlayers[i].healthHaver.FullHeal(); } } } if (GUILayout.Button(string.Format("Change to Random Gun", new object[0]), new GUILayoutOption[0])) { GameManager.Instance.PrimaryPlayer.inventory.AddGunToInventory(PickupObjectDatabase.GetRandomGun(), true); } if (GUILayout.Button(string.Format("Add 100 currency", new object[0]), new GUILayoutOption[0])) { GameStatsManager.Instance.RegisterStatChange(TrackedStats.META_CURRENCY, 100f); GameManager.Instance.PrimaryPlayer.carriedConsumables.Currency += 100; } if (GUILayout.Button(string.Format("Unlimited Ammo {0}", ModMenu.unlimAmmo ? "On" : "Off"), new GUILayoutOption[0])) { ModMenu.unlimAmmo = !ModMenu.unlimAmmo; } if (GUILayout.Button(string.Format("Destroy Enemy Bullets", new object[0]), new GUILayoutOption[0])) { SilencerInstance.DestroyBulletsInRange(GameManager.Instance.PrimaryPlayer.transform.PositionVector2(), 100f, true, false, null, false, null, false, null); } if (GUILayout.Button(string.Format("Teleport Hax {0}", ModMenu.teleportHax ? "On" : "Off"), new GUILayoutOption[0])) { ModMenu.teleportHax = !ModMenu.teleportHax; } if (GUILayout.Button(string.Format("Spawn Currency", new object[0]), new GUILayoutOption[0])) { LootEngine.SpawnCurrency(GameManager.Instance.PrimaryPlayer.CenterPosition, 1000, false); } if (GUILayout.Button(string.Format("Can always steal {0}", ModMenu.canAlwaysSteal ? "On" : "Off"), new GUILayoutOption[0])) { ModMenu.canAlwaysSteal = !ModMenu.canAlwaysSteal; } if (GUILayout.Button(string.Format("Add Ammo Automatically {0}", ModMenu.addAmmoAutomatically ? "On" : "Off"), new GUILayoutOption[0])) { ModMenu.addAmmoAutomatically = !ModMenu.addAmmoAutomatically; } if (GUILayout.Button(string.Format("Auto Heal {0}", ModMenu.autoHeal ? "On" : "Off"), new GUILayoutOption[0])) { ModMenu.autoHeal = !ModMenu.autoHeal; } if (GUILayout.Button(string.Format("Increase Base Ammo", new object[0]), new GUILayoutOption[0])) { GameManager.Instance.PrimaryPlayer.CurrentGun.SetBaseMaxAmmo(10000); } GUILayout.EndArea(); } if (windowID == 1) { GUILayout.BeginArea(new Rect(5f, 15f, 290f, 400f)); ModMenu.scrollViewVector = GUILayout.BeginScrollView(ModMenu.scrollViewVector, new GUILayoutOption[] { GUILayout.Width(280f), GUILayout.Height(380f) }); if (GameManager.Instance.PrimaryPlayer.inventory.AllGuns != null) { for (int j = 0; j < GameManager.Instance.PrimaryPlayer.inventory.AllGuns.Count; j++) { if (GUILayout.Button(string.Format("Get Ammo for {0}", GameManager.Instance.PrimaryPlayer.inventory.AllGuns[j].DisplayName), ModMenu.BtnStyle, new GUILayoutOption[0])) { GameManager.Instance.PrimaryPlayer.inventory.AllGuns[j].GainAmmo(1000); } GUILayout.Label(string.Concat(new object[] { "Gun Name: ", GameManager.Instance.PrimaryPlayer.inventory.AllGuns[j].name, "\nDisplay Name: ", GameManager.Instance.PrimaryPlayer.inventory.AllGuns[j].DisplayName, "\nGun Ammo: ", GameManager.Instance.PrimaryPlayer.inventory.AllGuns[j].ammo, "\n================" }), new GUILayoutOption[0]); } } GUILayout.EndScrollView(); GUILayout.EndArea(); } if (windowID == 2) { GUILayout.BeginArea(new Rect(5f, 15f, 490f, 400f)); ModMenu.scrollViewVector2 = GUILayout.BeginScrollView(ModMenu.scrollViewVector2, new GUILayoutOption[] { GUILayout.Width(480f), GUILayout.Height(380f) }); int count = PickupObjectDatabase.Instance.Objects.Count; for (int k = 0; k < PickupObjectDatabase.Instance.Objects.Count; k++) { if (PickupObjectDatabase.Instance.Objects[k] != null && PickupObjectDatabase.Instance.Objects[k] is Gun) { EncounterTrackable component = PickupObjectDatabase.Instance.Objects[k].GetComponent <EncounterTrackable>(); if (component && component.PrerequisitesMet()) { if (GUILayout.Button(string.Format("Add {0} to your Inventory", PickupObjectDatabase.Instance.Objects[k].DisplayName), ModMenu.BtnStyle, new GUILayoutOption[0])) { GameManager.Instance.PrimaryPlayer.inventory.AddGunToInventory(PickupObjectDatabase.Instance.Objects[k] as Gun, true); } GUILayout.Label(string.Concat(new object[] { "Gun Name: ", PickupObjectDatabase.Instance.Objects[k].name, "\nDisplay Name: ", PickupObjectDatabase.Instance.Objects[k].DisplayName, "\nItem Quality: ", PickupObjectDatabase.Instance.Objects[k].quality.ToString(), "\n================" }), new GUILayoutOption[0]); } } } GUILayout.EndScrollView(); GUILayout.EndArea(); } if (windowID == 3) { GUILayout.BeginArea(new Rect(5f, 15f, 490f, 400f)); ModMenu.scrollViewVector3 = GUILayout.BeginScrollView(ModMenu.scrollViewVector3, new GUILayoutOption[] { GUILayout.Width(480f), GUILayout.Height(380f) }); for (int l = 0; l < PickupObjectDatabase.Instance.Objects.Count; l++) { if (PickupObjectDatabase.Instance.Objects[l] != null && PickupObjectDatabase.Instance.Objects[l] is PassiveItem) { EncounterTrackable component2 = PickupObjectDatabase.Instance.Objects[l].GetComponent <EncounterTrackable>(); if (component2 && component2.PrerequisitesMet()) { if (GUILayout.Button(string.Format("Add {0} to your Inventory", PickupObjectDatabase.Instance.Objects[l].DisplayName), ModMenu.BtnStyle, new GUILayoutOption[0])) { GameManager.Instance.PrimaryPlayer.AcquirePassiveItem(PickupObjectDatabase.Instance.Objects[l] as PassiveItem); } GUILayout.Label(string.Concat(new object[] { "Item Name: ", PickupObjectDatabase.Instance.Objects[l].name, "\nDisplay Name: ", PickupObjectDatabase.Instance.Objects[l].DisplayName, "\n================" }), new GUILayoutOption[0]); } } } GUILayout.EndScrollView(); GUILayout.EndArea(); } }
private static void BuildWestBrosBossPrefab(AssetBundle assetBundle, out GameObject outObject, WestBros whichBro, bool isSmiley, tk2dSpriteCollectionData sourceSpriteCollection, tk2dSpriteAnimation sourceAnimations, bool keepIntroDoer = false) { GameObject prefab = ExpandCustomEnemyDatabase.GetOfficialEnemyByGuid(isSmiley ? "ea40fcc863d34b0088f490f4e57f8913" // Smiley : "c00390483f394a849c36143eb878998f").gameObject; // Shades outObject = UnityEngine.Object.Instantiate(prefab, Vector3.zero, Quaternion.identity); try { string name = $"West Bros {whichBro}"; outObject.SetActive(false); outObject.name = name; AIActor actor = outObject.GetComponent <AIActor>(); actor.healthHaver.overrideBossName = "Western Bros"; actor.EnemyId = UnityEngine.Random.Range(100000, 999999); actor.ActorName = name; EncounterTrackable Encounterable = outObject.GetComponent <EncounterTrackable>(); switch (whichBro) { case WestBros.Angel: actor.EnemyGuid = "275354563e244f558be87fcff4b07f9f"; Encounterable.EncounterGuid = "7d6e1faf682d4402b29535020313f383"; break; case WestBros.Nome: actor.EnemyGuid = "3a1a33a905bb4b669e7d798f20674c4c"; Encounterable.EncounterGuid = "78cb8889dc884dd9b3aafe64558d858e"; break; case WestBros.Tuc: actor.EnemyGuid = "d2e7ea9ea9a444cebadd3bafa0832cd1"; Encounterable.EncounterGuid = "1df53371ce084dafb46f6bcd5a6c1c5f"; break; } // TODO at some distant point in time Encounterable.journalData.PrimaryDisplayName = name; Encounterable.journalData.NotificationPanelDescription = name; Encounterable.journalData.AmmonomiconFullEntry = name; // x BroController // x BulletBroDeathController // x BulletBrosIntroDoer // x BulletBroSeekTargetBehavior // movement behaviour // BulletBroRepositionBehavior // completely unused var oldBroController = outObject.GetComponent <BroController>(); var newBroController = outObject.AddComponent <ExpandWesternBroController>(); newBroController.enrageAnim = oldBroController.enrageAnim; newBroController.enrageAnimTime = oldBroController.enrageAnimTime; newBroController.enrageHealToPercent = oldBroController.enrageHealToPercent; newBroController.overheadVfx = oldBroController.overheadVfx; newBroController.postEnrageMoveSpeed = oldBroController.postEnrageMoveSpeed; newBroController.whichBro = whichBro; newBroController.postSecondEnrageMoveSpeed = newBroController.postEnrageMoveSpeed; UnityEngine.Object.Destroy(oldBroController); UnityEngine.Object.Destroy(outObject.GetComponent <BulletBroDeathController>()); outObject.AddComponent <ExpandWesternBroDeathController>(); var newMovementBehavior = new ExpandWesternBroSeekTargetBehavior(); var oldMovementBehavior = actor.behaviorSpeculator.MovementBehaviors.First() as BulletBroSeekTargetBehavior; newMovementBehavior.CustomRange = oldMovementBehavior.CustomRange; newMovementBehavior.PathInterval = oldMovementBehavior.PathInterval; newMovementBehavior.StopWhenInRange = oldMovementBehavior.StopWhenInRange; actor.behaviorSpeculator.MovementBehaviors = new List <MovementBehaviorBase>() { newMovementBehavior }; // only smiley has a bossIntroDoer, so the stuff after this would null reference if done with shade if (isSmiley) { if (!keepIntroDoer) { UnityEngine.Object.Destroy(outObject.GetComponent <BulletBrosIntroDoer>()); UnityEngine.Object.Destroy(outObject.GetComponent <GenericIntroDoer>()); } else { // BulletBrosIntroDoer is a SpecificIntroDoer; it does not inherent from GenericIntroDoer, it requires it to be present BulletBrosIntroDoer bulletBrosIntroDoer = outObject.GetComponent <BulletBrosIntroDoer>(); // destroy it so we can add our own UnityEngine.Object.Destroy(bulletBrosIntroDoer); GenericIntroDoer genericIntroDoer = outObject.GetComponent <GenericIntroDoer>(); genericIntroDoer.portraitSlideSettings.bossNameString = "Western Bros"; genericIntroDoer.portraitSlideSettings.bossSubtitleString = "Triple Tap"; genericIntroDoer.portraitSlideSettings.bossQuoteString = string.Empty; genericIntroDoer.portraitSlideSettings.bossArtSprite = assetBundle.LoadAsset <Texture2D>("WesternBrosBossCard"); genericIntroDoer.triggerType = GenericIntroDoer.TriggerType.PlayerEnteredRoom; genericIntroDoer.OnIntroFinished = () => { }; ExpandWesternBroIntroDoer specificIntroDoer = outObject.AddComponent <ExpandWesternBroIntroDoer>(); } } var animationsAsset = assetBundle.LoadAsset <GameObject>($"WestBrosAnimations_{whichBro}"); List <tk2dSpriteAnimationClip> animationClips = new List <tk2dSpriteAnimationClip>(); foreach (tk2dSpriteAnimationClip clip in sourceAnimations.clips) { if (clip.name.StartsWith($"{whichBro.ToString().ToLower()}_")) { animationClips.Add(ExpandUtility.DuplicateAnimationClip(clip)); } } List <tk2dSpriteAnimationClip> clipsToAdd = new List <tk2dSpriteAnimationClip>(); foreach (tk2dSpriteAnimationClip clip in animationClips) { clip.name = clip.name.Replace($"{whichBro.ToString().ToLower()}_", string.Empty); clip.name = clip.name.Replace("dash_front", "dash_forward"); clip.name = clip.name.Replace("move_front", "move_forward"); if (clip.name.EndsWith("_prime")) { clip.frames[5].eventAudio = "Play_ENM_bullet_dash_01"; clip.frames[5].triggerEvent = true; } else if (clip.name.StartsWith("move_")) { clip.frames[2].eventAudio = "PLay_FS_ENM"; clip.frames[2].triggerEvent = true; } else if (clip.name == "anger") { // we change the west bros anger animation from a loop to a loop section so the anger SFX only plays once. // to do this we simply clone every frame once and make it loop at the first copied frame. var angerFrames = clip.frames.ToList(); foreach (var frame in clip.frames) { tk2dSpriteAnimationFrame clonedFrame = new tk2dSpriteAnimationFrame(); ExpandUtility.ReflectionShallowCopyFields(clonedFrame, frame, BindingFlags.Public | BindingFlags.Instance); angerFrames.Add(clonedFrame); } // it's important to do this before changing clip.frames clip.loopStart = clip.frames.Length; clip.frames = angerFrames.ToArray(); clip.wrapMode = tk2dSpriteAnimationClip.WrapMode.LoopSection; clip.frames[0].eventAudio = "Play_BOSS_bulletbros_anger_01"; clip.frames[0].triggerEvent = true; } else if (clip.name == "death_right") { clip.name = "die"; tk2dSpriteAnimationClip dieFrontRight = ExpandUtility.DuplicateAnimationClip(clip); dieFrontRight.name = "die_front_right"; clipsToAdd.Add(dieFrontRight); } else if (clip.name == "death_left") { clip.name = "die_left"; tk2dSpriteAnimationClip dieFrontLeft = ExpandUtility.DuplicateAnimationClip(clip); dieFrontLeft.name = "die_front_left"; clipsToAdd.Add(dieFrontLeft); } else if (clip.name == "idle_front") { clip.name = "idle"; tk2dSpriteAnimationClip bigShot = ExpandUtility.DuplicateAnimationClip(clip); bigShot.wrapMode = tk2dSpriteAnimationClip.WrapMode.Once; bigShot.name = "big_shot"; clipsToAdd.Add(bigShot); tk2dSpriteAnimationClip charge = ExpandUtility.DuplicateAnimationClip(clip); charge.wrapMode = tk2dSpriteAnimationClip.WrapMode.Loop; charge.name = "charge"; clipsToAdd.Add(charge); // not really necessary since it's nuked from the animator further down tk2dSpriteAnimationClip appear = ExpandUtility.DuplicateAnimationClip(clip); appear.wrapMode = tk2dSpriteAnimationClip.WrapMode.Once; appear.name = "appear"; clipsToAdd.Add(appear); tk2dSpriteAnimationClip introGunToggle = ExpandUtility.DuplicateAnimationClip(clip); introGunToggle.wrapMode = tk2dSpriteAnimationClip.WrapMode.Once; introGunToggle.name = "intro2"; clipsToAdd.Add(introGunToggle); introGunToggle.frames[0].eventInfo = "guntoggle"; introGunToggle.frames[0].triggerEvent = true; } else if (clip.name == "summon") { clip.name = "whistle"; clip.wrapMode = tk2dSpriteAnimationClip.WrapMode.Once; // the summon vfx don't look right // clip.frames[0].eventVfx = "summon_vfx"; // clip.frames[0].triggerEvent = true; } else if (clip.name == "pound") { clip.name = "jump_attack"; // Uses modified sound that plays faster on the first half to account for west bros having faster animation. clip.frames[0].eventAudio = "Play_EX_BOSS_westbros_slam_01"; clip.frames[0].triggerEvent = true; } else if (clip.name == "intro") { clip.wrapMode = tk2dSpriteAnimationClip.WrapMode.Once; // this is setup in case we want the intro to continue looping during the boss card instead of the idle animation // requires to change the intro doer so it sets finished to true once it reaches the first loop //if (whichBro == WestBros.Nome) //{ // // nome's intro animation wasn't looping at the end like the others // var list = clip.frames.ToList(); // list.RemoveAt(20); // list.RemoveAt(20); // clip.frames = list.ToArray(); // clip.loopStart = 23; // clip.frames[23] = clip.frames[0]; // clip.frames[24] = clip.frames[1]; // clip.frames[25] = clip.frames[2]; // clip.frames[26] = clip.frames[3]; //} //else if (whichBro == WestBros.Tuc) //{ // // tuc's intro animation was off by one frame compared to the others // var list = clip.frames.ToList(); // list.RemoveAt(15); // clip.frames = list.ToArray(); // clip.loopStart = 21; //} } } animationClips.AddRange(clipsToAdd); tk2dSpriteAnimation spriteAnimation = animationsAsset.AddComponent <tk2dSpriteAnimation>(); spriteAnimation.clips = animationClips.ToArray(); tk2dSpriteAnimator spriteAnimator = outObject.GetComponent <tk2dSpriteAnimator>(); spriteAnimator.Library = spriteAnimation; tk2dSprite sprite = outObject.GetComponent <tk2dSprite>(); sprite.SetSprite(sourceSpriteCollection, $"BB_{whichBro.ToString().ToLower()}_idle_front_001"); sprite.PlaceAtPositionByAnchor(new Vector3(0f, 0f), tk2dBaseSprite.Anchor.LowerCenter); AIAnimator animator = outObject.GetComponent <AIAnimator>(); // removes the 'appear' animation animator.OtherAnimations.RemoveAt(0); outObject.transform.Find("shadow").localPosition += new Vector3(1.52f, 0.02f, 0); var shooter = SetupAIShooter(outObject); shooter.handObject = WestBrosHandPrefab.GetComponent <PlayerHandController>(); DebrisObject hatPrefab = null; switch (whichBro) { case WestBros.Angel: shooter.gunAttachPoint.position = new Vector3(-1.05f, 0.5f); WestBrosAngelGUID = actor.EnemyGuid; hatPrefab = WestBrosAngelHatPrefab.GetComponent <DebrisObject>(); break; case WestBros.Nome: shooter.gunAttachPoint.position = new Vector3(-1.05f, 0.4f); WestBrosNomeGUID = actor.EnemyGuid; hatPrefab = WestBrosNomeHatPrefab.GetComponent <DebrisObject>(); break; case WestBros.Tuc: shooter.gunAttachPoint.position = new Vector3(-1.05f, 0.5f); WestBrosTucGUID = actor.EnemyGuid; hatPrefab = WestBrosTucHatPrefab.GetComponent <DebrisObject>(); break; } shooter.equippedGunId = WestBrosRevolverGenerator.GetWestBrosRevolverID(whichBro); if (shooter.equippedGunId == -1) { ETGModConsole.Log("The West Bros Gun ID should have been set at this point already, but it wasn't. Assigning fallback gun."); shooter.equippedGunId = isSmiley ? 35 : 22; } var hatLauncher = outObject.GetComponentInChildren <ExplosionDebrisLauncher>(); // basically changes smiley's debris launcher into shades' hatLauncher.specifyArcDegrees = false; hatLauncher.minShards = 1; hatLauncher.maxShards = 1; hatLauncher.debrisSources = new DebrisObject[] { hatPrefab }; // move the ring of bullets spawned by jumping var shootPoint = outObject.transform.Find("shoot point"); shootPoint.position += new Vector3(1.5f, 0); // move the actual pixel colliders var rigidbody = outObject.GetComponent <SpeculativeRigidbody>(); foreach (var item in rigidbody.PixelColliders) { item.ManualOffsetX = 32; item.Regenerate(outObject.transform); } // TODO balance actor.healthHaver.ForceSetCurrentHealth(600); actor.healthHaver.SetHealthMaximum(600); actor.RegenerateCache(); ExpandCustomEnemyDatabase.AddEnemyToDatabase(outObject, actor.EnemyGuid, true); FakePrefab.MarkAsFakePrefab(outObject); UnityEngine.Object.DontDestroyOnLoad(outObject); } catch (Exception e) { ETGModConsole.Log($"Error setting up the western bro {whichBro}: " + e.ToString()); } }
protected override void DoSetup() { base.m_shopItems = new List <GameObject>(); List <int> list = new List <int>(); Func <GameObject, float, float> weightModifier = null; if (SecretHandshakeItem.NumActive > 0) { weightModifier = delegate(GameObject prefabObject, float sourceWeight) { PickupObject component10 = prefabObject.GetComponent <PickupObject>(); float num7 = sourceWeight; if (component10 != null) { int quality = (int)component10.quality; num7 *= 1f + (float)quality / 10f; } return(num7); }; } bool flag = GameStatsManager.Instance.IsRainbowRun; for (int i = 0; i < base.spawnPositions.Length; i++) { if (flag) { base.m_shopItems.Add(null); } else { GameObject gameObject5 = this.shopItems.SubshopSelectByWeightWithoutDuplicatesFullPrereqs(this.m_shopItems, weightModifier, 1, GameManager.Instance.IsSeeded); this.m_shopItems.Add(gameObject5); } } m_itemControllers = new List <ShopItemController>(); for (int m = 0; m < base.spawnPositions.Length; m++) { Transform transform = base.spawnPositions[m]; if (!flag && !(base.m_shopItems[m] == null)) { PickupObject component4 = base.m_shopItems[m].GetComponent <PickupObject>(); if (!(component4 == null)) { GameObject gameObject6 = new GameObject("Shop item " + m.ToString()); Transform transform2 = gameObject6.transform; transform2.parent = transform; transform2.localPosition = Vector3.zero; EncounterTrackable component5 = component4.GetComponent <EncounterTrackable>(); if (component5 != null) { GameManager.Instance.ExtantShopTrackableGuids.Add(component5.EncounterGuid); } CustomShopItemController shopItemController = gameObject6.AddComponent <CustomShopItemController>(); this.AssignItemFacing(transform, shopItemController); if (!base.m_room.IsRegistered(shopItemController)) { base.m_room.RegisterInteractable(shopItemController); } shopItemController.CurrencyType = currencyType; shopItemController.customCanBuy += CustomCanBuyMethod; shopItemController.customPrice += CustomPriceMethod; shopItemController.removeCurrency += RemoveCurrencyMethod; shopItemController.OnPurchase += OnPurchaseMethod; shopItemController.OnSteal += OnStealMethod; shopItemController.customPriceSprite = this.customPriceSprite; shopItemController.Initialize(component4, this); m_itemControllers.Add(shopItemController); } } } bool flag3 = false; if (base.shopItemsGroup2 != null && base.spawnPositionsGroup2.Length > 0) { int count = base.m_shopItems.Count; for (int num2 = 0; num2 < base.spawnPositionsGroup2.Length; num2++) { if (flag) { base.m_shopItems.Add(null); } else { float num3 = base.spawnGroupTwoItem1Chance; if (num2 == 1) { num3 = base.spawnGroupTwoItem2Chance; } else if (num2 == 2) { num3 = base.spawnGroupTwoItem3Chance; } bool isSeeded = GameManager.Instance.IsSeeded; if (((!isSeeded) ? UnityEngine.Random.value : BraveRandom.GenerationRandomValue()) < num3) { float replaceFirstRewardWithPickup = GameManager.Instance.RewardManager.CurrentRewardData.ReplaceFirstRewardWithPickup; if (!flag3 && ((!isSeeded) ? UnityEngine.Random.value : BraveRandom.GenerationRandomValue()) < replaceFirstRewardWithPickup) { flag3 = true; GameObject item2 = base.shopItems.SelectByWeightWithoutDuplicatesFullPrereqs(base.m_shopItems, weightModifier, GameManager.Instance.IsSeeded); base.m_shopItems.Add(item2); } else if (!GameStatsManager.Instance.IsRainbowRun) { GameObject rewardObjectShopStyle2 = GameManager.Instance.RewardManager.GetRewardObjectShopStyle(GameManager.Instance.PrimaryPlayer, false, false, base.m_shopItems); base.m_shopItems.Add(rewardObjectShopStyle2); } else { base.m_shopItems.Add(null); } } else { base.m_shopItems.Add(null); } } } for (int num4 = 0; num4 < base.spawnPositionsGroup2.Length; num4++) { Transform transform3 = base.spawnPositionsGroup2[num4]; if (!flag && !(base.m_shopItems[count + num4] == null)) { PickupObject component8 = base.m_shopItems[count + num4].GetComponent <PickupObject>(); if (!(component8 == null)) { GameObject gameObject8 = new GameObject("Shop 2 item " + num4.ToString()); Transform transform4 = gameObject8.transform; transform4.parent = transform3; transform4.localPosition = Vector3.zero; EncounterTrackable component9 = component8.GetComponent <EncounterTrackable>(); if (component9 != null) { GameManager.Instance.ExtantShopTrackableGuids.Add(component9.EncounterGuid); } CustomShopItemController shopItemController2 = gameObject8.AddComponent <CustomShopItemController>(); this.AssignItemFacing(transform3, shopItemController2); if (!base.m_room.IsRegistered(shopItemController2)) { base.m_room.RegisterInteractable(shopItemController2); } shopItemController2.Initialize(component8, this); m_itemControllers.Add(shopItemController2); } } } } /*for (int num6 = 0; num6 < m_customShopItemControllers.Count; num6++) * { * * m_customShopItemControllers[num6].CurrencyType = currencyType; * * m_customShopItemControllers[num6].CustomCanBuy += Balls.CustomCanBuy; * m_customShopItemControllers[num6].CustomPrice += Balls.CustomPrice; * m_customShopItemControllers[num6].RemoveCurrency += Balls.RemoveCurrency; * m_customShopItemControllers[num6].customPriceSprite = this.customPriceSprite; * }*/ }