using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AddWatermark;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Logging;
using CustomJadebox.JadeBoxes;
using CustomJadebox.Util;
using HarmonyLib;
using LBoL.Base;
using LBoL.Base.Extensions;
using LBoL.ConfigData;
using LBoL.Core;
using LBoL.Core.Adventures;
using LBoL.Core.Battle;
using LBoL.Core.Battle.BattleActions;
using LBoL.Core.Cards;
using LBoL.Core.GapOptions;
using LBoL.Core.JadeBoxes;
using LBoL.Core.Randoms;
using LBoL.Core.Stations;
using LBoL.Core.StatusEffects;
using LBoL.Core.Units;
using LBoL.EntityLib.Adventures;
using LBoL.EntityLib.Cards.Character.Cirno;
using LBoL.EntityLib.Cards.Character.Marisa;
using LBoL.EntityLib.Cards.Character.Reimu;
using LBoL.EntityLib.Cards.Character.Sakuya;
using LBoL.EntityLib.Exhibits.Common;
using LBoL.EntityLib.Exhibits.Mythic;
using LBoL.EntityLib.Exhibits.Shining;
using LBoL.EntityLib.JadeBoxes;
using LBoL.EntityLib.StatusEffects.Enemy;
using LBoL.Presentation;
using LBoL.Presentation.UI.Panels;
using LBoL.Presentation.UI.Widgets;
using LBoLEntitySideloader;
using LBoLEntitySideloader.Attributes;
using LBoLEntitySideloader.Entities;
using LBoLEntitySideloader.Resource;
using UnityEngine;
using UnityEngine.Events;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("LBoL.Base")]
[assembly: IgnoresAccessChecksTo("LBoL.ConfigData")]
[assembly: IgnoresAccessChecksTo("LBoL.Core")]
[assembly: IgnoresAccessChecksTo("LBoL.EntityLib")]
[assembly: IgnoresAccessChecksTo("LBoL.Presentation")]
[assembly: IgnoresAccessChecksTo("Untitled.ConfigDataBuilder.Base")]
[assembly: AssemblyCompany("CustomJadebox")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("CustomJadebox")]
[assembly: AssemblyTitle("CustomJadebox")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace CustomJadebox
{
[BepInPlugin("crystalcreation.customjadebox", "customjadebox", "1.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInProcess("LBoL.exe")]
public class BepinexPlugin : BaseUnityPlugin
{
private static readonly Harmony harmony = PInfo.harmony;
internal static ManualLogSource log;
internal static TemplateSequenceTable sequenceTable = new TemplateSequenceTable(0);
internal static IResourceSource embeddedSource = (IResourceSource)new EmbeddedSource(Assembly.GetExecutingAssembly());
internal static DirectorySource directorySource = new DirectorySource("crystalcreation.customjadebox", "");
public static BatchLocalization JadeboxBatchLoc = new BatchLocalization((IResourceSource)(object)directorySource, typeof(JadeBoxTemplate), "Jadeboxes", (Locale)0, false);
private void Awake()
{
log = ((BaseUnityPlugin)this).Logger;
Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
EntityManager.RegisterSelf();
harmony.PatchAll();
if (Chainloader.PluginInfos.ContainsKey("neo.lbol.tools.watermark"))
{
WatermarkWrapper.ActivateWatermark();
}
}
private void OnDestroy()
{
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
}
public class AllVulnerable
{
public sealed class WorldOfHurtDef : JadeBoxTemplate
{
[EntityLogic(typeof(WorldOfHurtDef))]
public sealed class GetWorldOfHurt : JadeBox
{
protected override void OnEnterBattle()
{
((JadeBox)this).ReactBattleEvent<UnitEventArgs>(((Unit)((JadeBox)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnBattleStarted);
}
private IEnumerable<BattleAction> OnBattleStarted(GameEventArgs args)
{
PlayerUnit player = ((JadeBox)this).Battle.Player;
if (((Unit)((JadeBox)this).Battle.Player).TurnCounter == 1)
{
((JadeBox)this).NotifyActivating();
int level = spiritGain - ((GameEntity)this).GameRun._stageIndex;
if (level >= 1)
{
yield return (BattleAction)(object)new ApplyStatusEffectAction<Spirit>((Unit)(object)player, (int?)level, (int?)null, (int?)null, (int?)null, 0f, true);
}
}
yield return (BattleAction)(object)new ApplyStatusEffectAction<Vulnerable>((Unit)(object)player, (int?)null, (int?)1, (int?)null, (int?)null, 0f, true);
foreach (EnemyUnit enemy in ((JadeBox)this).Battle.AllAliveEnemies)
{
yield return (BattleAction)(object)new ApplyStatusEffectAction<Vulnerable>((Unit)(object)enemy, (int?)null, (int?)1, (int?)null, (int?)null, 0f, true);
}
}
protected override void OnGain(GameRunController gameRun)
{
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(GainExhibits(gameRun));
}
private IEnumerator GainExhibits(GameRunController gameRun)
{
HashSet<Type> exhibit = new HashSet<Type> { typeof(Fengrenji) };
foreach (Type et in exhibit)
{
yield return gameRun.GainExhibitRunner(Library.CreateExhibit(et), false, (VisualSourceData)null);
}
gameRun.ExhibitPool.RemoveAll((Type e) => exhibit.Contains(e));
}
}
private static int spiritGain = 4;
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetWorldOfHurt");
}
public override JadeBoxConfig MakeConfig()
{
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Value1 = spiritGain;
return val;
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
}
}
public class NeutralOnly
{
public sealed class ForgetYourNameDef : JadeBoxTemplate
{
[EntityLogic(typeof(ForgetYourNameDef))]
public sealed class ForgetYourName : JadeBox
{
[HarmonyPatch]
private class GameRunController_RollCards_Patch
{
private static IEnumerable<MethodBase> TargetMethods()
{
return (from m in AccessTools.GetDeclaredMethods(typeof(GameRunController))
where m.Name == "RollCards"
select m).ToList();
}
private static void Prefix(ref CardWeightTable weightTable, GameRunController __instance)
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected O, but got Unknown
CheckJadeboxes(__instance);
if (neutralOnlyActive && !synestasiaActive)
{
weightTable = new CardWeightTable(weightTable.RarityTable, OwnerWeightTable.OnlyNeutral, weightTable.CardTypeTable, false);
}
}
}
[HarmonyPatch(typeof(Debut), "ExchangeExhibit")]
private class BanExhibitSwap_Patch
{
private static void Prefix(Debut __instance)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
CheckJadeboxes(((Adventure)__instance).GameRun);
if (neutralOnlyActive)
{
GameRunController currentGameRun = Singleton<GameMaster>.Instance.CurrentGameRun;
currentGameRun.LoseBaseMana(ManaGroup.Single((ManaColor)7), false);
}
}
}
private static bool neutralOnlyActive;
private static bool synestasiaActive;
private static bool fullPowerActive;
protected override void OnGain(GameRunController gameRun)
{
SetBaseMana(gameRun);
}
private static void SetBaseMana(GameRunController gameRun)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
gameRun.BaseMana = ManaGroup.Empty;
int num = 5;
CheckJadeboxes(gameRun);
if (fullPowerActive)
{
num = 4;
Exhibit val = Library.CreateExhibit(((int)gameRun.PlayerType != 0) ? gameRun.Player.Config.ExhibitB : gameRun.Player.Config.ExhibitA);
Debug.Log((object)("primary exhibit: " + ((GameEntity)val).Name));
gameRun.GainBaseMana(BaseManaGroup.op_Implicit(val.BaseMana), false);
}
for (int i = 0; i < num; i++)
{
gameRun.GainBaseMana(ManaGroup.Single((ManaColor)7), false);
}
int rewardAndShopCardColorLimitFlag = gameRun.RewardAndShopCardColorLimitFlag;
gameRun.RewardAndShopCardColorLimitFlag = rewardAndShopCardColorLimitFlag + 1;
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(ResetDeck(gameRun));
}
private static IEnumerator ResetDeck(GameRunController gameRun)
{
yield return null;
ResetStart50.ResetStart50Deck(gameRun);
}
private static void Init(GameRunController gameRun)
{
int rewardAndShopCardColorLimitFlag = gameRun.RewardAndShopCardColorLimitFlag;
gameRun.RewardAndShopCardColorLimitFlag = rewardAndShopCardColorLimitFlag + 1;
rewardAndShopCardColorLimitFlag = gameRun.AdditionalRewardCardCount;
gameRun.AdditionalRewardCardCount = rewardAndShopCardColorLimitFlag + 1;
}
protected override void OnAdded()
{
Init(((GameEntity)this).GameRun);
}
private static void CheckJadeboxes(GameRunController run)
{
neutralOnlyActive = false;
synestasiaActive = false;
fullPowerActive = false;
try
{
if (run == null)
{
Debug.Log((object)"game run controller is null");
return;
}
IReadOnlyList<JadeBox> jadeBoxes = run.JadeBoxes;
if (jadeBoxes != null && jadeBoxes.Count > 0)
{
neutralOnlyActive = run.JadeBoxes.Any((JadeBox jb) => jb is ForgetYourName);
synestasiaActive = run.JadeBoxes.Any((JadeBox jb) => jb is AllCharacterCards);
fullPowerActive = run.JadeBoxes.Any((JadeBox jb) => jb is TwoColorStart);
}
}
catch (Exception ex)
{
Debug.LogError((object)("Error when checking jadeboxes in Forget your name: " + ex.Message + ex.StackTrace));
}
}
}
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("ForgetYourName");
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
public override JadeBoxConfig MakeConfig()
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Mana = ManaGroup.Single((ManaColor)7);
return val;
}
}
}
public static class PInfo
{
public const string GUID = "crystalcreation.customjadebox";
public const string Name = "customjadebox";
public const string version = "1.0.0";
public static readonly Harmony harmony = new Harmony("crystalcreation.customjadebox");
}
internal class WatermarkWrapper
{
[MethodImpl(MethodImplOptions.NoInlining)]
internal static void ActivateWatermark()
{
API.ActivateWatermark();
}
}
}
namespace CustomJadebox.Util
{
public class ResetStart50
{
public static bool ResetStart50Deck(GameRunController run)
{
//IL_015d: Unknown result type (might be due to invalid IL or missing references)
//IL_0164: Unknown result type (might be due to invalid IL or missing references)
//IL_017b: Expected O, but got Unknown
if (run == null)
{
return false;
}
IReadOnlyList<JadeBox> jadeBoxes = run.JadeBoxes;
bool flag = false;
bool flag2 = false;
bool flag3 = false;
if (jadeBoxes != null && jadeBoxes.Count > 0)
{
flag = run.JadeBoxes.Any((JadeBox jb) => jb is NeutralOnly.ForgetYourNameDef.ForgetYourName);
flag2 = run.JadeBoxes.Any((JadeBox jb) => jb is AllCharacterCards);
flag3 = run.JadeBoxes.Any((JadeBox jb) => jb is OnlyRare.OnlyRareDef.OnlyRareJadebox);
}
if (jadeBoxes != null && jadeBoxes.Count > 0)
{
foreach (JadeBox item in jadeBoxes)
{
if (!(item is Start50))
{
continue;
}
run.RemoveDeckCards((IEnumerable<Card>)run.BaseDeck, false);
for (int i = 0; i < item.Value1; i++)
{
OwnerWeightTable val = OwnerWeightTable.Valid;
RarityWeightTable val2 = RarityWeightTable.EnemyCard;
if (flag && !flag2)
{
val = OwnerWeightTable.OnlyNeutral;
}
if (flag3)
{
val2 = RarityWeightTable.OnlyRare;
}
Card[] array = run.RollCards(run.CardRng, new CardWeightTable(val2, val, CardTypeWeightTable.CanBeLoot, false), 1, (ManaGroup?)run.BaseMana, !flag, false, false, false, (Predicate<CardConfig>)null);
run.AddDeckCards((IEnumerable<Card>)array, false, (VisualSourceData)null);
}
return true;
}
}
return false;
}
}
}
namespace CustomJadebox.JadeBoxes
{
public class AllExtraTurns
{
public sealed class AllExtraTurnsDef : JadeBoxTemplate
{
[EntityLogic(typeof(AllExtraTurnsDef))]
public sealed class GetAllExtraTurns : JadeBox
{
protected override void OnEnterBattle()
{
((JadeBox)this).ReactBattleEvent<UnitEventArgs>(((Unit)((JadeBox)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnBattleStarted);
}
private IEnumerable<BattleAction> OnBattleStarted(GameEventArgs args)
{
PlayerUnit player = ((JadeBox)this).Battle.Player;
if (((Unit)player).IsExtraTurn)
{
yield break;
}
yield return (BattleAction)(object)new ApplyStatusEffectAction<ExtraTurn>((Unit)(object)player, (int?)1, (int?)null, (int?)null, (int?)null, 0f, true);
foreach (EnemyUnit enemy in ((JadeBox)this).Battle.AllAliveEnemies)
{
yield return (BattleAction)(object)new ApplyStatusEffectAction<ExtraTurn>((Unit)(object)enemy, (int?)1, (int?)null, (int?)null, (int?)null, 0f, true);
}
}
protected override void OnGain(GameRunController gameRun)
{
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(GainExhibits(gameRun));
}
private IEnumerator GainExhibits(GameRunController gameRun)
{
HashSet<Type> exhibit = new HashSet<Type> { typeof(Yueshan) };
foreach (Type et in exhibit)
{
yield return gameRun.GainExhibitRunner(Library.CreateExhibit(et), false, (VisualSourceData)null);
}
gameRun.ExhibitPool.RemoveAll((Type e) => exhibit.Contains(e));
}
}
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetAllExtraTurns");
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
public override JadeBoxConfig MakeConfig()
{
return ((JadeBoxTemplate)this).DefaultConfig();
}
}
}
public class AllShinies
{
public sealed class AllShiniesDef : JadeBoxTemplate
{
[EntityLogic(typeof(AllShiniesDef))]
public sealed class GetAllShinies : JadeBox
{
private class CoroutineExtender : IEnumerable
{
public IEnumerator target_enumerator;
public List<IEnumerator> preItems = new List<IEnumerator>();
public List<IEnumerator> postItems = new List<IEnumerator>();
public List<IEnumerator> midItems = new List<IEnumerator>();
public CoroutineExtender()
{
}
public CoroutineExtender(IEnumerator target_enumerator)
{
this.target_enumerator = target_enumerator;
}
public IEnumerator GetEnumerator()
{
foreach (IEnumerator preItem in preItems)
{
yield return preItem;
}
int i = 0;
while (target_enumerator.MoveNext())
{
yield return target_enumerator.Current;
i++;
}
foreach (IEnumerator postItem in postItems)
{
yield return postItem;
}
}
}
[HarmonyPatch(typeof(Exhibit), "TriggerGain")]
private class Exhibit_Patch
{
private static void Postfix(ref IEnumerator __result)
{
CoroutineExtender coroutineExtender = new CoroutineExtender(__result);
coroutineExtender.postItems.Add(GainOtherShinies());
__result = coroutineExtender.GetEnumerator();
}
private static IEnumerator GainOtherShinies()
{
if (!((Object)(object)Singleton<GameMaster>.Instance != (Object)null) || Singleton<GameMaster>.Instance.CurrentGameRun == null || !AllShiniesJadebox(Singleton<GameMaster>.Instance.CurrentGameRun))
{
yield break;
}
Debug.Log((object)"start gaining shinies");
GameRunController run = Singleton<GameMaster>.Instance.CurrentGameRun;
if (run.CurrentStation == null || (int)run.CurrentStation.Type != 10)
{
yield break;
}
string bossName = ((BossStation)run.CurrentStation).BossId;
if (!bossesDone.Contains(bossName))
{
bossesDone.Add(bossName);
Exhibit[] exhibitList = ((BossStation)run.CurrentStation).BossRewards;
Exhibit[] array = exhibitList;
foreach (Exhibit exhibit in array)
{
if (!run.Player.Exhibits.Contains(exhibit))
{
Debug.Log((object)("gaining exhibit " + (object)exhibit));
yield return run.GainExhibitRunner(exhibit, false, (VisualSourceData)null);
}
else
{
run.GainBaseMana(ManaGroup.Colorlesses(1), false);
}
yield return null;
run.LoseBaseMana(BaseManaGroup.op_Implicit(exhibit.BaseMana), false);
}
}
else
{
Debug.Log((object)("already gained exhibit from boss: " + bossName));
}
}
}
private static List<string> bossesDone = new List<string>();
protected override void OnGain(GameRunController run)
{
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(RemoveFromPool(run));
bossesDone = new List<string>();
}
protected override void OnAdded()
{
bossesDone = new List<string>();
}
private IEnumerator RemoveFromPool(GameRunController gameRun)
{
if (gameRun == null)
{
yield break;
}
HashSet<Type> exhibit = new HashSet<Type>
{
typeof(YizangnuoWuzhi),
typeof(QipaiYouhua),
typeof(HuiyeBaoxiang),
typeof(LouguanJian)
};
foreach (Type item in exhibit)
{
Debug.Log((object)("removing from pool: " + item.Name + " was in pool: " + gameRun.ShiningExhibitPool.Contains(item)));
}
gameRun.ShiningExhibitPool.RemoveAll((Type e) => exhibit.Contains(e));
yield return null;
}
public static bool AllShiniesJadebox(GameRunController run)
{
if (run == null)
{
return false;
}
IReadOnlyList<JadeBox> jadeBoxes = run.JadeBoxes;
if (jadeBoxes != null && jadeBoxes.Count > 0 && run.JadeBoxes.Any((JadeBox jb) => jb is GetAllShinies))
{
return true;
}
return false;
}
}
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetAllShinies");
}
public override JadeBoxConfig MakeConfig()
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Mana = ManaGroup.Single((ManaColor)6);
return val;
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
}
}
public class AllUpgraded
{
public sealed class AllUpgradedDef : JadeBoxTemplate
{
[EntityLogic(typeof(AllUpgradedDef))]
public sealed class AllUpgradedJadebox : JadeBox
{
protected override void OnEnterBattle()
{
((JadeBox)this).ReactBattleEvent<UnitEventArgs>(((Unit)((JadeBox)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnBattleStarted);
}
private IEnumerable<BattleAction> OnBattleStarted(GameEventArgs args)
{
if (((Unit)((JadeBox)this).Battle.Player).TurnCounter != 1)
{
yield break;
}
((JadeBox)this).NotifyActivating();
foreach (EnemyUnit enemy in ((JadeBox)this).Battle.AllAliveEnemies)
{
yield return (BattleAction)(object)new ApplyStatusEffectAction<LoveGirlDamageReduce>((Unit)(object)enemy, (int?)regretsGain, (int?)null, (int?)null, (int?)null, 0f, false);
yield return (BattleAction)(object)new ApplyStatusEffectAction<Firepower>((Unit)(object)enemy, (int?)firepowerGain, (int?)null, (int?)null, (int?)null, 0f, true);
}
}
protected override void OnGain(GameRunController gameRun)
{
UpgradeAllCards();
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(RemoveFromPool(gameRun));
}
protected override void OnAdded()
{
((JadeBox)this).HandleGameRunEvent<CardsEventArgs>(((GameEntity)this).GameRun.DeckCardsAdded, (GameEventHandler<CardsEventArgs>)OnDeckCardAdded);
}
public void OnDeckCardAdded(CardsEventArgs args)
{
try
{
UpgradeAllCards();
}
catch (Exception ex)
{
Debug.LogError((object)(" exception in OnDeckCardAdded: " + ex.Message + ex.StackTrace));
}
}
private void UpgradeAllCards()
{
try
{
Debug.Log((object)("cards in deck: " + ((GameEntity)this).GameRun.BaseDeck.Count));
foreach (Card item in ((GameEntity)this).GameRun.BaseDeck)
{
if (item.CanUpgrade && item.CanUpgradeAndPositive && !item.IsUpgraded)
{
item.Upgrade();
}
}
}
catch (Exception ex)
{
Debug.LogError((object)(" exception in UpgradeAllCards: " + ex.Message + ex.StackTrace));
}
}
private IEnumerator RemoveFromPool(GameRunController gameRun)
{
HashSet<Type> exhibit = new HashSet<Type>
{
typeof(Chaidao),
typeof(Fengrenji),
typeof(Jiaobu),
typeof(Shoubiao),
typeof(Shouyinji),
typeof(Zixingche)
};
gameRun.ExhibitPool.RemoveAll((Type e) => exhibit.Contains(e));
yield return null;
}
}
private static int firepowerGain = 2;
private static int regretsGain = 1;
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("AllUpgradedJadebox");
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
public override JadeBoxConfig MakeConfig()
{
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Value1 = firepowerGain;
val.Value2 = regretsGain;
return val;
}
}
}
public class CardLimit
{
public sealed class CardLimitDef : JadeBoxTemplate
{
[EntityLogic(typeof(CardLimitDef))]
public sealed class GetCardLimit : JadeBox
{
protected override void OnEnterBattle()
{
((JadeBox)this).ReactBattleEvent<UnitEventArgs>(((Unit)((JadeBox)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnBattleStarted);
}
private IEnumerable<BattleAction> OnBattleStarted(GameEventArgs args)
{
int shiningCount = 0;
PlayerUnit player = ((JadeBox)this).Battle.Player;
foreach (Exhibit item in player.Exhibits)
{
if ((int)item.Config.Rarity == 3)
{
shiningCount++;
}
}
ManaGroup val = default(ManaGroup);
((ManaGroup)(ref val)).Philosophy = shiningCount;
yield return (BattleAction)new GainManaAction(val);
bool alreadyCharmed = false;
foreach (StatusEffect item2 in ((Unit)player).StatusEffects)
{
if (((object)item2).GetType() == typeof(FoxCharm))
{
alreadyCharmed = true;
break;
}
}
if (!alreadyCharmed)
{
yield return (BattleAction)(object)new ApplyStatusEffectAction<FoxCharm>((Unit)(object)player, (int?)null, (int?)null, (int?)null, (int?)cardLimit, 0f, true);
}
}
}
public static int cardLimit = 5;
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetCardLimit");
}
public override JadeBoxConfig MakeConfig()
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Value1 = cardLimit;
val.Mana = ManaGroup.Single((ManaColor)7);
return val;
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
}
}
public class ChromaShift
{
public sealed class ChromaShiftDef : JadeBoxTemplate
{
[EntityLogic(typeof(ChromaShiftDef))]
public sealed class GetChromaShift : JadeBox
{
private static Exhibit selectedExhibit;
private static Exhibit secondaryExhibit;
protected override void OnGain(GameRunController gameRun)
{
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(GainExhibit(gameRun));
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(SetMana(gameRun));
}
private static IEnumerator GainExhibit(GameRunController gameRun)
{
List<Type> exhibits = new List<Type>
{
typeof(CirnoG),
typeof(CirnoU),
typeof(MarisaB),
typeof(MarisaR),
typeof(ReimuR),
typeof(ReimuW),
typeof(SakuyaU),
typeof(SakuyaW)
};
RandomGen rng = gameRun.AdventureRng;
List<Type> toRemove = new List<Type>();
for (int j = 0; j < exhibits.Count; j++)
{
Type ex = exhibits[j];
ManaGroup baseMana = gameRun.BaseMana;
if (((ManaGroup)(ref baseMana)).HasColor(Library.CreateExhibit(ex).Config.BaseManaColor.Value))
{
toRemove.Add(ex);
}
}
foreach (Type ex3 in toRemove)
{
exhibits.Remove(ex3);
}
int removeCount = exhibits.Count - 1;
for (int i = 0; i < removeCount; i++)
{
int remove = rng.NextInt(0, exhibits.Count - 1);
exhibits.RemoveAt(remove);
}
foreach (Type ex2 in exhibits)
{
Debug.Log((object)("giving exhibit: " + ex2.Name));
selectedExhibit = Library.CreateExhibit(ex2);
yield return gameRun.GainExhibitRunner(selectedExhibit, true, (VisualSourceData)null);
}
gameRun.ExhibitPool.RemoveAll((Type e) => exhibits.Contains(e));
}
private static IEnumerator SetMana(GameRunController gameRun)
{
yield return null;
gameRun.LoseBaseMana(BaseManaGroup.op_Implicit(selectedExhibit.BaseMana), false);
secondaryExhibit = Library.CreateExhibit(((int)gameRun.PlayerType == 0) ? gameRun.Player.Config.ExhibitB : gameRun.Player.Config.ExhibitA);
Debug.Log((object)("players other exhibit: " + ((GameEntity)secondaryExhibit).Name));
ManaColor colorToRemove = secondaryExhibit.Config.BaseManaColor.Value;
ManaGroup baseMana = gameRun.BaseMana;
int manaCount = ((ManaGroup)(ref baseMana)).GetValue(colorToRemove);
Debug.Log((object)("about to remove: " + manaCount + " mana of color: " + ManaColorExtensions.ToLongName(colorToRemove)));
for (int i = 0; i < manaCount; i++)
{
gameRun.LoseBaseMana(BaseManaGroup.op_Implicit(secondaryExhibit.BaseMana), false);
gameRun.GainBaseMana(BaseManaGroup.op_Implicit(selectedExhibit.BaseMana), false);
}
yield return null;
ReplaceCards(gameRun);
}
private static void ReplaceCards(GameRunController gameRun)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
if (ResetStart50.ResetStart50Deck(gameRun))
{
return;
}
List<Card> list = new List<Card>();
ManaColor value = secondaryExhibit.Config.BaseManaColor.Value;
foreach (Card item in gameRun.BaseDeck)
{
if (item.Config.Colors.Contains(value) && item.IsBasic)
{
list.Add(item);
}
}
for (int i = 0; i < list.Count; i++)
{
GetBasicForExhibit(gameRun);
}
foreach (Card item2 in list)
{
gameRun.RemoveDeckCard(item2, true);
}
}
private static void GetBasicForExhibit(GameRunController gameRun)
{
Debug.Log((object)("about to add card for selected exhibit: " + ((GameEntity)selectedExhibit).Name));
if (selectedExhibit is CirnoG)
{
gameRun.AddDeckCards((IEnumerable<Card>)Library.CreateCards<CirnoBlockG>(1, false), false, (VisualSourceData)null);
return;
}
if (selectedExhibit is CirnoU)
{
gameRun.AddDeckCards((IEnumerable<Card>)Library.CreateCards<CirnoBlockU>(1, false), false, (VisualSourceData)null);
return;
}
if (selectedExhibit is MarisaB)
{
gameRun.AddDeckCards((IEnumerable<Card>)Library.CreateCards<MarisaBlockB>(1, false), false, (VisualSourceData)null);
return;
}
if (selectedExhibit is MarisaR)
{
gameRun.AddDeckCards((IEnumerable<Card>)Library.CreateCards<MarisaBlockR>(1, false), false, (VisualSourceData)null);
return;
}
if (selectedExhibit is ReimuR)
{
gameRun.AddDeckCards((IEnumerable<Card>)Library.CreateCards<ReimuBlockR>(1, false), false, (VisualSourceData)null);
return;
}
if (selectedExhibit is ReimuW)
{
gameRun.AddDeckCards((IEnumerable<Card>)Library.CreateCards<ReimuBlockW>(1, false), false, (VisualSourceData)null);
return;
}
if (selectedExhibit is SakuyaU)
{
gameRun.AddDeckCards((IEnumerable<Card>)Library.CreateCards<SakuyaBlockU>(1, false), false, (VisualSourceData)null);
return;
}
if (selectedExhibit is SakuyaW)
{
gameRun.AddDeckCards((IEnumerable<Card>)Library.CreateCards<SakuyaBlockW>(1, false), false, (VisualSourceData)null);
return;
}
gameRun.AddDeckCards((IEnumerable<Card>)Library.CreateCards<ReimuBlockR>(1, true), false, (VisualSourceData)null);
Debug.LogError((object)("cant find card for selected exhibit: " + ((GameEntity)selectedExhibit).Name));
}
}
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetChromaShift");
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
public override JadeBoxConfig MakeConfig()
{
return ((JadeBoxTemplate)this).DefaultConfig();
}
}
}
public class DefenseBuff
{
public sealed class DefenseBuffDef : JadeBoxTemplate
{
[EntityLogic(typeof(DefenseBuffDef))]
public sealed class GetDefenseBuff : JadeBox
{
protected override void OnEnterBattle()
{
((JadeBox)this).ReactBattleEvent<UnitEventArgs>(((Unit)((JadeBox)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnBattleStarted);
}
private IEnumerable<BattleAction> OnBattleStarted(GameEventArgs args)
{
PlayerUnit player = ((JadeBox)this).Battle.Player;
if (((Unit)((JadeBox)this).Battle.Player).TurnCounter == 1)
{
((JadeBox)this).NotifyActivating();
yield return (BattleAction)(object)new ApplyStatusEffectAction<Spirit>((Unit)(object)player, (int?)statusGain, (int?)null, (int?)null, (int?)null, 0f, true);
yield return (BattleAction)(object)new ApplyStatusEffectAction<FirepowerNegative>((Unit)(object)player, (int?)statusGain, (int?)null, (int?)null, (int?)null, 0f, true);
}
}
private static void Init(GameRunController gameRun)
{
int additionalRewardCardCount = gameRun.AdditionalRewardCardCount;
gameRun.AdditionalRewardCardCount = additionalRewardCardCount + 1;
}
protected override void OnAdded()
{
Init(((GameEntity)this).GameRun);
}
}
private static int statusGain = 4;
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetDefenseBuff");
}
public override JadeBoxConfig MakeConfig()
{
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Value1 = statusGain;
return val;
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
}
}
public class GapActivities
{
public sealed class GapActivitiesDef : JadeBoxTemplate
{
[EntityLogic(typeof(GapActivitiesDef))]
public sealed class GetGapActivities : JadeBox
{
[HarmonyPatch]
private class UpgradeDeckCardPrice_Patch
{
private static IEnumerable<MethodBase> TargetMethods()
{
yield return AccessTools.PropertyGetter(typeof(GameRunController), "UpgradeDeckCardPrice");
}
private static void Postfix(ref int __result)
{
if (IsGapActivityJadebox())
{
__result = newUpgradePrice;
}
}
}
[HarmonyPatch(typeof(GapStation), "OnEnter")]
private class GapStation_OnEnter_Patch
{
private static void Postfix(GapStation __instance)
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
if (IsGapActivityJadebox())
{
UpgradeCard val = (UpgradeCard)__instance.GapOptions.Find((GapOption g) => g is UpgradeCard);
if (val != null)
{
val.Price = newUpgradePrice;
}
else
{
Debug.Log((object)"could not find gap upgrade option");
}
}
}
}
protected override void OnGain(GameRunController gameRun)
{
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(GainExhibits(gameRun));
}
private IEnumerator GainExhibits(GameRunController gameRun)
{
List<Type> exhibits = new List<Type>
{
typeof(Baota),
typeof(Saiqianxiang),
typeof(ShanliangDengpao),
typeof(ShoushiYubi),
typeof(Xunlongchi)
};
RandomGen rng = gameRun.AdventureRng;
int removeCount = exhibits.Count - exibitsToGain;
for (int i = 0; i < removeCount; i++)
{
int remove = rng.NextInt(0, exhibits.Count - 1);
exhibits.RemoveAt(remove);
}
foreach (Type ex in exhibits)
{
yield return gameRun.GainExhibitRunner(Library.CreateExhibit(ex), true, (VisualSourceData)null);
}
gameRun.ExhibitPool.RemoveAll((Type e) => exhibits.Contains(e));
}
private static bool IsGapActivityJadebox()
{
GameRunController currentGameRun = Singleton<GameMaster>.Instance.CurrentGameRun;
IReadOnlyList<JadeBox> jadeBoxes = currentGameRun.JadeBoxes;
if (jadeBoxes != null && jadeBoxes.Count > 0 && currentGameRun.JadeBoxes.Any((JadeBox jb) => jb is GetGapActivities))
{
return true;
}
return false;
}
}
private static int exibitsToGain = 2;
private static int newUpgradePrice = 100;
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetGapActivities");
}
public override JadeBoxConfig MakeConfig()
{
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Value1 = exibitsToGain;
val.Value2 = newUpgradePrice;
return val;
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
}
}
public class IntoTheVoid
{
public sealed class IntoTheVoidDef : JadeBoxTemplate
{
[EntityLogic(typeof(IntoTheVoidDef))]
public sealed class GetIntoTheVoid : JadeBox
{
protected override void OnEnterBattle()
{
((JadeBox)this).ReactBattleEvent<UnitEventArgs>(((Unit)((JadeBox)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnBattleStarted);
}
private IEnumerable<BattleAction> OnBattleStarted(GameEventArgs args)
{
if (((Unit)((JadeBox)this).Battle.Player).TurnCounter == 1)
{
List<Card> list = ((JadeBox)this).Battle.DrawZone.ToList();
list.AddRange(((JadeBox)this).Battle.HandZone);
if (list.Count > 0)
{
SetupCards(list);
}
((JadeBox)this).HandleBattleEvent<CardsEventArgs>(((JadeBox)this).Battle.CardsAddedToDiscard, (GameEventHandler<CardsEventArgs>)OnAddCard);
((JadeBox)this).HandleBattleEvent<CardsEventArgs>(((JadeBox)this).Battle.CardsAddedToHand, (GameEventHandler<CardsEventArgs>)OnAddCard);
((JadeBox)this).HandleBattleEvent<CardsEventArgs>(((JadeBox)this).Battle.CardsAddedToExile, (GameEventHandler<CardsEventArgs>)OnAddCard);
((JadeBox)this).HandleBattleEvent<CardsAddingToDrawZoneEventArgs>(((JadeBox)this).Battle.CardsAddedToDrawZone, (GameEventHandler<CardsAddingToDrawZoneEventArgs>)OnAddCardToDraw);
}
yield return null;
}
private void SetupCards(List<Card> list)
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
foreach (Card item in list)
{
if (!item.IsForbidden && !item.IsBasic)
{
ManaGroup cost = item.Cost;
if (((ManaGroup)(ref cost)).Amount > 0)
{
cost = item.Cost;
item.DecreaseBaseCost(ManaGroup.FromComponents((IEnumerable<ManaColor>)CollectionsExtensions.SampleManyOrAll<ManaColor>(((ManaGroup)(ref cost)).EnumerateComponents(), 1, ((GameEntity)this).GameRun.BattleRng)));
}
item.IsExile = true;
item.NotifyActivating();
}
}
}
private void OnAddCardToDraw(CardsAddingToDrawZoneEventArgs args)
{
SetupCards(args.Cards.ToList());
}
public void OnAddCard(CardsEventArgs args)
{
SetupCards(args.Cards.ToList());
}
}
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetIntoTheVoid");
}
public override JadeBoxConfig MakeConfig()
{
return ((JadeBoxTemplate)this).DefaultConfig();
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
}
}
public class OnlyRare
{
public sealed class OnlyRareDef : JadeBoxTemplate
{
[EntityLogic(typeof(OnlyRareDef))]
public sealed class OnlyRareJadebox : JadeBox
{
[HarmonyPatch]
private class GameRunController_RollCards_Patch
{
private static IEnumerable<MethodBase> TargetMethods()
{
return (from m in AccessTools.GetDeclaredMethods(typeof(GameRunController))
where m.Name == "RollCards"
select m).ToList();
}
private static void Prefix(ref CardWeightTable weightTable, GameRunController __instance)
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Expected O, but got Unknown
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
if (IsOnlyRareJadebox(__instance))
{
if (IsInShopStation(__instance) && weightTable.CardTypeTable != CardTypeWeightTable.OnlyTool)
{
weightTable = new CardWeightTable(RarityWeightTable.OnlyRare, weightTable.OwnerTable, CardTypeWeightTable.CanBeLoot, false);
}
else
{
weightTable = new CardWeightTable(RarityWeightTable.OnlyRare, weightTable.OwnerTable, weightTable.CardTypeTable, false);
}
}
}
}
[HarmonyPatch(typeof(StartGamePanel), "Awake")]
private class StartGamePanel_Awake_Patch
{
private static void Postfix(ref StartGamePanel __instance)
{
try
{
JadeBoxToggle onlyRareToggle = null;
JadeBoxToggle noRareToggle = null;
foreach (KeyValuePair<JadeBox, JadeBoxToggle> jadeBoxToggle in __instance._jadeBoxToggles)
{
if (((object)jadeBoxToggle.Value.JadeBox).GetType() == typeof(OnlyRareJadebox))
{
Debug.Log((object)"found only rare toggle");
onlyRareToggle = jadeBoxToggle.Value;
}
if (((object)jadeBoxToggle.Value.JadeBox).GetType() == typeof(NoRareCard))
{
Debug.Log((object)"found no rare toggle");
noRareToggle = jadeBoxToggle.Value;
}
}
if (!((Object)(object)onlyRareToggle != (Object)null) || !((Object)(object)noRareToggle != (Object)null))
{
return;
}
((UnityEvent<bool>)(object)onlyRareToggle.Toggle.onValueChanged).AddListener((UnityAction<bool>)delegate
{
Debug.Log((object)"toggled onlyRareToggle");
if ((Object)(object)noRareToggle != (Object)null && noRareToggle.IsOn)
{
Debug.Log((object)"disabling noRareToggle");
noRareToggle.Toggle.SetIsOnWithoutNotify(false);
}
});
((UnityEvent<bool>)(object)noRareToggle.Toggle.onValueChanged).AddListener((UnityAction<bool>)delegate
{
Debug.Log((object)"toggled noRareToggle");
if ((Object)(object)onlyRareToggle != (Object)null && onlyRareToggle.IsOn)
{
Debug.Log((object)"disabling onlyRareToggle");
onlyRareToggle.Toggle.SetIsOnWithoutNotify(false);
}
});
}
catch (Exception ex)
{
Debug.Log((object)("error when checking toggles: " + ex.Message + ex.StackTrace));
}
}
}
protected override void OnGain(GameRunController gameRun)
{
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(ResetDeck(gameRun));
}
private static IEnumerator ResetDeck(GameRunController gameRun)
{
yield return null;
ResetStart50.ResetStart50Deck(gameRun);
}
private static bool IsInShopStation(GameRunController gameRun)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Invalid comparison between Unknown and I4
if (gameRun == null || gameRun.CurrentStation == null)
{
return false;
}
StationType type = gameRun.CurrentStation.Type;
return (int)type == 5;
}
public static bool IsOnlyRareJadebox(GameRunController run)
{
if (run == null)
{
return false;
}
IReadOnlyList<JadeBox> jadeBoxes = run.JadeBoxes;
if (jadeBoxes != null && jadeBoxes.Count > 0 && run.JadeBoxes.Any((JadeBox jb) => jb is OnlyRareJadebox))
{
return true;
}
return false;
}
}
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("OnlyRareJadebox");
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
public override JadeBoxConfig MakeConfig()
{
return ((JadeBoxTemplate)this).DefaultConfig();
}
}
}
public class PurchasePower
{
public sealed class PurchasePowerDef : JadeBoxTemplate
{
[EntityLogic(typeof(PurchasePowerDef))]
public sealed class GetPurchasePower : JadeBox
{
protected override void OnGain(GameRunController gameRun)
{
((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(GainExhibits(gameRun));
}
private IEnumerator GainExhibits(GameRunController gameRun)
{
HashSet<Type> exhibit = new HashSet<Type>
{
typeof(PortalGun),
typeof(Huiyuanka)
};
foreach (Type ex in exhibit)
{
Debug.Log((object)("gaining: " + ex.Name + " was in pool: " + gameRun.ExhibitPool.Contains(ex)));
yield return gameRun.GainExhibitRunner(Library.CreateExhibit(ex), false, (VisualSourceData)null);
}
gameRun.ExhibitPool.RemoveAll((Type e) => exhibit.Contains(e));
}
private static void Init(GameRunController gameRun)
{
gameRun.AdditionalRewardCardCount -= cardReduction;
}
protected override void OnAdded()
{
Init(((GameEntity)this).GameRun);
}
}
private static int cardReduction = 2;
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetPurchasePower");
}
public override JadeBoxConfig MakeConfig()
{
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Value1 = cardReduction;
return val;
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
}
}
public class RareMisfortune
{
public sealed class RareMisfortuneDef : JadeBoxTemplate
{
[EntityLogic(typeof(RareMisfortuneDef))]
public sealed class RareMisfortuneJadebox : JadeBox
{
[HarmonyPatch]
private class GameRunController_RollCards_Patch
{
private static IEnumerable<MethodBase> TargetMethods()
{
return (from m in AccessTools.GetDeclaredMethods(typeof(GameRunController))
where m.Name == "RollCards"
select m).ToList();
}
private static void Prefix(ref CardWeightTable weightTable, GameRunController __instance)
{
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Expected O, but got Unknown
if (IsRareMisfortuneJadebox(__instance) && IsInCombatStation(__instance) && !IsInBattle(__instance))
{
int num = __instance.CardRng.NextInt(1, newRareChance);
Debug.Log((object)("Random number for rare card: " + num));
if (num == newRareChance)
{
weightTable = new CardWeightTable(RarityWeightTable.OnlyRare, weightTable.OwnerTable, weightTable.CardTypeTable, false);
}
}
}
}
protected override void OnAdded()
{
((JadeBox)this).HandleGameRunEvent<CardsEventArgs>(((GameEntity)this).GameRun.DeckCardsAdded, (GameEventHandler<CardsEventArgs>)OnDeckCardAdded);
}
public void OnDeckCardAdded(CardsEventArgs args)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Invalid comparison between Unknown and I4
if ((int)((GameEntity)this).GameRun.BaseDeck.Last().Config.Rarity == 2 && IsInCombatStation(((GameEntity)this).GameRun) && !IsHinaTriggered(((GameEntity)this).GameRun))
{
RandomGen cardRng = ((GameEntity)this).GameRun.CardRng;
((GameEntity)this).GameRun.AddDeckCard(GetRandomCurseCard(cardRng), true, (VisualSourceData)null);
}
}
private static bool IsHinaTriggered(GameRunController gameRun)
{
bool result = false;
foreach (Exhibit exhibit in gameRun.Player.Exhibits)
{
if (exhibit is ChuRenou && exhibit.Counter > 0)
{
int counter = exhibit.Counter;
exhibit.Counter = counter - 1;
result = true;
}
}
return result;
}
private static bool IsInCombatStation(GameRunController gameRun)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Invalid comparison between Unknown and I4
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Invalid comparison between Unknown and I4
if (gameRun == null || gameRun.CurrentStation == null)
{
return false;
}
StationType type = gameRun.CurrentStation.Type;
return (int)type == 1 || (int)type == 2;
}
private static bool IsInBattle(GameRunController gameRun)
{
return gameRun.Battle != null && gameRun.Battle.AllAliveEnemies.Count() > 0;
}
private Card GetRandomCurseCard(RandomGen rng)
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Invalid comparison between Unknown and I4
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Invalid comparison between Unknown and I4
List<Type> list = new List<Type>();
foreach (var (item, val) in Library.EnumerateCardTypes())
{
if ((int)val.Type == 8 && !((Enum)val.Keywords).HasFlag((Enum)(object)(Keyword)16) && (int)val.Rarity == 0)
{
list.Add(item);
}
}
if (list.Count == 0)
{
Debug.Log((object)"No curse card in library found");
return null;
}
return TypeFactory<Card>.CreateInstance(CollectionsExtensions.Sample<Type>((IEnumerable<Type>)list, rng));
}
public static bool IsRareMisfortuneJadebox(GameRunController run)
{
if (run == null)
{
return false;
}
IReadOnlyList<JadeBox> jadeBoxes = run.JadeBoxes;
if (jadeBoxes != null && jadeBoxes.Count > 0 && run.JadeBoxes.Any((JadeBox jb) => jb is RareMisfortuneJadebox))
{
return true;
}
return false;
}
}
private static int newRareChance = 5;
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("RareMisfortuneJadebox");
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
public override JadeBoxConfig MakeConfig()
{
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Value1 = newRareChance;
val.Value2 = 100 / newRareChance;
return val;
}
}
}
public class SellItAll
{
public sealed class SellItAllDef : JadeBoxTemplate
{
[EntityLogic(typeof(SellItAllDef))]
public sealed class SellItAllJadebox : JadeBox
{
private class CoroutineExtender : IEnumerable
{
public IEnumerator target_enumerator;
public List<IEnumerator> preItems = new List<IEnumerator>();
public List<IEnumerator> postItems = new List<IEnumerator>();
public List<IEnumerator> midItems = new List<IEnumerator>();
public CoroutineExtender()
{
}
public CoroutineExtender(IEnumerator target_enumerator)
{
this.target_enumerator = target_enumerator;
}
public IEnumerator GetEnumerator()
{
foreach (IEnumerator preItem in preItems)
{
yield return preItem;
}
int i = 0;
while (target_enumerator.MoveNext())
{
yield return target_enumerator.Current;
i++;
}
foreach (IEnumerator postItem in postItems)
{
yield return postItem;
}
}
}
[HarmonyPatch(typeof(Exhibit), "TriggerGain")]
private class Exhibit_Patch
{
private static void Postfix(ref IEnumerator __result)
{
CoroutineExtender coroutineExtender = new CoroutineExtender(__result);
coroutineExtender.postItems.Add(SellAllExhibits());
__result = coroutineExtender.GetEnumerator();
}
private static IEnumerator SellAllExhibits()
{
if (!((Object)(object)Singleton<GameMaster>.Instance != (Object)null) || !IsSellItAllJadebox(Singleton<GameMaster>.Instance.CurrentGameRun))
{
yield break;
}
GameRunController run = Singleton<GameMaster>.Instance.CurrentGameRun;
List<Exhibit> toRemove = new List<Exhibit>();
foreach (Exhibit ex2 in run.Player.Exhibits)
{
if ((int)ex2.LosableType == 0)
{
GainMoneyWithNullcheck(run, GetExhibitPrice(ex2), triggerVisual: true, new VisualSourceData
{
SourceType = (VisualSourceType)7,
Source = (GameEntity)(object)ex2
});
toRemove.Add(ex2);
}
}
foreach (Exhibit ex in toRemove)
{
run.LoseExhibit(ex, true, true);
}
}
}
[HarmonyPatch]
private class Stage_GetShopExhibit_Patch
{
private static IEnumerable<MethodBase> TargetMethods()
{
return (from m in AccessTools.GetDeclaredMethods(typeof(Stage))
where m.Name == "GetShopExhibit"
select m).ToList();
}
private static void Postfix(ref Exhibit __result)
{
GameRunController currentGameRun = Singleton<GameMaster>.Instance.CurrentGameRun;
if (!IsSellItAllJadebox(currentGameRun) || !IsInShop(currentGameRun))
{
return;
}
int num = currentGameRun.ShopRng.NextInt(1, 100);
Debug.Log((object)("Random number for shop exhibit: " + num));
if (num <= shiningChance)
{
__result = currentGameRun.RollShiningExhibit(currentGameRun.ShinningExhibitRng, (Func<Exhibit>)currentGameRun.CurrentStation.Stage.GetSentinelExhibit, (Predicate<ExhibitConfig>)((ExhibitConfig config) => config != null && (config.Owner == null || (config.Owner != null && !config.Owner.Contains("Koishi") && !config.Owner.Contains("Alice")))));
}
}
}
[HarmonyPatch(typeof(ShopStation), "GetPrice", new Type[] { typeof(Exhibit) })]
private class ShopStation_GetPrice_Patch
{
private static bool Prefix(ref Exhibit exhibit, ref int __result)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Invalid comparison between Unknown and I4
GameRunController currentGameRun = Singleton<GameMaster>.Instance.CurrentGameRun;
if (IsSellItAllJadebox(currentGameRun) && IsInShop(currentGameRun) && (int)exhibit.Config.Rarity == 3)
{
float num = shiningPrice;
float num2 = currentGameRun.ShopRng.NextFloat(-0.08f, 0f) + 1f;
__result = Mathf.RoundToInt(num * num2);
return false;
}
return true;
}
}
private static bool IsInShop(GameRunController gameRun)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Invalid comparison between Unknown and I4
if (gameRun == null || gameRun.CurrentStation == null)
{
return false;
}
StationType type = gameRun.CurrentStation.Type;
return (int)type == 5;
}
public static bool IsSellItAllJadebox(GameRunController run)
{
if (run == null)
{
return false;
}
IReadOnlyList<JadeBox> jadeBoxes = run.JadeBoxes;
if (jadeBoxes != null && jadeBoxes.Count > 0 && run.JadeBoxes.Any((JadeBox jb) => jb is SellItAllJadebox))
{
return true;
}
return false;
}
private static int GetExhibitPrice(Exhibit exhibit)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected I4, but got Unknown
Rarity rarity = exhibit.Config.Rarity;
Rarity val = rarity;
float num = (int)val switch
{
0 => GlobalConfig.ExhibitPrices[0],
1 => GlobalConfig.ExhibitPrices[1],
2 => GlobalConfig.ExhibitPrices[2],
_ => throw new InvalidOperationException("exhibit rarity out of range."),
};
float num2 = Singleton<GameMaster>.Instance.CurrentGameRun.ShopRng.NextFloat(-0.08f, 0f) + 1f;
return Mathf.RoundToInt((float)Mathf.RoundToInt(num * num2) * 60f / 100f);
}
public static void GainMoneyWithNullcheck(GameRunController run, int money, bool triggerVisual = false, VisualSourceData sourceData = null)
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Expected O, but got Unknown
if (run != null)
{
run.InternalGainMoney(money);
IGameRunVisualTrigger visualTrigger = run.VisualTrigger;
if (visualTrigger != null)
{
visualTrigger.OnGainMoney(money, triggerVisual, sourceData);
}
run.MoneyGained?.Execute(new GameEventArgs
{
CanCancel = false
});
}
}
}
private static int shiningChance = 15;
private static int shiningPrice = 500;
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("SellItAllJadebox");
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
public override JadeBoxConfig MakeConfig()
{
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Value1 = shiningChance;
return val;
}
}
}
public class SmallDeck
{
public sealed class SmallDeckDef : JadeBoxTemplate
{
[EntityLogic(typeof(SmallDeckDef))]
public sealed class SmallDeckJadebox : JadeBox
{
protected override void OnAdded()
{
((JadeBox)this).HandleGameRunEvent<CardsEventArgs>(((GameEntity)this).GameRun.DeckCardsAdded, (GameEventHandler<CardsEventArgs>)OnDeckCardAdded);
}
public void OnDeckCardAdded(CardsEventArgs args)
{
List<Card> list = new List<Card>();
foreach (Card item in ((GameEntity)this).GameRun.BaseDeck)
{
if (((GameEntity)this).GameRun.BaseDeck.Count - list.Count > maxDeckSize && !item.Unremovable)
{
list.Add(item);
}
}
foreach (Card item2 in list)
{
((GameEntity)this).GameRun.RemoveDeckCard(item2, true);
}
}
}
public static int maxDeckSize = 15;
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("SmallDeckJadebox");
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
public override JadeBoxConfig MakeConfig()
{
JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
val.Value1 = maxDeckSize;
return val;
}
}
}
public class TreasureHuner
{
public sealed class TreasureHunterDef : JadeBoxTemplate
{
[EntityLogic(typeof(TreasureHunterDef))]
public sealed class GetGetTreasureHuner : JadeBox
{
[HarmonyPatch(typeof(BossStation), "GenerateBossRewards")]
private class BossStation_GenerateBossRewards_Patch
{
private static void Postfix(BossStation __instance)
{
IReadOnlyList<JadeBox> jadeBoxes = ((Station)__instance).GameRun._jadeBoxes;
if (jadeBoxes == null || jadeBoxes.Count <= 0)
{
return;
}
foreach (JadeBox item in jadeBoxes)
{
if (item is GetGetTreasureHuner)
{
SetRewardList(((Station)__instance).GameRun);
Debug.Log((object)("BossStation_GenerateBossRewards_Patch rewardList count: " + treasureRewardList.Count));
__instance.BossRewards = treasureRewardList.ToArray();
break;
}
}
}
}
public static List<Exhibit> treasureRewardList = new List<Exhibit>
{
(Exhibit)(object)Library.CreateExhibit<FoyushiBo>(),
(Exhibit)(object)Library.CreateExhibit<HuoshuPiyi>(),
(Exhibit)(object)Library.CreateExhibit<LongjingYu>()
};
private static void SetRewardList(GameRunController run)
{
RandomGen adventureRng = run.AdventureRng;
List<Exhibit> list = new List<Exhibit>
{
(Exhibit)(object)Library.CreateExhibit<FoyushiBo>(),
(Exhibit)(object)Library.CreateExhibit<HuoshuPiyi>(),
(Exhibit)(object)Library.CreateExhibit<LongjingYu>(),
(Exhibit)(object)Library.CreateExhibit<PenglaiYuzhi>(),
(Exhibit)(object)Library.CreateExhibit<YanZianbei>()
};
foreach (Exhibit item in run.Player.Exhibits)
{
Debug.Log((object)("player has exibit: " + ((GameEntity)item).Name));
if (list.Find((Exhibit i) => ((GameEntity)i).Name == ((GameEntity)item).Name) != null)
{
Debug.Log((object)("removing exibit from reward list: " + ((GameEntity)item).Name));
list.Remove(list.Find((Exhibit i) => ((GameEntity)i).Name == ((GameEntity)item).Name));
}
}
Debug.Log((object)("after remove existing SetRewardList rewardList count: " + list.Count));
if (list.Count > 3)
{
for (int j = 0; list.Count > 3 || j > 3; j++)
{
int index = adventureRng.NextInt(0, list.Count - 1);
Debug.Log((object)("randomly removing at index: " + index));
list.RemoveAt(index);
}
}
else if (list.Count < 3)
{
for (int k = 0; list.Count < 3 || k > 3; k++)
{
list.Add(run.CurrentStage.GetEliteEnemyExhibit());
}
}
treasureRewardList = list;
}
}
public override IdContainer GetId()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return IdContainer.op_Implicit("GetGetTreasureHuner");
}
public override JadeBoxConfig MakeConfig()
{
return ((JadeBoxTemplate)this).DefaultConfig();
}
public override LocalizationOption LoadLocalization()
{
return (LocalizationOption)(object)BepinexPlugin.JadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
}
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
internal IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}