Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of RoR2StreamCompanion v2.6.0
StreamCompanion.dll
Decompiled 2 weeks agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Net; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates.Captain.Weapon; using EntityStates.Toolbot; using On.EntityStates.Captain.Weapon; using On.EntityStates.Toolbot; using On.RoR2; using On.RoR2.Skills; using RoR2; using RoR2.Skills; using UnityEngine; [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: AssemblyCompany("StreamCompanion")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+54af8a5f5ce75d9174962ca69170613071be811e")] [assembly: AssemblyProduct("StreamCompanion")] [assembly: AssemblyTitle("StreamCompanion")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace StreamCompanion; internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [BepInPlugin("TaranDev.RoR2StreamCompanion", "RoR2StreamCompanion", "2.6.0")] public class StreamCompanion : BaseUnityPlugin { public const string PluginGUID = "TaranDev.RoR2StreamCompanion"; public const string PluginAuthor = "TaranDev"; public const string PluginName = "RoR2StreamCompanion"; public const string PluginVersion = "2.6.0"; public const string url = "https://ror2-sc-api.herokuapp.com/"; public static string inventoryItemsString = ""; public static string equipmentString = ""; public static string skillsString = ""; public static string bodyColourString = ""; public static List<string> VanillaItems = new List<string> { "ITEM_BOSSDAMAGEBONUS_NAME", "ITEM_SECONDARYSKILLMAGAZINE_NAME", "ITEM_FLATHEALTH_NAME", "ITEM_FIREWORK_NAME", "ITEM_MUSHROOM_NAME", "ITEM_HEALWHILESAFE_NAME", "ITEM_CROWBAR_NAME", "ITEM_FRAGILEDAMAGEBONUS_NAME", "ITEM_SPRINTBONUS_NAME", "ITEM_NEARBYDAMAGEBONUS_NAME", "ITEM_IGNITEONKILL_NAME", "ITEM_SCRAPWHITE_NAME", "ITEM_CRITGLASSES_NAME", "ITEM_MEDKIT_NAME", "ITEM_ATTACKSPEEDANDMOVESPEED_NAME", "ITEM_TOOTH_NAME", "ITEM_OUTOFCOMBATARMOR_NAME", "ITEM_HOOF_NAME", "ITEM_PERSONALSHIELD_NAME", "ITEM_HEALINGPOTION_NAME", "ITEM_REPULSIONARMORPLATE_NAME", "ITEM_GOLDONHURT_NAME", "ITEM_TREASURECACHE_NAME", "ITEM_SYRINGE_NAME", "ITEM_STICKYBOMB_NAME", "ITEM_STUNCHANCEONHIT_NAME", "ITEM_BARRIERONKILL_NAME", "ITEM_BEAR_NAME", "ITEM_BLEEDONHIT_NAME", "ITEM_WARDONLEVEL_NAME", "ITEM_MISSILE_NAME", "ITEM_BANDOLIER_NAME", "ITEM_WARCRYONMULTIKILL_NAME", "ITEM_SLOWONHIT_NAME", "ITEM_DEATHMARK_NAME", "ITEM_EQUIPMENTMAGAZINE_NAME", "ITEM_BONUSGOLDPACKONKILL_NAME", "ITEM_HEALONCRIT_NAME", "ITEM_FEATHER_NAME", "ITEM_MOVESPEEDONKILL_NAME", "ITEM_STRENGTHENBURN_NAME", "ITEM_INFUSION_NAME", "ITEM_SCRAPGREEN_NAME", "ITEM_FIRERING_NAME", "ITEM_SEED_NAME", "ITEM_TPHEALINGNOVA_NAME", "ITEM_EXECUTELOWHEALTHELITE_NAME", "ITEM_PHASING_NAME", "ITEM_ATTACKSPEEDONCRIT_NAME", "ITEM_THORNS_NAME", "ITEM_SPRINTOUTOFCOMBAT_NAME", "ITEM_REGENERATINGSCRAP_NAME", "ITEM_SPRINTARMOR_NAME", "ITEM_ICERING_NAME", "ITEM_FREECHEST_NAME", "ITEM_PRIMARYSKILLSHURIKEN_NAME", "ITEM_SQUIDTURRET_NAME", "ITEM_CHAINLIGHTNING_NAME", "ITEM_ENERGIZEDONEQUIPMENTUSE_NAME", "ITEM_JUMPBOOST_NAME", "ITEM_EXPLODEONDEATH_NAME", "ITEM_CLOVER_NAME", "ITEM_BARRIERONOVERHEAL_NAME", "ITEM_ALIENHEAD_NAME", "ITEM_IMMUNETODEBUFF_NAME", "ITEM_RANDOMEQUIPMENTTRIGGER_NAME", "ITEM_KILLELITEFRENZY_NAME", "ITEM_BEHEMOTH_NAME", "ITEM_DAGGER_NAME", "ITEM_CAPTAINDEFENSEMATRIX_NAME", "ITEM_EXTRALIFE_NAME", "ITEM_ICICLE_NAME", "ITEM_FALLBOOTS_NAME", "ITEM_GHOSTONKILL_NAME", "ITEM_UTILITYSKILLMAGAZINE_NAME", "ITEM_INTERSTELLARDESKPLANT_NAME", "ITEM_SCRAPRED_NAME", "ITEM_CRITDAMAGE_NAME", "ITEM_NOVAONHEAL_NAME", "ITEM_MOREMISSILE_NAME", "ITEM_INCREASEHEALING_NAME", "ITEM_LASERTURBINE_NAME", "ITEM_BOUNCENEARBY_NAME", "ITEM_ARMORREDUCTIONONHIT_NAME", "ITEM_TALISMAN_NAME", "ITEM_DRONEWEAPONS_NAME", "ITEM_PERMANENTDEBUFFONHIT_NAME", "ITEM_SHOCKNEARBY_NAME", "ITEM_HEADHUNTER_NAME", "ITEM_ARTIFACTKEY_NAME", "ITEM_LIGHTNINGSTRIKEONHIT_NAME", "ITEM_MINORCONSTRUCTONKILL_NAME", "ITEM_ROBOBALLBUDDY_NAME", "ITEM_NOVAONLOWHEALTH_NAME", "ITEM_TITANGOLDDURINGTP_NAME", "ITEM_SHINYPEARL_NAME", "ITEM_SCRAPYELLOW_NAME", "ITEM_SPRINTWISP_NAME", "ITEM_SIPHONONLOWHEALTH_NAME", "ITEM_FIREBALLSONHIT_NAME", "ITEM_PEARL_NAME", "ITEM_PARENTEGG_NAME", "ITEM_BEETLEGLAND_NAME", "ITEM_BLEEDONHITANDEXPLODE_NAME", "ITEM_KNURL_NAME", "ITEM_LUNARTRINKET_NAME", "ITEM_GOLDONHIT_NAME", "ITEM_REPEATHEAL_NAME", "ITEM_MONSTERSONSHRINEUSE_NAME", "ITEM_LUNARSUN_NAME", "ITEM_LUNARSPECIALREPLACEMENT_NAME", "ITEM_RANDOMLYLUNAR_NAME", "ITEM_FOCUSEDCONVERGENCE_NAME", "ITEM_AUTOCASTEQUIPMENT_NAME", "ITEM_LUNARSECONDARYREPLACEMENT_NAME", "ITEM_HALFATTACKSPEEDHALFCOOLDOWNS_NAME", "ITEM_RANDOMDAMAGEZONE_NAME", "ITEM_LUNARBADLUCK_NAME", "ITEM_LUNARDAGGER_NAME", "ITEM_HALFSPEEDDOUBLEHEALTH_NAME", "ITEM_LUNARUTILITYREPLACEMENT_NAME", "ITEM_SHIELDONLY_NAME", "ITEM_LUNARPRIMARYREPLACEMENT_NAME", "ITEM_CLOVERVOID_NAME", "ITEM_TREASURECACHEVOID_NAME", "ITEM_CRITGLASSESVOID_NAME", "ITEM_EQUIPMENTMAGAZINEVOID_NAME", "ITEM_BLEEDONHITVOID_NAME", "ITEM_VOIDMEGACRABITEM_NAME", "ITEM_MISSILEVOID_NAME", "ITEM_EXTRALIFEVOID_NAME", "ITEM_CHAINLIGHTNINGVOID_NAME", "ITEM_BEARVOID_NAME", "ITEM_ELEMENTALRINGVOID_NAME", "ITEM_SLOWONHITVOID_NAME", "ITEM_EXPLODEONDEATHVOID_NAME", "ITEM_MUSHROOMVOID_NAME", "ITEM_FRAGILEDAMAGEBONUSCONSUMED_NAME", "ITEM_EXTRALIFECONSUMED_NAME", "ITEM_HEALINGPOTIONCONSUMED_NAME", "ITEM_EXTRALIFEVOIDCONSUMED_NAME", "ITEM_REGENERATINGSCRAPCONSUMED_NAME", "ITEM_TONICAFFLICTION_NAME" }; public static List<string> CaptainBeacons = new List<string> { "CAPTAIN_SUPPLY_HEAL_NAME", "CAPTAIN_SUPPLY_DEFENSE_NAME", "CAPTAIN_SUPPLY_HACKING_NAME", "CAPTAIN_SUPPLY_EQUIPMENT_RESTOCK_NAME", "CAPTAIN_SUPPLY_SHOCKING_NAME" }; public static List<string> MULTPrimarySkills = new List<string> { "TOOLBOT_PRIMARY_NAME", "TOOLBOT_PRIMARY_ALT1_NAME", "TOOLBOT_PRIMARY_ALT2_NAME", "TOOLBOT_PRIMARY_ALT3_NAME" }; public static bool isWaitingForUpdate = false; public static CharacterBody localBodyCache; public static ConfigEntry<string> TwitchNameConfigEntry { get; set; } public static ConfigEntry<string> SecretKeyConfigEntry { get; set; } public static ConfigEntry<double> DelayConfigEntry { get; set; } public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); TwitchNameConfigEntry = ((BaseUnityPlugin)this).Config.Bind<string>("RoR2 Stream Companion", "Twitch Name", "exampleTwitchName", "The name of your channel on Twitch"); SecretKeyConfigEntry = ((BaseUnityPlugin)this).Config.Bind<string>("RoR2 Stream Companion", "Secret Key", "123MySecretKey", "The secret key you generated in the extension config page on Twitch"); DelayConfigEntry = ((BaseUnityPlugin)this).Config.Bind<double>("RoR2 Stream Companion", "Delay", 2.0, "The delay of your twitch stream in seconds"); SendItemsUpdate(inventoryItemsString, equipmentString, skillsString, bodyColourString); } private void OnEnable() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown Inventory.HandleInventoryChanged += new hook_HandleInventoryChanged(OnInventoryChanged); Inventory.UpdateEffectiveItemStacks += new hook_UpdateEffectiveItemStacks(OnUpdateEffectiveItemStacks); ItemTransformation.TryTransform += new hook_TryTransform(OnTryTransform); GameOverController.Awake += new hook_Awake(OnGameOver); CharacterMaster.OnBodyStart += new hook_OnBodyStart(OnBodyLoaded); CallSupplyDropBase.OnEnter += new hook_OnEnter(OnEnterSupplyDrop); ToolbotStanceSwap.OnEnter += new hook_OnEnter(OnEnterRetool); ToolbotDualWield.OnEnter += new hook_OnEnter(OnEnterPowerMode); ToolbotDualWield.OnExit += new hook_OnExit(OnExitPowerMode); CaptainSupplyDropSkillDef.GetCurrentNameToken += new hook_GetCurrentNameToken(CaptainGetCurrentNameToken); CaptainSupplyDropSkillDef.GetCurrentDescriptionToken += new hook_GetCurrentDescriptionToken(CaptainGetCurrentDescriptionToken); Run.OnApplicationQuit += new hook_OnApplicationQuit(OnApplicationQuit); } private void OnDisable() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown Inventory.HandleInventoryChanged -= new hook_HandleInventoryChanged(OnInventoryChanged); Inventory.UpdateEffectiveItemStacks += new hook_UpdateEffectiveItemStacks(OnUpdateEffectiveItemStacks); ItemTransformation.TryTransform += new hook_TryTransform(OnTryTransform); GameOverController.Awake -= new hook_Awake(OnGameOver); CharacterMaster.OnBodyStart -= new hook_OnBodyStart(OnBodyLoaded); CallSupplyDropBase.OnEnter -= new hook_OnEnter(OnEnterSupplyDrop); ToolbotStanceSwap.OnEnter -= new hook_OnEnter(OnEnterRetool); ToolbotDualWield.OnEnter -= new hook_OnEnter(OnEnterPowerMode); ToolbotDualWield.OnExit -= new hook_OnExit(OnExitPowerMode); CaptainSupplyDropSkillDef.GetCurrentNameToken -= new hook_GetCurrentNameToken(CaptainGetCurrentNameToken); CaptainSupplyDropSkillDef.GetCurrentDescriptionToken -= new hook_GetCurrentDescriptionToken(CaptainGetCurrentDescriptionToken); Run.OnApplicationQuit -= new hook_OnApplicationQuit(OnApplicationQuit); } private void OnUpdateEffectiveItemStacks(orig_UpdateEffectiveItemStacks orig, Inventory self, ItemIndex itemIndex) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, itemIndex); RefreshItemList(self); } private static void OnInventoryChanged(orig_HandleInventoryChanged orig, Inventory self) { orig.Invoke(self); RefreshItemList(self); } private bool OnTryTransform(orig_TryTransform orig, ref ItemTransformation self, Inventory inventory, out TryTransformResult result) { bool result2 = orig.Invoke(ref self, inventory, ref result); Task.Delay(1000).ContinueWith(delegate { RefreshItemList(inventory); }); return result2; } private void OnApplicationQuit(orig_OnApplicationQuit orig, Run self) { inventoryItemsString = ""; equipmentString = ""; skillsString = ""; bodyColourString = ""; localBodyCache = null; SendItemsUpdate(inventoryItemsString, equipmentString, skillsString, bodyColourString); orig.Invoke(self); } private string CaptainGetCurrentDescriptionToken(orig_GetCurrentDescriptionToken orig, CaptainSupplyDropSkillDef self, GenericSkill skillSlot) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)skillSlot != (Object)null && (int)(InstanceData)skillSlot.skillInstanceData != 0 && !((InstanceData)skillSlot.skillInstanceData).anySupplyDropsAvailable) { return self.exhaustedDescriptionToken; } if (!((CaptainOrbitalSkillDef)self).isAvailable) { return ((CaptainOrbitalSkillDef)self).disabledDescriptionToken; } return ((SkillDef)self).skillDescriptionToken; } private string CaptainGetCurrentNameToken(orig_GetCurrentNameToken orig, CaptainSupplyDropSkillDef self, GenericSkill skillSlot) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)skillSlot != (Object)null && (int)(InstanceData)skillSlot.skillInstanceData != 0 && !((InstanceData)skillSlot.skillInstanceData).anySupplyDropsAvailable) { return self.exhaustedNameToken; } if (!((CaptainOrbitalSkillDef)self).isAvailable) { return ((CaptainOrbitalSkillDef)self).disabledNameToken; } return ((SkillDef)self).skillNameToken; } public static CharacterBody GetCurrentCharacterMaster() { CharacterBody val = null; if ((Object)(object)Run.instance != (Object)null) { LocalUser firstLocalUser = LocalUserManager.GetFirstLocalUser(); val = ((firstLocalUser != null) ? firstLocalUser.cachedBody : null); if ((Object)(object)val != (Object)null) { localBodyCache = val; } } return localBodyCache; } private static void OnEnterSupplyDrop(orig_OnEnter orig, CallSupplyDropBase self) { orig.Invoke(self); Task.Delay(500).ContinueWith(delegate { checkSkillString(); }); } private static void OnEnterRetool(orig_OnEnter orig, ToolbotStanceSwap self) { orig.Invoke(self); checkSkillString(); } private static void OnEnterPowerMode(orig_OnEnter orig, ToolbotDualWield self) { orig.Invoke(self); checkSkillString(); } private static void OnExitPowerMode(orig_OnExit orig, ToolbotDualWield self) { orig.Invoke(self); checkSkillString(); } public static void OnBodyLoaded(orig_OnBodyStart orig, CharacterMaster self, CharacterBody body) { orig.Invoke(self, body); Task.Delay(1500).ContinueWith(delegate { checkSkillString(); }); } private static void checkSkillString() { if (PlayerCharacterMasterController.instances.Count > 0 && Object.op_Implicit((Object)(object)PlayerCharacterMasterController.instances[0].master.GetBody())) { string skillString = GetSkillString(inventoryItemsString); if (!skillString.Equals(skillsString)) { skillsString = skillString; bodyColourString = GetColourString(); WaitThenSendItemsUpdate(inventoryItemsString, equipmentString, skillsString, bodyColourString); } } } private static void OnGameOver(orig_Awake orig, GameOverController self) { localBodyCache = null; inventoryItemsString = ""; equipmentString = ""; skillsString = ""; bodyColourString = ""; WaitThenSendItemsUpdate(inventoryItemsString, equipmentString, skillsString, bodyColourString); orig.Invoke(self); } private static void RefreshItemList(Inventory inventory) { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: 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) if ((Object)(object)GetCurrentCharacterMaster() == (Object)null || PlayerCharacterMasterController.instances.Count <= 0 || !((object)inventory).Equals((object?)GetCurrentCharacterMaster().master.inventory) || Object.op_Implicit((Object)(object)GameOverController.instance)) { return; } List<ItemIndex> itemAcquisitionOrder = inventory.itemAcquisitionOrder; string text = ""; for (int i = 0; i < itemAcquisitionOrder.Count; i++) { ItemDef itemDef = ItemCatalog.GetItemDef(itemAcquisitionOrder[i]); if (!itemDef.hidden) { bool flag = false; string[] obj = new string[7] { text, Language.GetString(itemDef.nameToken), "{", Language.GetString(itemDef.descriptionToken), "}[", null, null }; ItemTier tier = itemDef.tier; obj[5] = ((object)(ItemTier)(ref tier)).ToString(); obj[6] = "];"; text = string.Concat(obj); } } text = text.Replace("\n", ""); text = text.Replace("\r", ""); EquipmentIndex currentEquipmentIndex = inventory.currentEquipmentIndex; EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(currentEquipmentIndex); string text2 = ""; if (Object.op_Implicit((Object)(object)equipmentDef)) { text2 = GetEquipmentString(equipmentDef); EquipmentIndex alternateEquipmentIndex = inventory.alternateEquipmentIndex; EquipmentDef equipmentDef2 = EquipmentCatalog.GetEquipmentDef(alternateEquipmentIndex); string text3 = ""; if (Object.op_Implicit((Object)(object)equipmentDef2)) { text3 = GetEquipmentString(equipmentDef2); } text2 += text3; } text2 = text2.Replace("\n", ""); text2 = text2.Replace("\r", ""); string text4 = ""; string text5 = ""; if (Object.op_Implicit((Object)(object)PlayerCharacterMasterController.instances[0].master.GetBody())) { text4 = GetSkillString(text); text5 = GetColourString(); } if (text.Equals(inventoryItemsString) && text2.Equals(equipmentString) && text4.Equals(skillsString)) { return; } inventoryItemsString = text; equipmentString = text2; skillsString = text4; bodyColourString = text5; if (Object.op_Implicit((Object)(object)PhaseCounter.instance) && PhaseCounter.instance.phase == 4) { if (!isWaitingForUpdate) { isWaitingForUpdate = true; WaitThenSendItemsUpdatePhase4(); } } else { WaitThenSendItemsUpdate(inventoryItemsString, equipmentString, skillsString, bodyColourString); } } private static string GetEquipmentString(EquipmentDef equipmentInfo) { string @string = Language.GetString(equipmentInfo.descriptionToken); if (@string == "" || @string == "???") { @string = Language.GetString(equipmentInfo.pickupToken); } return Language.GetString(equipmentInfo.nameToken) + "{" + @string + "}[" + equipmentInfo.isLunar + "];"; } private static string GetSkillString(string InventoryItemsString) { if ((Object)(object)GetCurrentCharacterMaster() == (Object)null) { return ""; } GenericSkill primary = GetCurrentCharacterMaster().skillLocator.primary; GenericSkill secondary = GetCurrentCharacterMaster().skillLocator.secondary; GenericSkill utility = GetCurrentCharacterMaster().skillLocator.utility; GenericSkill special = GetCurrentCharacterMaster().skillLocator.special; if (!Object.op_Implicit((Object)(object)primary) || !Object.op_Implicit((Object)(object)secondary) || !Object.op_Implicit((Object)(object)utility) || !Object.op_Implicit((Object)(object)special)) { return skillsString; } string text = ""; string text2 = ""; if ((Object)(object)primary.skillDef != (Object)null && (Object)(object)primary.baseSkill != (Object)null) { string text3 = primary.baseSkill.GetCurrentNameToken(primary); if (text3 == null) { text3 = ""; } string text4 = primary.baseSkill.GetCurrentDescriptionToken(primary); if (text4 == null) { text4 = ""; } text2 = (InventoryItemsString.Contains("ITEM_LUNARPRIMARYREPLACEMENT_NAME") ? (Language.GetString("SKILL_LUNAR_PRIMARY_REPLACEMENT_NAME") + "{" + Language.GetString("SKILL_LUNAR_PRIMARY_REPLACEMENT_DESCRIPTION") + "};") : ((!CaptainBeacons.Contains(text3)) ? (Language.GetString(text3) + "{" + Language.GetString(text4) + "};") : (Language.GetString("CAPTAIN_PRIMARY_NAME") + "{" + Language.GetString("CAPTAIN_PRIMARY_DESCRIPTION") + "};"))); } text += text2; string text5 = ""; if ((Object)(object)secondary.skillDef != (Object)null && (Object)(object)secondary.baseSkill != (Object)null) { string text6 = secondary.baseSkill.GetCurrentNameToken(secondary); if (text6 == null) { text6 = ""; } string text7 = secondary.baseSkill.GetCurrentDescriptionToken(secondary); if (text7 == null) { text7 = ""; } text5 = (MULTPrimarySkills.Contains(text6) ? (Language.GetString(text6) + "{" + Language.GetString(text7) + "};") : (InventoryItemsString.Contains("ITEM_LUNARSECONDARYREPLACEMENT_NAME") ? (Language.GetString("SKILL_LUNAR_SECONDARY_REPLACEMENT_NAME") + "{" + Language.GetString("SKILL_LUNAR_SECONDARY_REPLACEMENT_DESCRIPTION") + "};") : ((!CaptainBeacons.Contains(text6)) ? (Language.GetString(text6) + "{" + Language.GetString(text7) + "};") : (Language.GetString("CAPTAIN_SECONDARY_NAME") + "{" + Language.GetString("CAPTAIN_SECONDARY_DESCRIPTION") + "};")))); } text += text5; string text8 = ""; if ((Object)(object)utility.baseSkill != (Object)null) { string text9 = utility.baseSkill.GetCurrentNameToken(utility); if (text9 == null) { text9 = ""; } string text10 = utility.baseSkill.GetCurrentDescriptionToken(utility); if (text10 == null) { text10 = ""; } text8 = ((!InventoryItemsString.Contains("ITEM_LUNARUTILITYREPLACEMENT_NAME")) ? (Language.GetString(text9) + "{" + Language.GetString(text10) + "};") : (Language.GetString("SKILL_LUNAR_UTILITY_REPLACEMENT_NAME") + "{" + Language.GetString("SKILL_LUNAR_UTILITY_REPLACEMENT_DESCRIPTION") + "};")); } text += text8; string text11 = ""; if ((Object)(object)special.baseSkill != (Object)null) { string text12 = ""; if (special.skillNameToken != null && special.baseSkill.GetCurrentNameToken(special) != null) { text12 = special.baseSkill.GetCurrentNameToken(special); } string text13 = ""; if (special.skillDescriptionToken != null && special.baseSkill.GetCurrentDescriptionToken(special) != null) { text13 = special.baseSkill.GetCurrentDescriptionToken(special); } text11 = ((!InventoryItemsString.Contains("ITEM_LUNARSPECIALREPLACEMENT_NAME")) ? (Language.GetString(text12) + "{" + Language.GetString(text13) + "};") : (Language.GetString("SKILL_LUNAR_SPECIAL_REPLACEMENT_NAME") + "{" + Language.GetString("SKILL_LUNAR_SPECIAL_REPLACEMENT_DESCRIPTION") + "};")); } return text + text11; } private static string GetColourString() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)GetCurrentCharacterMaster() == (Object)null)) { _ = GetCurrentCharacterMaster().bodyColor; if (0 == 0) { Color bodyColor = GetCurrentCharacterMaster().bodyColor; return "rgb(" + Math.Round(bodyColor.r * 200f) + "," + Math.Round(bodyColor.g * 200f) + "," + Math.Round(bodyColor.b * 200f) + ")"; } } return ""; } private static async void WaitThenSendItemsUpdate(string items, string equipment, string skills, string bodycolour) { await Task.Delay((int)(DelayConfigEntry.Value * 1000.0)).ContinueWith(delegate { SendItemsUpdate(items, equipment, skills, bodycolour); }); } private static void WaitThenSendItemsUpdatePhase4() { Task.Delay((int)(DelayConfigEntry.Value * 1000.0) + 3000).ContinueWith(delegate { isWaitingForUpdate = false; SendItemsUpdate(inventoryItemsString, equipmentString, skillsString, bodyColourString); }); } private static async void SendItemsUpdate(string items, string equipment, string skills, string bodycolour) { Log.Info("SendItemsUpdate"); string hudstatus = ""; await Task.Run(delegate { HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://ror2-sc-api.herokuapp.com/"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string value = "{\"twitchName\":\"" + TwitchNameConfigEntry.Value + "\",\"secretKey\":\"" + SecretKeyConfigEntry.Value + "\",\"items\":\"" + items + "\",\"equipment\":\"" + equipment + "\",\"skills\":\"" + skills + "\",\"survivor\":\"" + bodycolour + "\",\"hudstatus\":\"" + hudstatus + "\"}"; streamWriter.Write(value); } HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); httpWebResponse.Close(); }); } private void Update() { if ((!Object.op_Implicit((Object)(object)PhaseCounter.instance) || PhaseCounter.instance.phase != 4) && isWaitingForUpdate) { isWaitingForUpdate = false; } if ((Object)(object)Run.instance == (Object)null && (inventoryItemsString.Length > 0 || equipmentString.Length > 0 || skillsString.Length > 0 || bodyColourString.Length > 0 || (Object)(object)localBodyCache != (Object)null)) { inventoryItemsString = ""; equipmentString = ""; skillsString = ""; bodyColourString = ""; localBodyCache = null; SendItemsUpdate(inventoryItemsString, equipmentString, skillsString, bodyColourString); } } }