using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.Artifacts;
using UnityEngine;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("AiqueOdio")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Ai Que Odio Difficulty")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+7ee586d7309c338e864996c3039cc0e50bc909ad")]
[assembly: AssemblyProduct("AiqueOdio")]
[assembly: AssemblyTitle("AiqueOdio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace AiqueOdio
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.seuusuario.aiqueodio", "Ai Que Odio Difficulty", "1.1.0")]
public class AiqueOdioPlugin : BaseUnityPlugin
{
public static DifficultyDef AiqueOdioDifficultyDef;
public static DifficultyIndex AiqueOdioDifficultyIndex;
public static Sprite SpriteDificuldade;
public static Sprite SpriteEsmalte;
public static Sprite SpriteEsmalteApagado;
public static ArtifactDef EsmaltePinkArtifactDef;
private static float esmalteTimer = 0f;
private static readonly string[] chatMessages = new string[4] { " Os monstros entraram na puberdade e ganharam um {0}!", " Os monstros estão de TPM e roubaram um {0}!", " Os monstros gritam por atenção empunhando um {0}!", " Os monstros estão no cio e acharam um {0}!" };
private static readonly string[] deathQuotes = new string[8] { "\"AI, QUE MOD DIFÍCIL!!! AI, QUE ÓDIO!!!\"", "\"Nmrl, tem um mod que abre o jogo e aparece 'Vitória', não?\"", "\"Não tem um mod que dá pra jogar enquanto eu durmo não? pprt.\"", "\"Tá a fim de botar na dificuldade Sunny não?\"", "\"Slk, mod mó cota esse, pprt 67\"", "\"Eu vô vê e te aviso o dia que vou entrar de novo, pdc?\"", "\"Experimente tomar cápsulas de ômega 3\"", "\"Mod bucha pprt\"" };
public void Awake()
{
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Expected O, but got Unknown
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Expected O, but got Unknown
Log.Init(((BaseUnityPlugin)this).Logger);
LoadCustomIcons();
RegisterLanguageTokens();
RegisterDifficulty();
RegisterArtifact();
Run.onRunSetRuleBookGlobal += Run_onRunSetRuleBookGlobal;
Run.onRunStartGlobal += Run_onRunStartGlobal;
Stage.onStageStartGlobal += Stage_onStageStartGlobal;
RoR2Application.onFixedUpdate += RoR2Application_onFixedUpdate;
CharacterBody.onBodyStartGlobal += CharacterBody_onBodyStartGlobal;
Language.GetLocalizedStringByToken += new hook_GetLocalizedStringByToken(Language_GetLocalizedStringByToken);
Chat.AddMessage_ChatMessageBase += new hook_AddMessage_ChatMessageBase(Chat_AddMessage_ChatMessageBase);
Log.Info("AI, QUE ÓDIO!!! Tônico na 5 e Microrrobôs na 6 carregados!");
}
private void LoadCustomIcons()
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Expected O, but got Unknown
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Expected O, but got Unknown
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
try
{
using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("AiqueOdio.Dificuldade.png");
if (stream != null)
{
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
Texture2D val = new Texture2D(2, 2);
ImageConversion.LoadImage(val, array);
SpriteDificuldade = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
}
}
catch (Exception ex)
{
Log.Error("Erro ao carregar Dificuldade.png: " + ex.Message);
}
try
{
using Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("AiqueOdio.Esmalte.png");
if (stream2 != null)
{
byte[] array2 = new byte[stream2.Length];
stream2.Read(array2, 0, array2.Length);
Texture2D val2 = new Texture2D(2, 2);
ImageConversion.LoadImage(val2, array2);
SpriteEsmalte = Sprite.Create(val2, new Rect(0f, 0f, (float)((Texture)val2).width, (float)((Texture)val2).height), new Vector2(0.5f, 0.5f));
}
}
catch (Exception ex2)
{
Log.Error("Erro ao carregar Esmalte.png: " + ex2.Message);
}
try
{
using Stream stream3 = Assembly.GetExecutingAssembly().GetManifestResourceStream("AiqueOdio.EsmalteApagado.png");
if (stream3 != null)
{
byte[] array3 = new byte[stream3.Length];
stream3.Read(array3, 0, array3.Length);
Texture2D val3 = new Texture2D(2, 2);
ImageConversion.LoadImage(val3, array3);
SpriteEsmalteApagado = Sprite.Create(val3, new Rect(0f, 0f, (float)((Texture)val3).width, (float)((Texture)val3).height), new Vector2(0.5f, 0.5f));
}
}
catch (Exception ex3)
{
Log.Error("Erro ao carregar EsmalteApagado.png: " + ex3.Message);
}
}
private void RegisterLanguageTokens()
{
LanguageAPI.Add("AIQUEODIO_NAME", "AI, QUE ÓDIO!!!");
LanguageAPI.Add("AIQUEODIO_DESCRIPTION", "ARTEFATO DA AUTORIDADE DEIXA O JOGO MUITO FÁCIL, AI QUE ÓDIO!!!\n>Escalonamento Base: \n>Artefatos Automáticos: ");
LanguageAPI.Add("ESMALTE_PINK_NAME", "Artefato do Esmalte Pink");
LanguageAPI.Add("ESMALTE_PINK_DESCRIPTION", "Monstros ganham e .\nEstágio 2: Itens Verdes ativados.\nEstágio 3: Itens Vermelhos ativados.\nEstágio 4: Itens de Chefe ativados.\nEstágio 5: Tônico Permanente.\nEstágio 6: Microrrobôs.");
}
private void RegisterDifficulty()
{
//IL_0023: 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_0038: Expected O, but got Unknown
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
AiqueOdioDifficultyDef = new DifficultyDef(8f, "AIQUEODIO_NAME", "AIQUEODIO_ICON", "AIQUEODIO_DESCRIPTION", new Color(1f, 0.4f, 0.7f), "od", true);
if ((Object)(object)SpriteDificuldade != (Object)null)
{
AiqueOdioDifficultyDef.foundIconSprite = true;
AiqueOdioDifficultyDef.iconSprite = SpriteDificuldade;
}
AiqueOdioDifficultyIndex = DifficultyAPI.AddDifficulty(AiqueOdioDifficultyDef);
}
private void RegisterArtifact()
{
EsmaltePinkArtifactDef = ScriptableObject.CreateInstance();
EsmaltePinkArtifactDef.cachedName = "ESMALTE_PINK";
EsmaltePinkArtifactDef.nameToken = "ESMALTE_PINK_NAME";
EsmaltePinkArtifactDef.descriptionToken = "ESMALTE_PINK_DESCRIPTION";
if ((Object)(object)SpriteEsmalte != (Object)null)
{
EsmaltePinkArtifactDef.smallIconSelectedSprite = SpriteEsmalte;
}
if ((Object)(object)SpriteEsmalteApagado != (Object)null)
{
EsmaltePinkArtifactDef.smallIconDeselectedSprite = SpriteEsmalteApagado;
}
ContentAddition.AddArtifactDef(EsmaltePinkArtifactDef);
}
private string Language_GetLocalizedStringByToken(orig_GetLocalizedStringByToken orig, Language self, string token)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)Run.instance != (Object)null && Run.instance.selectedDifficulty == AiqueOdioDifficultyIndex && !string.IsNullOrEmpty(token) && token.StartsWith("PLAYER_DEATH_QUOTE_"))
{
int num = Math.Abs(token.GetHashCode()) % deathQuotes.Length;
return deathQuotes[num];
}
return orig.Invoke(self, token);
}
private void Chat_AddMessage_ChatMessageBase(orig_AddMessage_ChatMessageBase orig, ChatMessageBase message)
{
orig.Invoke(message);
SimpleChatMessage val = (SimpleChatMessage)(object)((message is SimpleChatMessage) ? message : null);
if (val != null && !string.IsNullOrEmpty(val.baseToken) && val.baseToken.Contains("#ff69b4") && val.baseToken.Contains("Os monstros"))
{
string text = "Play_UI_ping_danger";
LocalUser firstLocalUser = LocalUserManager.GetFirstLocalUser();
if (firstLocalUser != null && (Object)(object)firstLocalUser.cachedBody != (Object)null)
{
Util.PlaySound(text, ((Component)firstLocalUser.cachedBody).gameObject);
}
else
{
Util.PlaySound(text, ((Component)RoR2Application.instance).gameObject);
}
}
}
private void Run_onRunSetRuleBookGlobal(Run run, RuleBook ruleBook)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
if (run.selectedDifficulty == AiqueOdioDifficultyIndex)
{
Run.ambientLevelCap = int.MaxValue;
}
}
private void Run_onRunStartGlobal(Run run)
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
if (AiqueOdioDifficultyDef != null)
{
AiqueOdioDifficultyDef.scalingValue = 8f;
}
esmalteTimer = 0f;
if (NetworkServer.active && run.selectedDifficulty == AiqueOdioDifficultyIndex)
{
RunArtifactManager.instance.SetArtifactEnabledServer(EsmaltePinkArtifactDef, true);
RunArtifactManager.instance.SetArtifactEnabledServer(Artifacts.MonsterTeamGainsItems, true);
RunArtifactManager.instance.SetArtifactEnabledServer(Artifacts.Command, true);
}
}
private void Stage_onStageStartGlobal(Stage stage)
{
//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_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Expected O, but got Unknown
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Expected O, but got Unknown
if (!NetworkServer.active || ((Object)(object)stage.sceneDef != (Object)null && stage.sceneDef.baseSceneName == "bazaar"))
{
return;
}
if ((Object)(object)Run.instance != (Object)null && Run.instance.selectedDifficulty == AiqueOdioDifficultyIndex)
{
int num = Run.instance.stageClearCount + 1;
string text = (((Object)(object)stage.sceneDef != (Object)null) ? stage.sceneDef.baseSceneName : "");
if (num == 5)
{
Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
{
baseToken = "ALERTA DE ODIO: Os monstros injetaram Tônico Espinélio na veia!"
});
}
if (num == 6 || text.StartsWith("moon"))
{
GiveSpecificItemToMonsters(Items.CaptainDefenseMatrix, 1);
Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
{
baseToken = "ALERTA DE ODIO: Os monstros instalaram Microrrobôs Defensivos!"
});
}
}
if (RunArtifactManager.instance.IsArtifactEnabled(EsmaltePinkArtifactDef))
{
GiveRandomItemToMonsters(3);
}
}
private void CharacterBody_onBodyStartGlobal(CharacterBody body)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Invalid comparison between Unknown and I4
if (NetworkServer.active && (Object)(object)Run.instance != (Object)null && Run.instance.selectedDifficulty == AiqueOdioDifficultyIndex && Object.op_Implicit((Object)(object)body.teamComponent) && (int)body.teamComponent.teamIndex == 2 && Run.instance.stageClearCount + 1 >= 5)
{
body.AddBuff(Buffs.TonicBuff);
}
}
private void RoR2Application_onFixedUpdate()
{
if (NetworkServer.active && !((Object)(object)Run.instance == (Object)null) && !((Object)(object)Stage.instance == (Object)null) && RunArtifactManager.instance.IsArtifactEnabled(EsmaltePinkArtifactDef) && (!((Object)(object)Stage.instance.sceneDef != (Object)null) || !(Stage.instance.sceneDef.baseSceneName == "bazaar")))
{
float num = 60f;
esmalteTimer += Time.fixedDeltaTime;
if (esmalteTimer >= num)
{
esmalteTimer = 0f;
GiveRandomItemToMonsters(1);
}
}
}
private static void GiveSpecificItemToMonsters(ItemDef itemDef, int count)
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Invalid comparison between Unknown and I4
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)Run.instance == (Object)null || (Object)(object)itemDef == (Object)null)
{
return;
}
Inventory monsterTeamInventory = MonsterTeamGainsItemsArtifactManager.monsterTeamInventory;
if ((Object)(object)monsterTeamInventory != (Object)null)
{
monsterTeamInventory.GiveItemPermanent(itemDef.itemIndex, count);
}
foreach (CharacterMaster readOnlyInstances in CharacterMaster.readOnlyInstancesList)
{
if ((int)readOnlyInstances.teamIndex == 2 && (Object)(object)readOnlyInstances.inventory != (Object)null)
{
readOnlyInstances.inventory.GiveItemPermanent(itemDef.itemIndex, count);
}
}
}
private static bool IsCustomBossWhitelisted(string internalName)
{
string text = internalName.ToLower();
string[] array = new string[7] { "lightninggland", "conductor", "shinypearl", "fireballsonhit", "parentegg", "bleedonhitandexplode", "knurl" };
foreach (string value in array)
{
if (text.Contains(value))
{
return true;
}
}
return false;
}
private static bool IsCustomGreenBlacklisted(string internalName)
{
string text = internalName.ToLower();
string[] array = new string[3] { "infusion", "movespeedonkill", "huntersharpoon" };
foreach (string value in array)
{
if (text.Contains(value))
{
return true;
}
}
return false;
}
private static void GiveRandomItemToMonsters(int count)
{
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Invalid comparison between Unknown and I4
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
//IL_01ff: Invalid comparison between Unknown and I4
//IL_029a: Unknown result type (might be due to invalid IL or missing references)
//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0304: Expected O, but got Unknown
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
//IL_0169: Invalid comparison between Unknown and I4
//IL_0210: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_0188: Invalid comparison between Unknown and I4
//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Unknown result type (might be due to invalid IL or missing references)
//IL_023a: Invalid comparison between Unknown and I4
//IL_0254: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)Run.instance == (Object)null || Run.instance.availableTier1DropList.Count == 0)
{
return;
}
int num = Run.instance.stageClearCount + 1;
List list = new List(Run.instance.availableTier1DropList);
if (num >= 2 && Run.instance.availableTier2DropList.Count > 0)
{
list.AddRange(Run.instance.availableTier2DropList);
}
if (num >= 3 && Run.instance.availableTier3DropList.Count > 0)
{
list.AddRange(Run.instance.availableTier3DropList);
}
if (num >= 4 && Run.instance.availableBossDropList.Count > 0)
{
list.AddRange(Run.instance.availableBossDropList);
}
List list2 = new List();
foreach (PickupIndex item in list)
{
PickupDef pickupDef = PickupCatalog.GetPickupDef(item);
if (pickupDef == null || (int)pickupDef.itemIndex == -1)
{
continue;
}
ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
if ((Object)(object)itemDef != (Object)null)
{
bool flag = Array.Exists(itemDef.tags, (ItemTag tag) => (int)tag == 4) || Array.Exists(itemDef.tags, (ItemTag tag) => (int)tag == 10);
if (!flag && (int)itemDef.tier == 1 && IsCustomGreenBlacklisted(((Object)itemDef).name))
{
flag = true;
}
if (!flag && (int)itemDef.tier == 4 && !IsCustomBossWhitelisted(((Object)itemDef).name))
{
flag = true;
}
if (!flag)
{
list2.Add(item);
}
}
}
if (list2.Count == 0)
{
return;
}
Inventory monsterTeamInventory = MonsterTeamGainsItemsArtifactManager.monsterTeamInventory;
PickupDef val = null;
for (int num2 = 0; num2 < count; num2++)
{
PickupDef pickupDef2 = PickupCatalog.GetPickupDef(Run.instance.treasureRng.NextElementUniform(list2));
if (pickupDef2 == null || (int)pickupDef2.itemIndex == -1)
{
continue;
}
val = pickupDef2;
if ((Object)(object)monsterTeamInventory != (Object)null)
{
monsterTeamInventory.GiveItemPermanent(pickupDef2.itemIndex, 1);
}
foreach (CharacterMaster readOnlyInstances in CharacterMaster.readOnlyInstancesList)
{
if ((int)readOnlyInstances.teamIndex == 2 && (Object)(object)readOnlyInstances.inventory != (Object)null)
{
readOnlyInstances.inventory.GiveItemPermanent(pickupDef2.itemIndex, 1);
}
}
}
if (val != null)
{
string text = Language.GetString(val.nameToken);
string text2 = "#" + ColorUtility.ToHtmlStringRGB(val.baseColor);
string baseToken = string.Format(chatMessages[Random.Range(0, chatMessages.Length)], "" + text + "");
Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
{
baseToken = baseToken
});
}
}
}
internal static class Log
{
private static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void Info(object data)
{
_logSource.LogInfo(data);
}
internal static void Error(object data)
{
_logSource.LogError(data);
}
}
}