Decompiled source of TGCore v1.0.7
TGCore.dll
Decompiled 2 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using DM; using HarmonyLib; using Landfall.MonoBatch; using Landfall.TABS; using Landfall.TABS.AI; using Landfall.TABS.AI.Components; using Landfall.TABS.AI.Components.Modifiers; using Landfall.TABS.AI.Components.Tags; using Landfall.TABS.AI.Systems; using Landfall.TABS.GameMode; using Landfall.TABS.GameState; using Landfall.TABS.RuntimeCleanup; using Landfall.TABS.UnitEditor; using Landfall.TABS.Workshop; using Landfall.TABS_Input; using Microsoft.CodeAnalysis; using TFBGames; using TGCore.Library; using TGCore.Localization; using TGCore.Properties; using Unity.Entities; using UnityEngine; using UnityEngine.Events; using UnityEngine.SceneManagement; [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.0", FrameworkDisplayName = "")] [assembly: AssemblyCompany("TGCore")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+7d3b21a66b9487259ccdea2beaeec8199709c639")] [assembly: AssemblyProduct("TGCore")] [assembly: AssemblyTitle("TGCore")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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 TGCore { public static class TGAddons { public static object InvokeMethod<T>(this T obj, string methodName, params object[] args) { Type typeFromHandle = typeof(T); MethodInfo declaredMethod = typeFromHandle.GetTypeInfo().GetDeclaredMethod(methodName); return declaredMethod.Invoke(obj, args); } public static T SetField<T>(this T self, string name, object value) where T : class { FieldInfo field = typeof(T).GetField(name, (BindingFlags)(-1)); if (field != null) { field.SetValue(self, value); } return self; } public static object GetField<T>(this T self, string name) where T : class { FieldInfo field = typeof(T).GetField(name, (BindingFlags)(-1)); if (field != null) { return field.GetValue(self); } return null; } public static string DeepString(this GameObject self) { string text = "\nGameObject '" + ((Object)self).name + "':\n{\n\tComponents:\n\t{\n"; text = string.Concat(text, string.Concat(from Component component in self.GetComponents<Component>() select "\t\t" + ((object)component).GetType().Name + "\n")); text += "\t}\n"; if (self.transform.childCount > 0) { text += "\tChildren:\n\t{\n"; text = string.Concat(text, string.Concat(from Transform child in (IEnumerable)self.transform select ((Component)child).gameObject.DeepString().Replace("\n", "\n\t\t"))); text += "\n\t}\n"; } return text + "}\n"; } public static T DeepCopyOf<T>(this T self, T from) where T : class { FieldInfo[] fields = typeof(T).GetFields((BindingFlags)(-1)); foreach (FieldInfo fieldInfo in fields) { try { fieldInfo.SetValue(self, fieldInfo.GetValue(from)); } catch { } } PropertyInfo[] properties = typeof(T).GetProperties((BindingFlags)(-1)); foreach (PropertyInfo propertyInfo in properties) { if (propertyInfo.CanWrite && propertyInfo.CanRead) { try { propertyInfo.SetValue(self, propertyInfo.GetValue(from)); } catch { } } } return self; } public static SettingsInstance CreateSetting(SettingsType settingsType, string settingName, string toolTip, string settingListToAddTo, float defaultValue, float currentValue, string[] options = null, float min = 0f, float max = 1f) { //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) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown SettingsInstance val = new SettingsInstance { settingName = settingName, toolTip = toolTip, m_settingsKey = settingName, settingsType = settingsType, options = options, min = min, max = max, defaultValue = (int)defaultValue, currentValue = (int)currentValue, defaultSliderValue = defaultValue, currentSliderValue = currentValue }; GlobalSettingsHandler service = ServiceLocator.GetService<GlobalSettingsHandler>(); List<SettingsInstance> list = (settingListToAddTo switch { "BUG" => service.BugsSettings, "VIDEO" => service.VideoSettings, "AUDIO" => service.AudioSettings, "CONTROLS" => service.ControlSettings, _ => service.GameplaySettings, }).ToList(); list.Add(val); switch (settingListToAddTo) { case "BUG": typeof(GlobalSettingsHandler).GetField("m_bugsSettings", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(service, list.ToArray()); break; case "VIDEO": typeof(GlobalSettingsHandler).GetField("m_videoSettings", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(service, list.ToArray()); break; case "AUDIO": typeof(GlobalSettingsHandler).GetField("m_audioSettings", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(service, list.ToArray()); break; case "CONTROLS": typeof(GlobalSettingsHandler).GetField("m_controlSettings", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(service, list.ToArray()); break; default: typeof(GlobalSettingsHandler).GetField("m_gameplaySettings", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(service, list.ToArray()); break; } return val; } public static void AddItems(IEnumerable<UnitBlueprint> newUnits, IEnumerable<Faction> newFactions, IEnumerable<TABSCampaignAsset> newCampaigns, IEnumerable<TABSCampaignLevelAsset> newCampaignLevels, IEnumerable<VoiceBundle> newVoiceBundles, IEnumerable<FactionIcon> newFactionIcons, IEnumerable<Unit> newUnitBases, IEnumerable<PropItem> newProps, IEnumerable<SpecialAbility> newAbilities, IEnumerable<WeaponItem> newWeapons, IEnumerable<ProjectileEntity> newProjectiles) { //IL_00ba: 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_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: 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_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_03b7: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: Unknown result type (might be due to invalid IL or missing references) //IL_0485: Unknown result type (might be due to invalid IL or missing references) //IL_049a: Unknown result type (might be due to invalid IL or missing references) //IL_0553: Unknown result type (might be due to invalid IL or missing references) //IL_0566: Unknown result type (might be due to invalid IL or missing references) //IL_0626: Unknown result type (might be due to invalid IL or missing references) //IL_0640: Unknown result type (might be due to invalid IL or missing references) //IL_06fe: Unknown result type (might be due to invalid IL or missing references) //IL_0718: Unknown result type (might be due to invalid IL or missing references) //IL_07d6: Unknown result type (might be due to invalid IL or missing references) //IL_07f0: Unknown result type (might be due to invalid IL or missing references) //IL_08ae: Unknown result type (might be due to invalid IL or missing references) //IL_08c8: Unknown result type (might be due to invalid IL or missing references) //IL_0986: Unknown result type (might be due to invalid IL or missing references) //IL_09a0: Unknown result type (might be due to invalid IL or missing references) LandfallContentDatabase landfallContentDatabase = ContentDatabase.Instance().LandfallContentDatabase; Dictionary<DatabaseID, Object> dictionary = (Dictionary<DatabaseID, Object>)(typeof(AssetLoader).GetField("m_nonStreamableAssets", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(ContentDatabase.Instance().AssetLoader)); Dictionary<DatabaseID, UnitBlueprint> units = (Dictionary<DatabaseID, UnitBlueprint>)(typeof(LandfallContentDatabase).GetField("m_unitBlueprints", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(landfallContentDatabase)); foreach (UnitBlueprint item in newUnits.Where((UnitBlueprint unit) => Object.op_Implicit((Object)(object)unit) && units != null && !units.ContainsKey(unit.Entity.GUID))) { units.Add(item.Entity.GUID, item); dictionary.Add(item.Entity.GUID, (Object)(object)item); } typeof(LandfallContentDatabase).GetField("m_unitBlueprints", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(landfallContentDatabase, units); Dictionary<DatabaseID, Faction> factions = (Dictionary<DatabaseID, Faction>)(typeof(LandfallContentDatabase).GetField("m_factions", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(landfallContentDatabase)); List<DatabaseID> list = (List<DatabaseID>)(typeof(LandfallContentDatabase).GetField("m_defaultHotbarFactionIds", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(landfallContentDatabase)); foreach (Faction item2 in newFactions.Where((Faction faction) => Object.op_Implicit((Object)(object)faction) && factions != null && !factions.ContainsKey(faction.Entity.GUID))) { factions.Add(item2.Entity.GUID, item2); dictionary.Add(item2.Entity.GUID, (Object)(object)item2); list.Add(item2.Entity.GUID); } typeof(LandfallContentDatabase).GetField("m_factions", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(landfallContentDatabase, factions); typeof(LandfallContentDatabase).GetField("m_defaultHotbarFactionIds", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(landfallContentDatabase, list.OrderBy((DatabaseID x) => factions[x].index).ToList()); Dictionary<DatabaseID, TABSCampaignAsset> campaigns = (Dictionary<DatabaseID, TABSCampaignAsset>)(typeof(LandfallContentDatabase).GetField("m_campaigns", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(landfallContentDatabase)); foreach (TABSCampaignAsset item3 in newCampaigns.Where((TABSCampaignAsset campaign) => Object.op_Implicit((Object)(object)campaign) && campaigns != null && !campaigns.ContainsKey(campaign.Entity.GUID))) { campaigns.Add(item3.Entity.GUID, item3); dictionary.Add(item3.Entity.GUID, (Object)(object)item3); } typeof(LandfallContentDatabase).GetField("m_campaigns", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(landfallContentDatabase, campaigns); Dictionary<DatabaseID, TABSCampaignLevelAsset> campaignLevels = (Dictionary<DatabaseID, TABSCampaignLevelAsset>)typeof(LandfallContentDatabase).GetField("m_campaignLevels", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(landfallContentDatabase); foreach (TABSCampaignLevelAsset item4 in newCampaignLevels.Where((TABSCampaignLevelAsset campaignLevel) => Object.op_Implicit((Object)(object)campaignLevel) && campaignLevels != null && !campaignLevels.ContainsKey(campaignLevel.Entity.GUID))) { campaignLevels.Add(item4.Entity.GUID, item4); dictionary.Add(item4.Entity.GUID, (Object)(object)item4); } typeof(LandfallContentDatabase).GetField("m_campaignLevels", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, campaignLevels); Dictionary<DatabaseID, VoiceBundle> voiceBundles = (Dictionary<DatabaseID, VoiceBundle>)typeof(LandfallContentDatabase).GetField("m_voiceBundles", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(landfallContentDatabase); foreach (VoiceBundle item5 in newVoiceBundles.Where((VoiceBundle voiceBundle) => Object.op_Implicit((Object)(object)voiceBundle) && voiceBundles != null && !voiceBundles.ContainsKey(voiceBundle.Entity.GUID))) { voiceBundles.Add(item5.Entity.GUID, item5); dictionary.Add(item5.Entity.GUID, (Object)(object)item5); } typeof(LandfallContentDatabase).GetField("m_voiceBundles", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, voiceBundles); List<DatabaseID> factionIcons = (List<DatabaseID>)typeof(LandfallContentDatabase).GetField("m_factionIconIds", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(landfallContentDatabase); foreach (FactionIcon item6 in newFactionIcons.Where((FactionIcon factionIcon) => Object.op_Implicit((Object)(object)factionIcon) && factionIcons != null && !factionIcons.Contains(factionIcon.Entity.GUID))) { factionIcons.Add(item6.Entity.GUID); dictionary.Add(item6.Entity.GUID, (Object)(object)item6); } typeof(LandfallContentDatabase).GetField("m_factionIconIds", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, factionIcons); Dictionary<DatabaseID, GameObject> unitBases = (Dictionary<DatabaseID, GameObject>)(typeof(LandfallContentDatabase).GetField("m_unitBases", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(landfallContentDatabase)); foreach (Unit item7 in newUnitBases.Where((Unit unitBase) => Object.op_Implicit((Object)(object)unitBase) && unitBases != null && !unitBases.ContainsKey(unitBase.Entity.GUID))) { unitBases.Add(item7.Entity.GUID, ((Component)item7).gameObject); dictionary.Add(item7.Entity.GUID, (Object)(object)((Component)item7).gameObject); } typeof(LandfallContentDatabase).GetField("m_unitBases", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, unitBases); Dictionary<DatabaseID, GameObject> props = (Dictionary<DatabaseID, GameObject>)typeof(LandfallContentDatabase).GetField("m_characterProps", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(landfallContentDatabase); foreach (PropItem item8 in newProps.Where((PropItem prop) => Object.op_Implicit((Object)(object)prop) && props != null && !props.ContainsKey(((CharacterItem)prop).Entity.GUID))) { props.Add(((CharacterItem)item8).Entity.GUID, ((Component)item8).gameObject); dictionary.Add(((CharacterItem)item8).Entity.GUID, (Object)(object)((Component)item8).gameObject); } typeof(LandfallContentDatabase).GetField("m_characterProps", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, props); Dictionary<DatabaseID, GameObject> abilities = (Dictionary<DatabaseID, GameObject>)typeof(LandfallContentDatabase).GetField("m_combatMoves", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(landfallContentDatabase); foreach (SpecialAbility item9 in newAbilities.Where((SpecialAbility ability) => Object.op_Implicit((Object)(object)ability) && abilities != null && !abilities.ContainsKey(((CharacterItem)ability).Entity.GUID))) { abilities.Add(((CharacterItem)item9).Entity.GUID, ((Component)item9).gameObject); dictionary.Add(((CharacterItem)item9).Entity.GUID, (Object)(object)((Component)item9).gameObject); } typeof(LandfallContentDatabase).GetField("m_combatMoves", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, abilities); Dictionary<DatabaseID, GameObject> weapons = (Dictionary<DatabaseID, GameObject>)typeof(LandfallContentDatabase).GetField("m_weapons", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(landfallContentDatabase); foreach (WeaponItem item10 in newWeapons.Where((WeaponItem weapon) => Object.op_Implicit((Object)(object)weapon) && weapons != null && !weapons.ContainsKey(((CharacterItem)weapon).Entity.GUID))) { weapons.Add(((CharacterItem)item10).Entity.GUID, ((Component)item10).gameObject); dictionary.Add(((CharacterItem)item10).Entity.GUID, (Object)(object)((Component)item10).gameObject); } typeof(LandfallContentDatabase).GetField("m_weapons", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, weapons); Dictionary<DatabaseID, GameObject> projectiles = (Dictionary<DatabaseID, GameObject>)typeof(LandfallContentDatabase).GetField("m_projectiles", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(landfallContentDatabase); foreach (ProjectileEntity item11 in newProjectiles.Where((ProjectileEntity proj) => Object.op_Implicit((Object)(object)proj) && projectiles != null && !projectiles.ContainsKey(proj.Entity.GUID))) { projectiles.Add(item11.Entity.GUID, ((Component)item11).gameObject); dictionary.Add(item11.Entity.GUID, (Object)(object)((Component)item11).gameObject); } typeof(LandfallContentDatabase).GetField("m_projectiles", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, projectiles); } } [BepInPlugin("teamgrad.core", "Team Grad Core", "1.0.7")] public class TGMain : BaseUnityPlugin { public static TGMain instance; public static List<TGMod> modList = new List<TGMod>(); public static List<SoundBank> newSounds = new List<SoundBank>(); public static ContentDatabase DB => ContentDatabase.Instance(); public static LandfallContentDatabase landfallDb => ContentDatabase.Instance().LandfallContentDatabase; private void Awake() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) instance = this; Debug.Log((object)"LOADING TGCORE..."); AssetBundle.LoadFromMemory(Resources.tgcore); new Harmony("TGCore").PatchAll(); ((MonoBehaviour)this).StartCoroutine(InitializeMods()); } private IEnumerator InitializeMods() { yield return (object)new WaitUntil((Func<bool>)(() => (Object)(object)Object.FindObjectOfType<ServiceLocator>() != (Object)null)); ServiceLocator.GetService<CustomContentLoaderModIO>().QuickRefresh((WorkshopContentType)0, (Action)null); LocalizationHolder languageHolder = ((Component)this).gameObject.AddComponent<LocalizationHolder>(); modList = Chainloader.ManagerObject.GetComponents<TGMod>().ToList(); List<TGMod> failedModList = new List<TGMod>(); foreach (TGMod mod2 in modList) { try { Debug.Log((object)"LOADING MOD..."); mod2.Launch(); mod2.AddSettings(); mod2.Localize(languageHolder); SceneManager.sceneLoaded += mod2.SceneManager; } catch (Exception exc2) { failedModList.Add(mod2); Debug.LogError((object)"A MOD HAS FAILED TO LAUNCH:"); Debug.LogError((object)exc2); } } modList.RemoveAll((TGMod x) => failedModList.Contains(x)); UpdateSoundBank(); languageHolder.ReadLocalization(); foreach (TGMod mod in modList) { try { mod.LateLaunch(); } catch (Exception exc) { Debug.LogError((object)"A MOD HAS FAILED TO LAUNCH:"); Debug.LogError((object)exc); } } modList.RemoveAll((TGMod x) => failedModList.Contains(x)); } public void UpdateSoundBank() { //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Expected O, but got Unknown Debug.Log((object)"UPDATING SOUNDS..."); foreach (SoundBank newSound in newSounds) { try { if (((Object)newSound).name.Contains("Sound")) { SoundBank soundBank = ServiceLocator.GetService<SoundPlayer>().soundBank; SoundBankCategory[] categories = newSound.Categories; foreach (SoundBankCategory val in categories) { val.categoryMixerGroup = soundBank.Categories[0].categoryMixerGroup; } List<SoundBankCategory> list = soundBank.Categories.ToList(); list.AddRange(newSound.Categories); soundBank.Categories = list.ToArray(); } else { if (!((Object)newSound).name.Contains("Music")) { continue; } SoundBank bank = ServiceLocator.GetService<MusicHandler>().bank; List<SoundBankCategory> list2 = bank.Categories.ToList(); list2.AddRange(newSound.Categories); SoundBankCategory[] categories2 = newSound.Categories; foreach (SoundBankCategory val2 in categories2) { SoundEffectInstance[] soundEffects = val2.soundEffects; foreach (SoundEffectInstance val3 in soundEffects) { SongInstance val4 = new SongInstance { clip = val3.clipTypes[0].clips[0], soundEffectInstance = val3, songRef = val2.categoryName + "/" + val3.soundRef }; ServiceLocator.GetService<MusicHandler>().m_songs.Add(val4.songRef, val4); } } bank.Categories = list2.ToArray(); continue; } } catch (Exception ex) { Debug.LogError((object)"UPDATING SOUNDS HAS FAILED:"); Debug.LogError((object)ex); } } } } public class TGMod : BaseUnityPlugin { private void Awake() { EarlyLaunch(); } public virtual void EarlyLaunch() { } public virtual void Launch() { } public virtual void LateLaunch() { } public virtual void AddSettings() { } public virtual void SceneManager(Scene scene, LoadSceneMode loadSceneMode) { } public virtual void Localize(LocalizationHolder languageHolder) { } } } namespace TGCore.Properties { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Resources { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { ResourceManager resourceManager = new ResourceManager("TGCore.Properties.Resources", typeof(Resources).Assembly); resourceMan = resourceManager; } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static byte[] tgcore { get { object @object = ResourceManager.GetObject("tgcore", resourceCulture); return (byte[])@object; } } internal Resources() { } } } namespace TGCore.Localization { public class LocalizationEntry : MonoBehaviour { public Language langage; public List<string> key; public List<string> value; } public class LocalizationHolder : MonoBehaviour { public List<LocalizationEntry> languages = new List<LocalizationEntry>(); public void ReadLocalization() { //IL_007e: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"LOCALIZING..."); Dictionary<Language, Dictionary<string, string>> dictionary = (Dictionary<Language, Dictionary<string, string>>)(typeof(Localizer).GetField("m_localization", BindingFlags.Static | BindingFlags.NonPublic)?.GetValue(null)); try { foreach (LocalizationEntry item in languages.Where((LocalizationEntry x) => x.key.Count > 0 && x.value.Count > 0)) { for (int i = 0; i < item.key.Count; i++) { dictionary?[item.langage].Add(item.key[i], item.value[i]); } } } catch (Exception ex) { Debug.LogError((object)"LOCALIZATION HAS FAILED:"); Debug.LogError((object)ex); } } } } namespace TGCore.Library { public class AddDamageToUnitPart : MonoBehaviour { public enum BodyTarget { Head, RightFoot, LeftFoot, RightHand, LeftHand } private CollisionWeapon NewDamage; private CollisionSound NewSound; private MeleeWeaponAddEffect NewEffect; private MeleeWeaponSpawn NewSpawn; private Unit OwnUnit; public BodyTarget bodyTarget; private void Start() { //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_0283: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) OwnUnit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); GameObject val = (GameObject)(bodyTarget switch { BodyTarget.Head => ((Component)OwnUnit.data.head).gameObject, BodyTarget.LeftFoot => ((Component)OwnUnit.data.footLeft).gameObject, BodyTarget.RightFoot => ((Component)OwnUnit.data.footRight).gameObject, BodyTarget.LeftHand => ((Component)OwnUnit.data.leftHand).gameObject, BodyTarget.RightHand => ((Component)OwnUnit.data.rightHand).gameObject, _ => ((Component)OwnUnit.data.mainRig).gameObject, }); CollisionWeapon component = ((Component)this).GetComponent<CollisionWeapon>(); if (Object.op_Implicit((Object)(object)component)) { NewDamage = val.AddComponent<CollisionWeapon>(); NewDamage.damage = component.damage; NewDamage.impactMultiplier = component.impactMultiplier; NewDamage.onImpactForce = component.onImpactForce; NewDamage.massCap = component.massCap; NewDamage.ignoreTeamMates = component.ignoreTeamMates; NewDamage.staticDamageValue = component.staticDamageValue; NewDamage.onlyOncePerData = component.onlyOncePerData; NewDamage.cooldown = component.cooldown; NewDamage.onlyCollideWithRigs = true; NewDamage.dealDamageEvent = component.dealDamageEvent; Object.Destroy((Object)(object)component); } CollisionSound component2 = ((Component)this).GetComponent<CollisionSound>(); if (Object.op_Implicit((Object)(object)component2)) { NewSound = val.AddComponent<CollisionSound>(); NewSound.SoundEffectRef = component2.SoundEffectRef; NewSound.multiplier = component2.multiplier; Object.Destroy((Object)(object)component2); } MeleeWeaponAddEffect component3 = ((Component)this).GetComponent<MeleeWeaponAddEffect>(); if (Object.op_Implicit((Object)(object)component3)) { NewEffect = val.AddComponent<MeleeWeaponAddEffect>(); NewEffect.EffectPrefab = component3.EffectPrefab; NewEffect.ignoreTeamMates = component3.ignoreTeamMates; Object.Destroy((Object)(object)component3); } MeleeWeaponSpawn component4 = ((Component)this).GetComponent<MeleeWeaponSpawn>(); if (Object.op_Implicit((Object)(object)component4)) { NewSpawn = val.AddComponent<MeleeWeaponSpawn>(); NewSpawn.objectToSpawn = component4.objectToSpawn; NewSpawn.pos = component4.pos; NewSpawn.rot = component4.rot; NewSpawn.cd = component4.cd; Object.Destroy((Object)(object)component4); } } public void RemoveDamage() { if (Object.op_Implicit((Object)(object)NewDamage)) { Object.Destroy((Object)(object)NewDamage); } if (Object.op_Implicit((Object)(object)NewSound)) { Object.Destroy((Object)(object)NewSound); } if (Object.op_Implicit((Object)(object)NewEffect)) { Object.Destroy((Object)(object)NewEffect); } if (Object.op_Implicit((Object)(object)NewSpawn)) { Object.Destroy((Object)(object)NewSpawn); } } private void OnDestroy() { RemoveDamage(); } } public class AddEffectToRandomUnits : MonoBehaviour { public enum SelectionType { Percentage, Specific } private Team Team; private TeamSystem TeamSystem; private List<Unit> HitList = new List<Unit>(); [Header("Selection Settings")] public SelectionType selectionType; public int value; public float delay; public bool enemyTeam = true; [Header("Effect Settings")] public UnitEffectBase effectToAdd; public bool addEffectOnce; private void Start() { //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) Team = ((Component)((Component)this).transform.root).GetComponent<Unit>().Team; TeamSystem = World.Active.GetOrCreateManager<TeamSystem>(); } public void AddEffectToUnits() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) ClearHitList(); ((MonoBehaviour)this).StartCoroutine(DoEffect(TeamSystem.GetTeamUnits((Team)(((int)Team != 0) ? ((!enemyTeam) ? ((int)Team) : 0) : (enemyTeam ? 1 : ((int)Team)))))); } private IEnumerator DoEffect(List<Unit> enemyUnits) { if (selectionType == SelectionType.Percentage && enemyUnits.Count / value > 0) { for (int i = 0; i < enemyUnits.Count / value; i++) { if (!HitList.Contains(enemyUnits[i])) { AddEffect(((Component)((Component)this).transform.root).GetComponent<Unit>(), enemyUnits[i].data); HitList.Add(enemyUnits[i]); yield return (object)new WaitForSeconds(delay); } } } else { if (selectionType != SelectionType.Specific) { yield break; } for (int j = 0; j < value; j++) { if (enemyUnits.Count <= 0) { break; } Unit chosenUnit = enemyUnits[Random.Range(0, enemyUnits.Count - 1)]; if (!HitList.Contains(chosenUnit)) { AddEffect(((Component)((Component)this).transform.root).GetComponent<Unit>(), chosenUnit.data); HitList.Add(chosenUnit); yield return (object)new WaitForSeconds(delay); } } } } public void ClearHitList() { HitList.Clear(); } public void AddEffect(Unit attacker, DataHandler targetData) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)attacker != (Object)null && (!Object.op_Implicit((Object)(object)targetData) || !targetData.Dead) && Object.op_Implicit((Object)(object)targetData)) { UnitEffectBase val = UnitEffectBase.AddEffectToTarget(((Component)((Component)targetData.unit).transform).gameObject, effectToAdd); if (!Object.op_Implicit((Object)(object)val)) { GameObject val2 = Object.Instantiate<GameObject>(((Component)effectToAdd).gameObject, ((Component)targetData.unit).transform.root); val2.transform.position = ((Component)targetData.unit).transform.position; val2.transform.rotation = Quaternion.LookRotation(targetData.mainRig.position - attacker.data.mainRig.position); val = val2.GetComponent<UnitEffectBase>(); TeamHolder.AddTeamHolder(val2, ((Component)((Component)this).transform.root).gameObject); val.DoEffect(); } else if (!addEffectOnce) { ((Component)val).transform.rotation = Quaternion.LookRotation(targetData.mainRig.position - attacker.data.mainRig.position); val.Ping(); } } } } public class AddEffectToTargetOnce : MonoBehaviour { private Unit OwnUnit; public UnitEffectBase effectPrefab; public bool onlyOnce; private void Start() { OwnUnit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); } public void Go() { AddEffect(OwnUnit.data.targetData); } public void GoWithRandomTarget(float radius) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) RaycastHit[] source = Physics.SphereCastAll(((Component)this).transform.position, radius, Vector3.up, 0.1f, LayerMask.GetMask(new string[1] { "MainRig" })); Unit[] array = (from hit in source select ((Component)((RaycastHit)(ref hit)).transform.root).GetComponent<Unit>() into x where Object.op_Implicit((Object)(object)x) && !x.data.Dead && x.Team != OwnUnit.Team select x).Distinct().ToArray(); if (array.Length != 0) { AddEffect(array[Random.Range(0, array.Length)].data); } } public void AddEffect(DataHandler targetData) { //IL_007d: 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) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)OwnUnit) && Object.op_Implicit((Object)(object)targetData) && !targetData.Dead) { UnitEffectBase val = UnitEffectBase.AddEffectToTarget(((Component)targetData.unit).gameObject, effectPrefab); if (!Object.op_Implicit((Object)(object)val)) { GameObject val2 = Object.Instantiate<GameObject>(((Component)effectPrefab).gameObject, ((Component)targetData.unit).transform); val2.transform.position = ((Component)targetData.unit).transform.position; val2.transform.rotation = Quaternion.LookRotation(targetData.mainRig.position - OwnUnit.data.mainRig.position); TeamHolder.AddTeamHolder(val2, ((Component)((Component)this).transform.root).gameObject); val = val2.GetComponent<UnitEffectBase>(); val.DoEffect(); } else if (!onlyOnce) { ((Component)val).transform.rotation = Quaternion.LookRotation(targetData.mainRig.position - OwnUnit.data.mainRig.position); val.Ping(); } } } } public class AddMountOnStart : MonoBehaviour { public List<GameObject> mountPositions = new List<GameObject>(); private void Start() { //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) foreach (GameObject mountPosition in mountPositions) { mountPosition.SetActive(true); } Unit component = ((Component)this).GetComponent<Unit>(); List<GameObject> list = new List<GameObject>(); if (Object.op_Implicit((Object)(object)component.unitBlueprint) && component.unitBlueprint.UnitRiders != null && component.unitBlueprint.UnitRiders.Length != 0) { RiderHolder val = ((Component)this).gameObject.AddComponent<RiderHolder>(); List<GameObject> list2 = new List<GameObject>(); Unit val2 = default(Unit); for (int i = 0; i < component.unitBlueprint.UnitRiders.Length; i++) { GameObject[] array = component.unitBlueprint.UnitRiders[i].Spawn(((Component)this).transform.position, ((Component)this).transform.rotation, component.Team, ref val2, 1f, false, false, 0, (UnitPoolInfo?)null); if (component.CampaignUnit) { val2.SetCampaignUnit(); } list2.Add(array[0]); list.AddRange(array); ((Component)val2).gameObject.AddComponent<Mount>().EnterMount((UnitBlueprint)null, component, i); list.AddRange(array); val2.IsRider = true; if (component.RemoteInstanceId != 0) { val2.IsRiderWithLinkedMount = true; } } val.Addriders(list2); } ServiceLocator.GetService<RuntimeGarbageCollector>().AddGameObjects(list.ToArray()); List<GameObject> list3 = component.spawnedObjects.ToList(); list3.AddRange(list); component.spawnedObjects = list3.ToArray(); Mount component2 = ((Component)this).GetComponent<Mount>(); if (Object.op_Implicit((Object)(object)component2) && Object.op_Implicit((Object)(object)component2.OtherData) && component2.IsMounted) { List<GameObject> list4 = component2.OtherData.unit.spawnedObjects.ToList(); list4.AddRange(component.spawnedObjects); component2.OtherData.unit.spawnedObjects = list4.ToArray(); } } } public class AddRigidbodyThenSinkOnDeath : MonoBehaviour { private Unit OwnUnit; private bool HasDied; private Rigidbody Rig; [Header("Rigidbody Settings")] public bool addRigidbody; public float mass = 200f; public float drag; public float angularDrag; public RigidbodyInterpolation interpolation = (RigidbodyInterpolation)1; [Header("Sink Settings")] public float sinkDelay = 2f; public float sinkMultiplier = 0.3f; public bool scaleAfterDelay = true; public float scaleDelay = 15f; private float ScaleMultiplier; private void Start() { OwnUnit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); OwnUnit.data.healthHandler.AddDieAction((Action)Die); } public void Die() { //IL_006e: Unknown result type (might be due to invalid IL or missing references) if (!HasDied) { Rig = (addRigidbody ? ((Component)this).gameObject.AddComponent<Rigidbody>() : ((Component)this).GetComponent<Rigidbody>()); Rig.mass = mass; Rig.drag = drag; Rig.angularDrag = angularDrag; Rig.interpolation = interpolation; HasDied = true; ((Component)this).transform.SetParent(((Component)OwnUnit.data).transform, true); ((MonoBehaviour)this).StartCoroutine(DoSink()); } } private IEnumerator DoSink() { yield return (object)new WaitForSeconds(sinkDelay); float t2 = 0f; while (t2 < 3f) { Rigidbody rig = Rig; rig.drag *= 2f; Vector3 velocity = Rig.velocity; if (((Vector3)(ref velocity)).magnitude < 1f) { t2 += Time.deltaTime; } yield return null; } Rig.isKinematic = true; t2 = 0f; while (t2 < 30f) { Transform transform = ((Component)this).transform; transform.position += Vector3.down * Mathf.Clamp(t2 * 0.1f, 0f, 1f) * Time.deltaTime * sinkMultiplier; t2 += Time.deltaTime; if (scaleAfterDelay && t2 > scaleDelay) { ScaleMultiplier += Time.deltaTime * 0.35f; Transform transform2 = ((Component)this).transform; transform2.localScale *= Mathf.Lerp(1f, 0f, ScaleMultiplier); } yield return null; } } } public class AimForUnitTarget : MonoBehaviour { private Unit Unit; private Vector3 StartForward; public AnimationCurve lerpCurve; public float lerpSpeed; private void Start() { //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_0033: Unknown result type (might be due to invalid IL or missing references) Unit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); StartForward = ((Component)this).transform.parent.InverseTransformDirection(((Component)this).transform.forward); } private void Update() { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: 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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)Unit) && Object.op_Implicit((Object)(object)Unit.data) && Object.op_Implicit((Object)(object)Unit.data.targetData) && Object.op_Implicit((Object)(object)Unit.data.targetData.mainRig)) { Vector3 val = ((Component)this).transform.parent.TransformDirection(StartForward); Vector3 val2 = Unit.data.targetData.mainRig.position - ((Component)this).transform.position; Vector3 normalized = ((Vector3)(ref val2)).normalized; normalized.y = 0f; float num = Vector3.Angle(normalized, val); ((Component)this).transform.rotation = Quaternion.LookRotation(Vector3.Lerp(((Component)this).transform.forward, Vector3.Lerp(val, normalized, lerpCurve.Evaluate(num)), lerpSpeed * Time.deltaTime)); } } } public class AimForRandomUnit : MonoBehaviour { private TeamHolder OwnTeamHolder; public float maxRange = 30f; public float spread; public bool useRandom = true; private void Start() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) OwnTeamHolder = ((Component)this).GetComponent<TeamHolder>(); Unit val = SetTarget(); if (!Object.op_Implicit((Object)(object)val)) { return; } Rigidbody mainRig = val.data.mainRig; Compensation component = ((Component)this).GetComponent<Compensation>(); MoveTransform component2 = ((Component)this).GetComponent<MoveTransform>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2)) { ((Component)this).transform.rotation = Quaternion.LookRotation(component.GetCompensation(mainRig.position, mainRig.velocity, 0f) + 0.01f * spread * Random.insideUnitSphere); Unit component3 = OwnTeamHolder.spawner.GetComponent<Unit>(); RangeWeapon componentInParent = OwnTeamHolder.spawnerWeapon.GetComponentInParent<RangeWeapon>(); if (componentInParent.extraSpreadInMelee != 0f && Object.op_Implicit((Object)(object)component3) && component3.data.distanceToTarget < 5f) { ((Component)this).transform.Rotate(componentInParent.extraSpreadInMelee * Random.insideUnitSphere); } component2.Initialize(); } } private Unit SetTarget() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) Collider[] source = Physics.OverlapSphere(((Component)this).transform.position, maxRange, LayerMask.GetMask(new string[1] { "MainRig" })); Unit[] array = (from hit in source select ((Component)((Component)hit).transform.root).GetComponent<Unit>() into x where Object.op_Implicit((Object)(object)x) && !x.data.Dead && x.Team != OwnTeamHolder.team select x).OrderBy(delegate(Unit x) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: 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) Vector3 val = ((Component)x.data.mainRig).transform.position - ((Component)this).transform.position; return ((Vector3)(ref val)).magnitude; }).Distinct().ToArray(); if (array.Length != 0) { return array[useRandom ? Random.Range(0, array.Length - 1) : 0]; } return null; } } public class AssignMeshToParticleSystem : MonoBehaviour { public enum MeshType { MeshRenderer, SkinnedMeshRenderer, NonUnitMeshRenderer } private MeshRenderer[] AllMeshRenderers; private MeshRenderer MeshRenderer; private SkinnedMeshRenderer[] AllSkinnedMeshRenderers; private SkinnedMeshRenderer SkinnedMeshRend; private ParticleSystem[] ParticleSystems; private ParticleSystem Part; private bool MeshAssigned; public MeshType meshType; public UnityEvent findEvent; public bool disableMesh; public bool disableParticles; public bool play = true; private void Start() { //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) Part = ((Component)this).GetComponent<ParticleSystem>(); switch (meshType) { case MeshType.MeshRenderer: { AllMeshRenderers = ((Component)((Component)this).transform.root).GetComponentsInChildren<MeshRenderer>(); MeshRenderer[] allMeshRenderers = AllMeshRenderers; foreach (MeshRenderer val2 in allMeshRenderers) { if (((Component)val2).CompareTag("UnitMesh") && !MeshAssigned) { MeshRenderer = val2; MeshAssigned = true; } if (disableMesh) { ((Renderer)val2).enabled = false; } } if (Object.op_Implicit((Object)(object)MeshRenderer)) { ShapeModule shape2 = Part.shape; ((ShapeModule)(ref shape2)).meshRenderer = MeshRenderer; findEvent.Invoke(); if (play) { Part.Play(); } } if (!disableParticles) { return; } ParticleSystems = ((Component)((Component)this).transform.root).GetComponentsInChildren<ParticleSystem>(); ParticleSystem[] particleSystems = ParticleSystems; foreach (ParticleSystem val3 in particleSystems) { if (!((Component)val3).CompareTag("DontRemove")) { val3.Stop(); } } return; } case MeshType.SkinnedMeshRenderer: { AllSkinnedMeshRenderers = ((Component)((Component)this).transform.root).GetComponentsInChildren<SkinnedMeshRenderer>(); SkinnedMeshRenderer[] allSkinnedMeshRenderers = AllSkinnedMeshRenderers; foreach (SkinnedMeshRenderer val in allSkinnedMeshRenderers) { if (((Component)val).CompareTag("UnitMesh")) { SkinnedMeshRend = val; break; } } if (Object.op_Implicit((Object)(object)SkinnedMeshRend)) { ShapeModule shape = ((Component)this).GetComponent<ParticleSystem>().shape; ((ShapeModule)(ref shape)).skinnedMeshRenderer = SkinnedMeshRend; findEvent.Invoke(); if (play) { Part.Play(); } } return; } } AllMeshRenderers = ((Component)((Component)this).transform.root).GetComponentsInChildren<MeshRenderer>(); MeshRenderer[] allMeshRenderers2 = AllMeshRenderers; foreach (MeshRenderer val4 in allMeshRenderers2) { if (!MeshAssigned) { MeshRenderer = val4; MeshAssigned = true; } if (disableMesh) { ((Renderer)val4).enabled = false; } } if (Object.op_Implicit((Object)(object)MeshRenderer)) { ShapeModule shape3 = Part.shape; ((ShapeModule)(ref shape3)).meshRenderer = MeshRenderer; findEvent.Invoke(); if (play) { Part.Play(); } } } } public class CannotDrown : MonoBehaviour { public float upForceMultiplier = 2f; } public class ChangeMaterial : MonoBehaviour { private List<Material> OriginalMaterials = new List<Material>(); private Team Team; private bool hasChanged; [Header("Material Settings")] public Renderer renderer; public int index; public Material newMaterial; [Header("Team Color Settings")] public Material redMaterial; public Material blueMaterial; public void Start() { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) Material[] sharedMaterials = renderer.sharedMaterials; foreach (Material val in sharedMaterials) { OriginalMaterials.Add(Object.Instantiate<Material>(val)); } Unit component = ((Component)((Component)this).transform.root).GetComponent<Unit>(); TeamHolder component2 = ((Component)this).GetComponent<TeamHolder>(); TeamHolder componentInParent = ((Component)this).GetComponentInParent<TeamHolder>(); TeamHolder componentInChildren = ((Component)this).GetComponentInChildren<TeamHolder>(); if (Object.op_Implicit((Object)(object)component)) { Team = component.Team; } else if (Object.op_Implicit((Object)(object)component2)) { Team = component2.team; } else if (Object.op_Implicit((Object)(object)componentInParent)) { Team = componentInParent.team; } else if (Object.op_Implicit((Object)(object)componentInChildren)) { Team = componentInChildren.team; } } public void MaterialChange(float speed) { hasChanged = true; ((MonoBehaviour)this).StartCoroutine(DoMaterialChange(index, Object.Instantiate<Material>(renderer.materials[index]), newMaterial, speed)); } public void MaterialRevert(float speed) { if (hasChanged) { ((MonoBehaviour)this).StopAllCoroutines(); ((MonoBehaviour)this).StartCoroutine(DoMaterialChange(index, newMaterial, OriginalMaterials[index], speed)); } } public void MaterialTeamChange(float speed) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) ((MonoBehaviour)this).StopAllCoroutines(); ((MonoBehaviour)this).StartCoroutine(DoMaterialChange(index, Object.Instantiate<Material>(renderer.materials[index]), ((int)Team == 0) ? redMaterial : blueMaterial, speed)); } public void MaterialTeamRevert(float speed) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) ((MonoBehaviour)this).StopAllCoroutines(); ((MonoBehaviour)this).StartCoroutine(DoMaterialChange(index, ((int)Team == 0) ? redMaterial : blueMaterial, OriginalMaterials[index], speed)); } public void AllMaterialsChange(float speed) { ((MonoBehaviour)this).StopAllCoroutines(); for (int i = 0; i < renderer.materials.Length; i++) { ((MonoBehaviour)this).StartCoroutine(DoMaterialChange(i, Object.Instantiate<Material>(renderer.materials[i]), newMaterial, speed)); } } public void AllMaterialsRevert(float speed) { ((MonoBehaviour)this).StopAllCoroutines(); for (int i = 0; i < renderer.materials.Length; i++) { ((MonoBehaviour)this).StartCoroutine(DoMaterialChange(i, newMaterial, OriginalMaterials[i], speed)); } } public void AllMaterialsTeamChange(float speed) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) ((MonoBehaviour)this).StopAllCoroutines(); for (int i = 0; i < renderer.materials.Length; i++) { ((MonoBehaviour)this).StartCoroutine(DoMaterialChange(i, Object.Instantiate<Material>(renderer.materials[i]), ((int)Team == 0) ? redMaterial : blueMaterial, speed)); } } public void AllMaterialsTeamRevert(float speed) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) ((MonoBehaviour)this).StopAllCoroutines(); for (int i = 0; i < renderer.materials.Length; i++) { ((MonoBehaviour)this).StartCoroutine(DoMaterialChange(i, ((int)Team == 0) ? redMaterial : blueMaterial, OriginalMaterials[i], speed)); } } public void Stop() { ((MonoBehaviour)this).StopAllCoroutines(); } private IEnumerator DoMaterialChange(int indexToLerp, Material materialToStartWith, Material matToLerpTo, float lerpSpeed) { float t = 0f; while (t < 1f && !Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponentsInChildren<UnitEffectBase>().ToList().Find((UnitEffectBase x) => x.effectID == 1987))) { t += Time.deltaTime * lerpSpeed; renderer.materials[indexToLerp].Lerp(materialToStartWith, matToLerpTo, Mathf.Clamp(t, 0f, 1f)); yield return null; } } } public class ChangeOutline : MonoBehaviour { public Mode outlineMode; public Color outlineColor = Color.white; [Range(0f, 10f)] public float outlineWidth = 1f; public void Start() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) Outline component = ((Component)((Component)this).transform.root).GetComponent<Outline>(); if (Object.op_Implicit((Object)(object)component)) { component.OutlineMode = outlineMode; component.SetHighlightColor(outlineColor); component.OutlineWidth = outlineWidth; } } } public class CollisionWeaponToggleable : BatchedMonobehaviour, IPoolable { public enum CallEffectsOn { Rigidbodies, Ground, All } private MeleeWeaponMultiplierPoint MultiplierPoint; public bool canDealDamage; public float damage = 80f; public float selfDamageMultiplier; public float impactMultiplier = 1f; public float minVelocity; public float screenShakeMultiplier = 1f; public float onImpactForce; public float massCap = 5f; public bool ignoreTeamMates; public float teamDamage = 0.1f; public bool staticDamageValue; public bool onlyOncePerData; public bool hitFasterAfterDealDamage = true; public bool useHitDirection; public bool playSoundWhenHitNonRigidbodies = true; private readonly List<DataHandler> HitDatas = new List<DataHandler>(); private Holdable Holdable; private DataHandler ConnectedData; [HideInInspector] public List<Rigidbody> protectedRigs = new List<Rigidbody>(); private CollisionWeaponEffect[] MeleeWeaponEffects; public Weapon weapon; public UnityEvent dealDamageEvent; private CollisionSound CollisionSound; public Damagable lastHitHealth; public float cooldown; private float SinceLastDamage; [HideInInspector] public bool onlyCollideWithRigs; private Level MyLevel; private Unit OwnUnit; public CallEffectsOn callEffectsOn; private Rigidbody Rig; private Action<Collision, float> CollisionAction; private Action<Collision, float, Vector3> DealDamageAction; public Action ReleaseSelf { get; set; } public bool IsManagedByPool { get; set; } protected override void Start() { ((BatchedMonobehaviour)this).Start(); CollisionSound = ((Component)this).GetComponent<CollisionSound>(); Rig = ((Component)this).GetComponent<Rigidbody>(); Holdable = ((Component)this).GetComponent<Holdable>(); OwnUnit = GetOwnUnit(); if (!Object.op_Implicit((Object)(object)weapon) && Object.op_Implicit((Object)(object)((Component)this).GetComponent<Weapon>())) { weapon = ((Component)this).GetComponent<Weapon>(); } MeleeWeaponEffects = ((Component)this).GetComponents<CollisionWeaponEffect>(); MultiplierPoint = ((Component)this).GetComponentInChildren<MeleeWeaponMultiplierPoint>(); if (Object.op_Implicit((Object)(object)weapon)) { damage *= weapon.levelMultiplier; } MyLevel = ((Component)this).GetComponent<Level>(); if (Object.op_Implicit((Object)(object)MyLevel)) { onImpactForce *= Mathf.Pow((float)MyLevel.level, 1.5f); massCap *= Mathf.Pow((float)MyLevel.level, 1.5f); } } private Unit GetOwnUnit() { TeamHolder component = ((Component)this).GetComponent<TeamHolder>(); if (Object.op_Implicit((Object)(object)component)) { return ((Component)component.spawner.transform.root).GetComponent<Unit>(); } Unit component2 = ((Component)((Component)this).transform.root).GetComponent<Unit>(); if (Object.op_Implicit((Object)(object)component2)) { return component2; } if (Object.op_Implicit((Object)(object)ConnectedData)) { return ConnectedData.unit; } return null; } public override void BatchedUpdate() { if (cooldown != 0f) { SinceLastDamage += Time.deltaTime; } } private void OnCollisionEnter(Collision collision) { //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_044e: Unknown result type (might be due to invalid IL or missing references) //IL_045e: Unknown result type (might be due to invalid IL or missing references) //IL_04a8: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_04d6: Unknown result type (might be due to invalid IL or missing references) //IL_04db: Unknown result type (might be due to invalid IL or missing references) //IL_04f0: Unknown result type (might be due to invalid IL or missing references) //IL_04fb: Unknown result type (might be due to invalid IL or missing references) //IL_0500: Unknown result type (might be due to invalid IL or missing references) //IL_0505: Unknown result type (might be due to invalid IL or missing references) //IL_05bf: Unknown result type (might be due to invalid IL or missing references) //IL_05c9: Unknown result type (might be due to invalid IL or missing references) //IL_05e7: Unknown result type (might be due to invalid IL or missing references) //IL_05f1: Unknown result type (might be due to invalid IL or missing references) //IL_0539: Unknown result type (might be due to invalid IL or missing references) //IL_053b: Unknown result type (might be due to invalid IL or missing references) //IL_0546: Unknown result type (might be due to invalid IL or missing references) //IL_0633: Unknown result type (might be due to invalid IL or missing references) //IL_064a: Unknown result type (might be due to invalid IL or missing references) //IL_0579: Unknown result type (might be due to invalid IL or missing references) //IL_057b: Unknown result type (might be due to invalid IL or missing references) //IL_0586: Unknown result type (might be due to invalid IL or missing references) //IL_069b: Unknown result type (might be due to invalid IL or missing references) if (onlyCollideWithRigs && !Object.op_Implicit((Object)(object)collision.rigidbody)) { return; } CollisionAction?.Invoke(collision, 0f); if (!canDealDamage || (Object.op_Implicit((Object)(object)weapon) && ((object)weapon).GetType() == typeof(MeleeWeapon) && !((MeleeWeapon)weapon).canDealDamage)) { return; } float num = 0f; Vector3 val; if (Object.op_Implicit((Object)(object)Rig)) { if (Object.op_Implicit((Object)(object)collision.rigidbody)) { val = collision.impulse; num = ((Vector3)(ref val)).magnitude / (Rig.mass + 10f) * 0.3f; } else { val = collision.impulse; num = ((Vector3)(ref val)).magnitude / Rig.mass * 0.3f; } } num *= impactMultiplier; num = Mathf.Clamp(num, 0f, 2f); if (num < 1f) { return; } if (!Object.op_Implicit((Object)(object)collision.rigidbody)) { DoScreenShake(num, collision); if (callEffectsOn == CallEffectsOn.All || callEffectsOn == CallEffectsOn.Ground) { DoCollisionEffects(collision.transform, collision); } if (Object.op_Implicit((Object)(object)CollisionSound) && playSoundWhenHitNonRigidbodies) { CollisionSound.DoEffect(collision.transform, collision, num); } } if (minVelocity != 0f && Object.op_Implicit((Object)(object)Rig)) { val = Rig.velocity; if (((Vector3)(ref val)).magnitude < minVelocity) { return; } } if (!Object.op_Implicit((Object)(object)ConnectedData) && Object.op_Implicit((Object)(object)Holdable) && Holdable.held) { ConnectedData = Holdable.holderData; } if ((Object)(object)collision.transform.root == (Object)(object)((Component)this).transform.root || (Object.op_Implicit((Object)(object)ConnectedData) && (Object)(object)((Component)ConnectedData).transform.root == (Object)(object)collision.transform.root) || !Object.op_Implicit((Object)(object)collision.rigidbody) || protectedRigs.Contains(collision.rigidbody) || SinceLastDamage < cooldown) { return; } SinceLastDamage = 0f; DataHandler componentInParent = ((Component)collision.rigidbody).GetComponentInParent<DataHandler>(); Damagable componentInParent2 = ((Component)collision.rigidbody).GetComponentInParent<Damagable>(); if (Object.op_Implicit((Object)(object)componentInParent2)) { if (Object.op_Implicit((Object)(object)componentInParent) && onlyOncePerData) { if (HitDatas.Contains(componentInParent)) { return; } HitDatas.Add(componentInParent); } if (Object.op_Implicit((Object)(object)weapon) && (Object)(object)lastHitHealth == (Object)(object)componentInParent2) { return; } lastHitHealth = componentInParent2; if (Object.op_Implicit((Object)(object)CollisionSound)) { CollisionSound.DoEffect(collision.transform, collision, num); } Unit val2 = null; if (Object.op_Implicit((Object)(object)componentInParent)) { val2 = ((Component)componentInParent).GetComponentInParent<Unit>(); } if (Object.op_Implicit((Object)(object)val2) && Object.op_Implicit((Object)(object)OwnUnit) && val2.Team == OwnUnit.Team && ignoreTeamMates) { return; } if (!Object.op_Implicit((Object)(object)Holdable) && Object.op_Implicit((Object)(object)OwnUnit) && OwnUnit.data.Dead) { Object.Destroy((Object)(object)this); return; } float num2 = num; if (staticDamageValue) { num2 = 1f; } if (Object.op_Implicit((Object)(object)MultiplierPoint) && Vector3.Distance(((ContactPoint)(ref collision.contacts[0])).point, ((Component)MultiplierPoint).transform.position) < MultiplierPoint.range) { num2 *= MultiplierPoint.multiplier; } if (Object.op_Implicit((Object)(object)val2) && Object.op_Implicit((Object)(object)OwnUnit) && val2.Team == OwnUnit.Team) { num2 *= teamDamage; } Vector3 val3 = ((Component)this).transform.forward; if (useHitDirection) { val3 = collision.transform.position - ((Component)this).transform.position; } if (Object.op_Implicit((Object)(object)componentInParent)) { WilhelmPhysicsFunctions.AddForceWithMinWeight(componentInParent.mainRig, (staticDamageValue ? 5f : Mathf.Sqrt(num * 50f)) * val3 * onImpactForce, (ForceMode)1, massCap); WilhelmPhysicsFunctions.AddForceWithMinWeight(collision.rigidbody, (staticDamageValue ? 5f : Mathf.Sqrt(num * 50f)) * val3 * onImpactForce, (ForceMode)1, massCap); } if (collision.rigidbody.mass < Rig.mass) { Rigidbody rigidbody = collision.rigidbody; rigidbody.velocity *= 0.6f; if (Object.op_Implicit((Object)(object)componentInParent)) { Rigidbody mainRig = componentInParent.mainRig; mainRig.velocity *= 0.6f; } } if (!Object.op_Implicit((Object)(object)OwnUnit)) { OwnUnit = GetOwnUnit(); } DealDamageAction?.Invoke(collision, damage * num2, val3); lastHitHealth.TakeDamage(damage * num2, val3, OwnUnit, (DamageType)0); if (selfDamageMultiplier != 0f && Object.op_Implicit((Object)(object)OwnUnit)) { ((Damagable)OwnUnit.data.healthHandler).TakeDamage(damage * num2 * selfDamageMultiplier, val3, (Unit)null, (DamageType)0); } UnityEvent obj = dealDamageEvent; if (obj != null) { obj.Invoke(); } if (Object.op_Implicit((Object)(object)weapon) && hitFasterAfterDealDamage) { Weapon obj2 = weapon; obj2.internalCounter += Random.Range(0f, weapon.internalCooldown * 0.5f); } if (Object.op_Implicit((Object)(object)componentInParent) && (callEffectsOn == CallEffectsOn.All || callEffectsOn == CallEffectsOn.Rigidbodies)) { DoCollisionEffects(((Component)componentInParent.mainRig).transform, collision); } } else if (Object.op_Implicit((Object)(object)CollisionSound)) { CollisionSound.DoEffect(collision.transform, collision, num); } DoScreenShake(num, collision); } private void DoCollisionEffects(Transform targetTransform, Collision collision) { if (MeleeWeaponEffects != null && MeleeWeaponEffects.Length != 0) { CollisionWeaponEffect[] meleeWeaponEffects = MeleeWeaponEffects; foreach (CollisionWeaponEffect val in meleeWeaponEffects) { val.DoEffect(targetTransform, collision); } } } private void DoScreenShake(float impact, Collision collision) { //IL_001c: 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) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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) if ((Object)(object)ScreenShake.Instance != (Object)null) { ScreenShake.Instance.AddForce(((Component)this).transform.forward * Mathf.Sqrt(impact * 0.5f) * 0.5f * screenShakeMultiplier, ((ContactPoint)(ref collision.contacts[0])).point); } } public void AddCollisionAction(Action<Collision, float> action) { CollisionAction = (Action<Collision, float>)Delegate.Combine(CollisionAction, action); } public void AddDealDamageAction(Action<Collision, float, Vector3> action) { DealDamageAction = (Action<Collision, float, Vector3>)Delegate.Combine(DealDamageAction, action); } public void Initialize() { } public void Reset() { } public void Release() { HitDatas.Clear(); } public void SetCanDealDamage(bool value) { canDealDamage = value; } } public class ConditionalProjectileHitEvent : MonoBehaviour { private ProjectileHit Hit; public UnityEvent hitEvent = new UnityEvent(); public float delay; private void Awake() { Hit = ((Component)this).GetComponent<ProjectileHit>(); } public void AddEvent() { //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) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown List<HitEvents> list = new List<HitEvents>(Hit.hitEvents) { new HitEvents { hitEvent = hitEvent, eventDelay = delay } }; Hit.hitEvents = list.ToArray(); } } public class ConnectJointToUnitPart : MonoBehaviour { public enum BodyPart { Head, Torso, Hip, ArmLeft, ArmRight, ElbowLeft, ElbowRight, LegLeft, LegRight, KneeLeft, KneeRight } private bool Done; private DataHandler OwnData; public BodyPart bodyPart; public void Go() { if (!Done) { Done = true; OwnData = ((Component)((Component)this).transform.root).GetComponent<Unit>().data; Transform val = (Transform)(bodyPart switch { BodyPart.Head => OwnData.head, BodyPart.Torso => OwnData.torso, BodyPart.Hip => ((Component)OwnData.hip).transform, BodyPart.ArmLeft => OwnData.leftArm, BodyPart.ArmRight => OwnData.rightArm, BodyPart.ElbowLeft => OwnData.leftHand, BodyPart.ElbowRight => OwnData.rightHand, BodyPart.LegLeft => OwnData.legLeft, BodyPart.LegRight => OwnData.legRight, BodyPart.KneeLeft => OwnData.footLeft, BodyPart.KneeRight => OwnData.footRight, _ => OwnData.torso, }); ConfigurableJoint component = ((Component)this).GetComponent<ConfigurableJoint>(); if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)component)) { ((Joint)component).connectedBody = ((Component)val).GetComponent<Rigidbody>(); } } } } public class DestroyRootUnit : MonoBehaviour { private Unit Unit; private void Start() { Unit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); } public void DoDestruction() { Unit unit = Unit; if (unit != null) { unit.DestroyUnit(); } } } public class Effect_Disintegrate : UnitEffectBase { private Unit OwnUnit; private UnitColorHandler ColorHandler; private bool Destroying; public float damage; public UnityEvent destroyEvent = new UnityEvent(); public bool destroyRoot = true; public bool alwaysDestroy; public float destroyDelay; public float effectDelay = 0.01f; public Material mat; private void Awake() { OwnUnit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); ColorHandler = ((Component)OwnUnit.data).GetComponent<UnitColorHandler>(); } public override void DoEffect() { OwnUnit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); ColorHandler = ((Component)OwnUnit.data).GetComponent<UnitColorHandler>(); ((MonoBehaviour)this).StartCoroutine(AddEffect()); } public override void Ping() { ((MonoBehaviour)this).StartCoroutine(AddEffect()); } private IEnumerator AddEffect() { yield return (object)new WaitForSeconds(effectDelay); if (Object.op_Implicit((Object)(object)OwnUnit)) { ((Damagable)OwnUnit.data.healthHandler).TakeDamage(damage, Vector3.zero, (Unit)null, (DamageType)0); if (OwnUnit.data.Dead || alwaysDestroy) { ((MonoBehaviour)this).StartCoroutine(DestroyUnit()); } } } private IEnumerator DestroyUnit() { if (!Object.op_Implicit((Object)(object)OwnUnit) || Destroying) { yield break; } Destroying = true; destroyEvent.Invoke(); yield return (object)new WaitForSeconds(destroyDelay); ColorHandler.SetMaterial(mat); if (destroyRoot) { if (Object.op_Implicit((Object)(object)OwnUnit) && Object.op_Implicit((Object)(object)((Component)OwnUnit).GetComponent<GameObjectEntity>()) && World.Active.GetOrCreateManager<TeamSystem>().GetTeamUnits(OwnUnit.Team).Contains(OwnUnit)) { World.Active.GetOrCreateManager<TeamSystem>().RemoveEntity(((Component)OwnUnit).GetComponent<GameObjectEntity>().Entity, OwnUnit.Team, OwnUnit); } OwnUnit.DestroyUnit(); } } } public class Effect_Transformation : UnitEffectBase { public enum TransformState { None, Transforming, Transformed, Reverted } private TransformState CurrentState; private float EffectDealt; private float StoredHealth; private bool StoredAlive; private Unit Unit; private CameraAbilityPossess Possess; private DragHandler DragHandler; private RigidbodyHolder RigHolder; private List<Vector2> OriginalDrags; private UnitColorHandler ColorHandler; private Unparent Unparent; public UnityEvent globalEvent = new UnityEvent(); public float globalDelay = 0.3f; [Header("Pre-Transform Settings")] [Range(0f, 1f)] public float percentAffectedThreshold; public float transformDelay = 3f; public float damageOverTime = 100f; public float effectOverTime = 100f; public float dragOverTime = 1f; [Header("Transform Settings")] public UnitBlueprint unitToTransformInto; public UnitColorInstance color = new UnitColorInstance(); [Header("Revert Settings")] public float revertDelay = 6f; public bool keepOldHealth = true; private void Awake() { Unit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); DragHandler = ((Component)Unit).GetComponentInChildren<DragHandler>(); RigHolder = Unit.data.allRigs; ColorHandler = ((Component)Unit).GetComponentInChildren<UnitColorHandler>(); Possess = ((Component)MainCam.instance).GetComponentInParent<CameraAbilityPossess>(); Unparent = ((Component)this).GetComponent<Unparent>(); OriginalDrags = new List<Vector2>(RigHolder.AllDrags); } public override void DoEffect() { if (!Object.op_Implicit((Object)(object)((Component)Unit).GetComponent<SpawnerBlueprintHolder>())) { ((MonoBehaviour)this).StartCoroutine(BeginTransformation()); } } public override void Ping() { } private IEnumerator BeginTransformation() { yield return (object)new WaitForSeconds(SetState(TransformState.Transforming, doEvent: false)); if (!Object.op_Implicit((Object)(object)Unit) || Unit.data.Dead || Unit.data.immunityForSeconds > 0f || Object.op_Implicit((Object)(object)((Component)Unit).GetComponentInChildren<UnKillable>())) { yield break; } float t = 0f; while (t < transformDelay && Object.op_Implicit((Object)(object)Unit) && !Unit.data.Dead) { EffectDealt += effectOverTime * Time.deltaTime; ((Damagable)Unit.data.healthHandler).TakeDamage(damageOverTime * Time.deltaTime, Vector3.zero, (Unit)null, (DamageType)0); for (int i = 0; i < RigHolder.AllDrags.Length; i++) { RigHolder.AllDrags[i].x += dragOverTime * Time.deltaTime; RigHolder.AllDrags[i].y += dragOverTime * Time.deltaTime; } if (Object.op_Implicit((Object)(object)DragHandler)) { DragHandler.UpdateDrag(); } ColorHandler.SetColor(color, EffectDealt / (Unit.data.maxHealth * percentAffectedThreshold)); t += Time.deltaTime; yield return null; } if (Object.op_Implicit((Object)(object)Unit)) { if (EffectDealt / Unit.data.maxHealth >= percentAffectedThreshold) { StoredHealth = Unit.data.health; ((MonoBehaviour)this).StartCoroutine(DoTransform()); } else { ((MonoBehaviour)this).StartCoroutine(DontTransform()); } } } private IEnumerator DoTransform() { if (!Object.op_Implicit((Object)(object)Unit)) { yield break; } yield return (object)new WaitForSeconds(SetState(TransformState.Transformed)); if (!Object.op_Implicit((Object)(object)Unit)) { yield break; } Unit newUnit = unitToTransformInto.Spawn(Unit.data.mainRig.position, Unit.data.mainRig.rotation, Unit.Team, 1f, (UnitPoolInfo?)null)[0].GetComponent<Unit>(); ((Component)newUnit).gameObject.AddComponent<SpawnerBlueprintHolder>().unitBlueprint = Unit.unitBlueprint; if (Object.op_Implicit((Object)(object)Possess) && (Object)(object)Possess.currentUnit == (Object)(object)Unit) { Possess.EnterUnit(newUnit); } Rigidbody[] allRigs = newUnit.data.allRigs.AllRigs; foreach (Rigidbody rig in allRigs) { rig.velocity = Unit.data.mainRig.velocity; } ((Component)this).transform.SetParent(((Component)newUnit.data.mainRig).transform); ((Component)this).transform.localPosition = Vector3.zero; StoredAlive = !Unit.data.Dead; Unit.DestroyUnit(); yield return (object)new WaitForSeconds(revertDelay); if (!StoredAlive) { newUnit.data.healthHandler.Die((Unit)null); } if (!Object.op_Implicit((Object)(object)newUnit)) { yield break; } yield return (object)new WaitForSeconds(SetState(TransformState.Reverted)); if (!Object.op_Implicit((Object)(object)newUnit)) { yield break; } if (StoredAlive) { Unit = ((Component)newUnit).GetComponent<SpawnerBlueprintHolder>().unitBlueprint.Spawn(newUnit.data.mainRig.position, newUnit.data.mainRig.rotation, Unit.Team, 1f, (UnitPoolInfo?)null)[0].GetComponent<Unit>(); if (Object.op_Implicit((Object)(object)Possess) && (Object)(object)Possess.currentUnit == (Object)(object)Unit) { Possess.EnterUnit(Unit); } Rigidbody[] allRigs2 = Unit.data.allRigs.AllRigs; foreach (Rigidbody rig2 in allRigs2) { rig2.velocity = newUnit.data.mainRig.velocity; } } if (Object.op_Implicit((Object)(object)Unparent)) { Unparent.Go(); } newUnit.DestroyUnit(); yield return (object)new WaitUntil((Func<bool>)(() => !Object.op_Implicit((Object)(object)Unit) || Unit.data.lifeTime > 0.3f || Unit.data.Dead)); if (Object.op_Implicit((Object)(object)Unit) && !Unit.data.Dead && keepOldHealth) { ((Damagable)Unit.data.healthHandler).TakeDamage(Unit.data.maxHealth - StoredHealth, Vector3.zero, (Unit)null, (DamageType)0); } } private IEnumerator DontTransform() { yield return (object)new WaitForSeconds(SetState(TransformState.None, doEvent: false)); if (!Object.op_Implicit((Object)(object)Unit) || Unit.data.Dead) { yield break; } float t = 0f; while (t < 1f) { for (int i = 0; i < RigHolder.AllDrags.Length; i++) { RigHolder.AllDrags[i].x = Mathf.Lerp(RigHolder.AllDrags[i].x, OriginalDrags[i].x, t); RigHolder.AllDrags[i].y = Mathf.Lerp(RigHolder.AllDrags[i].y, OriginalDrags[i].y, t); } if (Object.op_Implicit((Object)(object)DragHandler)) { DragHandler.UpdateDrag(); } ColorHandler.SetColor(color, 1f - t); t += Time.deltaTime; yield return null; } Object.Destroy((Object)(object)((Component)this).gameObject); } public float SetState(TransformState state, bool doEvent = true) { CurrentState = state; if (doEvent) { globalEvent.Invoke(); } return globalDelay; } } public class Effect_Weakening : UnitEffectBase { public float dragMultiplier; public float speedMultiplier; public Material mat; public UnitColorInstance color; public override void DoEffect() { ((UnitEffectBase)this).Ping(); } public override void Ping() { if (((Component)((Component)this).transform.root).GetComponent<Unit>().unitBlueprint.Name.Contains("One Punch Man") || ((Component)((Component)this).transform.root).GetComponent<Unit>().unitBlueprint.Name.Contains("Seraphim")) { Object.Destroy((Object)(object)((Component)this).gameObject); } if (((Object)((Component)this).transform.root).name == "AFTERIMAGE") { Object.Destroy((Object)(object)((Component)this).gameObject); return; } Vector2[] allDrags = ((Component)((Component)this).transform.root).GetComponentInChildren<RigidbodyHolder>().AllDrags; for (int i = 0; i < allDrags.Length; i++) { allDrags[i].x *= dragMultiplier; allDrags[i].y *= dragMultiplier; } if (Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponentInChildren<DragHandler>())) { ((Component)((Component)this).transform.root).GetComponentInChildren<DragHandler>().UpdateDrag(); } if (Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler) && Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.rightWeapon)) { Weapon rightWeapon = ((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.rightWeapon; rightWeapon.internalCooldown /= speedMultiplier; Weapon rightWeapon2 = ((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.rightWeapon; rightWeapon2.levelMultiplier *= base.damageMultiplier; Level obj = GameObjectExtensions.FetchComponent<Level>(((Component)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.rightWeapon).gameObject); obj.levelMultiplier *= base.damageMultiplier; } if (Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler) && Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.leftWeapon)) { Weapon leftWeapon = ((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.leftWeapon; leftWeapon.internalCooldown /= speedMultiplier; Weapon leftWeapon2 = ((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.leftWeapon; leftWeapon2.levelMultiplier *= base.damageMultiplier; Level obj2 = GameObjectExtensions.FetchComponent<Level>(((Component)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.leftWeapon).gameObject); obj2.levelMultiplier *= base.damageMultiplier; } if (Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponentInChildren<HoldingHandlerMulti>())) { foreach (GameObject spawnedWeapon in ((Component)((Component)this).transform.root).GetComponentInChildren<HoldingHandlerMulti>().spawnedWeapons) { Weapon component = spawnedWeapon.GetComponent<Weapon>(); component.internalCooldown /= speedMultiplier; Weapon component2 = spawnedWeapon.GetComponent<Weapon>(); component2.levelMultiplier *= base.damageMultiplier; Level obj3 = GameObjectExtensions.FetchComponent<Level>(spawnedWeapon); obj3.levelMultiplier *= base.damageMultiplier; } } if (Object.op_Implicit((Object)(object)mat)) { ((Component)((Component)this).transform.root).GetComponentInChildren<UnitColorHandler>().SetMaterial(mat); } if (color.colorName != "") { ((Component)((Component)this).transform.root).GetComponentInChildren<UnitColorHandler>().SetColor(color, 1f); } } public void OnDestroy() { Vector2[] allDrags = ((Component)((Component)this).transform.root).GetComponentInChildren<RigidbodyHolder>().AllDrags; for (int i = 0; i < allDrags.Length; i++) { allDrags[i].x /= dragMultiplier; allDrags[i].y /= dragMultiplier; } if (Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponentInChildren<DragHandler>())) { ((Component)((Component)this).transform.root).GetComponentInChildren<DragHandler>().UpdateDrag(); } if (Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler) && Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.rightWeapon)) { Weapon rightWeapon = ((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.rightWeapon; rightWeapon.internalCooldown *= speedMultiplier; Weapon rightWeapon2 = ((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.rightWeapon; rightWeapon2.levelMultiplier /= base.damageMultiplier; Level obj = GameObjectExtensions.FetchComponent<Level>(((Component)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.rightWeapon).gameObject); obj.levelMultiplier /= base.damageMultiplier; } if (Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler) && Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.leftWeapon)) { Weapon leftWeapon = ((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.leftWeapon; leftWeapon.internalCooldown *= speedMultiplier; Weapon leftWeapon2 = ((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.leftWeapon; leftWeapon2.levelMultiplier /= base.damageMultiplier; Level obj2 = GameObjectExtensions.FetchComponent<Level>(((Component)((Component)((Component)this).transform.root).GetComponent<Unit>().WeaponHandler.leftWeapon).gameObject); obj2.levelMultiplier /= base.damageMultiplier; } if (!Object.op_Implicit((Object)(object)((Component)((Component)this).transform.root).GetComponentInChildren<HoldingHandlerMulti>())) { return; } foreach (GameObject spawnedWeapon in ((Component)((Component)this).transform.root).GetComponentInChildren<HoldingHandlerMulti>().spawnedWeapons) { Weapon component = spawnedWeapon.GetComponent<Weapon>(); component.internalCooldown *= speedMultiplier; Weapon component2 = spawnedWeapon.GetComponent<Weapon>(); component2.levelMultiplier /= base.damageMultiplier; Level obj3 = GameObjectExtensions.FetchComponent<Level>(spawnedWeapon); obj3.levelMultiplier /= base.damageMultiplier; } } } public class Effect_Zombie : UnitEffectBase { public enum ZombificationType { Standard, Virus, Support } private Unit Unit; private GameObject Weapon1; private GameObject Weapon2; private bool Done; [Header("Zombification Settings")] public ZombificationType zombieType; private float CurrentProgress; public float progressToAdd = 100f; [Header("Revive Settings")] public UnityEvent killEvent; public UnityEvent reviveEvent; public float reviveDelay; [Range(0f, 1f)] public float reviveHealthMultiplier = 0.5f; public float reviveTargetingPriority = 0.2f; public GameObject reviveWeapon; public List<GameObject> reviveAbilities = new List<GameObject>(); public GameObject zombieStats; [Header("Effect Settings")] public UnityEvent doEffectEvent; public UnityEvent pingEvent; [Header("Color Settings")] public UnitColorInstance color = new UnitColorInstance(); private float LerpProgress; public float lerpSpeed = 1f; private void Awake() { Unit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); } public override void DoEffect() { //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Invalid comparison between Unknown and I4 Unit = ((Component)((Component)this).transform.root).GetComponent<Unit>(); if (Object.op_Implicit((Object)(object)Unit.holdingHandler)) { Weapon1 = (Object.op_Implicit((Object)(object)Unit.holdingHandler.rightObject) ? ((Component)Unit.holdingHandler.rightObject).gameObject : null); Weapon2 = (Object.op_Implicit((Object)(object)Unit.holdingHandler.leftObject) ? ((Component)Unit.holdingHandler.leftObject).gameObject : null); if (zombieType != ZombificationType.Virus) { if (Object.op_Implicit((Object)(object)Weapon1) && Object.op_Implicit((Object)(object)Weapon1.GetComponent<Holdable>())) { Weapon1.GetComponent<Holdable>().ignoreDissarm = true; } if (Object.op_Implicit((Object)(object)Weapon2) && Object.op_Implicit((Object)(object)Weapon2.GetComponent<Holdable>())) { Weapon2.GetComponent<Holdable>().ignoreDissarm = true; } } } UnitEffectBase val = ((Component)Unit).GetComponentsInChildren<UnitEffectBase>().ToList().Find((UnitEffectBase x) => x.effectID == 1984); if ((Object.op_Implicit((Object)(object)val) && (Object)(object)val != (Object)(object)this) || (int)Unit.unitType == 1) { Object.Destroy((Object)(object)((Component)this).gameObject); Unit.data.healthHandler.RemoveDieAction((Action)Revive); } else { Unit.data.healthHandler.AddDieAction((Action)Revive); } ApplyEffect(); doEffectEvent.Invoke(); } public override void Ping() { ApplyEffect(); pingEvent.Invoke(); } public void ApplyEffect() { if (!Done && Object.op_Implicit((Object)(object)Unit)) { CurrentProgress += Mathf.Clamp(progressToAdd / Unit.data.health, 0f, 1f); if (zombieType != ZombificationType.Support) { AddLerpProgress(); } else { ((MonoBehaviour)this).StartCoroutine(DoZombieChecks()); } } } public void AddLerpProgress() { if (!Done || zombieType == ZombificationType.Support) { ((MonoBehaviour)this).StopCoroutine(DoLerp()); ((MonoBehaviour)this).StartCoroutine(DoLerp()); } } private IEnumerator DoLerp() { if (!Done || zombieType == ZombificationType.Support) { float c = 0f; float startProgress = LerpProgress; while (c < 1f) { c += Mathf.Clamp(Time.deltaTime * lerpSpeed, 0f, 1f); LerpProgress = Mathf.Lerp(startProgress, CurrentProgress, c); yield return null; } ((MonoBehaviour)this).StartCoroutine(DoZombieChecks()); } } private IEnumerator DoZombieChecks() { if (Done) { yield break; } yield return (object)new WaitForSeconds(0.05f); if (Done) { yield break; } if (CurrentProgress >= 0.5f) { Unit.data.healthHandler.willBeRewived = true; if (Object.op_Implicit((Object)(object)((Component)Unit).GetComponentInChildren<AddRigidbodyOnDeath>())) { AddRigidbodyOnDeath[] componentsInChildren = ((Component)Unit).GetComponentsInChildren<AddRigidbodyOnDeath>(); foreach (AddRigidbodyOnDeath script4 in componentsInChildren) { Unit.data.healthHandler.RemoveDieAction((Action)script4.Die); Object.Destroy((Object)(object)script4); } } if (Object.op_Implicit((Object)(object)((Component)Unit).GetComponentInChildren<SinkOnDeath>())) { SinkOnDeath[] componentsInChildren2 = ((Component)Unit).GetComponentsInChildren<SinkOnDeath>(); foreach (SinkOnDeath script3 in componentsInChildren2) { Unit.data.healthHandler.RemoveDieAction((Action)script3.Sink); Object.Destroy((Object)(object)script3); } } if (Object.op_Implicit((Object)(object)((Component)Unit).GetComponentInChildren<RemoveJointsOnDeath>())) { RemoveJointsOnDeath[] componentsInChildren3 = ((Component)Unit).GetComponentsInChildren<RemoveJointsOnDeath>(); foreach (RemoveJointsOnDeath script2 in componentsInChildren3) { Unit.data.healthHandler.RemoveDieAction((Action)script2.Die); Object.Destroy((Object)(object)script2); } } if (Object.op_Implicit((Object)(object)((Component)Unit).GetComponentInChildren<DisableAllSkinnedClothes>())) { DisableAllSkinnedClothes[] componentsInChildren4 = ((Component)Unit).GetComponentsInChildren<DisableAllSkinnedClothes>(); foreach (DisableAllSkinnedClothes script in componentsInChildren4) { Object.Destroy((Object)(object)script); } } } if (CurrentProgress >= 1f && zombieType != ZombificationType.Support) { ((Damagable)Unit.data.healthHandler).TakeDamage(Unit.data.maxHealth, Vector3.zero, Unit, (DamageType)3); } } public void Revive() { if (!Done && Unit.data.healthHandler.willBeRewived) { Done = true; ((MonoBehaviour)this).StartCoroutine(DoRevive()); } } public IEnumerator DoRevive() { ServiceLocator.GetService<GameModeService>().CurrentGameMode.OnUnitDied(Unit); Team newTeam = ((zombieType != ZombificationType.Support) ? ((Team)(((int)Unit.data.team == 0) ? 1 : 0)) : Unit.data.team); Unit.data.team = newTeam; Unit.Team = newTeam; Unit.targetingPriorityMultiplier = reviveTargetingPriority; GameObjectEntity goe = ((Component)Unit).GetComponent<GameObjectEntity>(); goe.EntityManager.RemoveComponent<IsDead>(goe.Entity); goe.EntityManager.AddComponent(goe.Entity, ComponentType.Create<UnitTag>()); goe.EntityManager.SetSharedComponentData<Team>(goe.Entity, new Team { Value = (int)Unit.Team }); World.Active.GetOrCreateManager<TeamSystem>().AddUnit(goe.Entity, ((Component)Unit).gameObject, ((Component)Unit).transform, Unit.data.mainRig, Unit.data, newTeam, Unit, false); if (zombieType == ZombificationType.Support) { AddLerpProgress(); } killEvent.Invoke(); yield return (object)new WaitForSeconds(reviveDelay); Unit.data.Dead = false; Unit.dead = false; Unit.data.hasBeenRevived = true; Unit.data.healthHandler.willBeRewived = false; Unit.data.ragdollControl = 1f; Unit.data.muscleControl = 1f; Unit.data.health = Unit.data.maxHealth * reviveHealthMultiplier; if (zombieType == ZombificationType.Virus) { if (Object.op_Implicit((Object)(object)Unit.holdingHandler)) { if (Object.op_Implicit((Object)(object)Weapon1)) { Weapon1.AddComponent<RemoveAfterSeconds>().shrink = true; } if (Object.op_Implicit((Object)(object)Weapon2)) { Weapon1.AddComponent<RemoveAfterSeconds>().shrink = true; } Unit.holdingHandler.LetGoOfAll(); Unit.unitBlueprint.SetWeapon(Unit, newTeam, reviveWeapon, new PropItemData(), (HandType)0, Unit.data.mainRig.rotation, new List<GameObject>(), false); Unit.unitBlueprint.SetWeapon(Unit, newTeam, reviveWeapon, new PropItemData(), (HandType)1, Unit.data.mainRig.rotation, new List<GameObject>(), false); } else if (Object.op_Implicit((Object)(object)((Component)Unit).GetComponentInChildren<HoldingHandlerMulti>())) { HoldingHandlerMulti multi = ((Component)Unit).GetComponentInChildren<HoldingHandlerMulti>(); foreach (GameObject w in multi.spawnedWeapons) { w.AddComponent<RemoveAfterSeconds>().shrink = true; } multi.LetGoOfAll(); foreach (HandLeft left in multi.otherHands) { multi.SetWeapon(((Component)left).gameObject, Object.Instantiate<GameObject>(reviveWeapon, ((Component)left).transform.position, ((Component)left).transform.rotation, ((Component)Unit).transform)); } foreach (HandRight right in multi.mainHands) { multi.SetWeapon(((Component)right).gameObject, Object.Instantiate<GameObject>(reviveWeapon, ((Component)right).transform.position, ((Component)right).transform.rotation, ((Component)Unit).transform)); } } } else { if (Object.op_Implicit((Object)(object)Weapon1) && Object.op_Implicit((Object)(object)Weapon1.GetComponent<Holdable>())) { Weapon1.GetComponent<Holdable>().ignoreDissarm = false; } if (Object.op_Implicit((Object)(object)Weapon2) && Object.op_Implicit((Object)(object)Weapon2.GetComponent<Holdable>())) { Weapon2.GetComponent<Holdable>().ignoreDissarm = false; } } foreach (GameObject ability in reviveAbilities) { Object.Instantiate<GameObject>(ability, ((Component)Unit).transform.position, ((Component)Unit).transform.rotation, ((Component)Unit).transform); } if (Object.op_Implicit((Object)(object)((Component)Unit).GetComponentInChildren<TeamColor>())) { TeamColor[] componentsInChildren = ((Component)Unit).GetComponentsInChildren<TeamColor>(); foreach (TeamColor tc in componentsInChildren) { tc.SetTeamColor(newTeam); } } if (Object.op_Implicit((Object)(object)((Component)Unit.data).GetComponent<StandingHandler>()) && (((Object)Unit).name.Contains("Humanoid") || ((Object)Unit).name.Contains("Stiffy") || ((Object)Unit).name.Contains("Blackbeard") || ((Object)Unit).name.Contains("Halfling"))) { RandomCharacterStats ran = ((Component)Unit.data).gameObject.AddComponent<RandomCharacterStats>(); ran.minStandingOffset = zombieStats.GetComponent<RandomCharacterStats>().minStandingOffset; ran.maxStandingOffset = zombieStats.GetComponent<RandomCharacterStats>().maxStandingOffset; ran.minMovement = zombieStats.GetComponent<RandomCharacterStats>().minMovement; ran.maxMovemenmt = zombieStats.GetComponent<RandomCharacterStats>().maxMovemenmt; ran.randomCurve = zombieStats.GetComponent<RandomCharacterStats>().randomCurve; } Unit.api.SetTargetingType(Unit.unitBlueprint.TargetingComponent); ServiceLocator.GetService<UnitHealthbars>().HandleUnitSpawned(Unit); Unit.api.UpdateECSValues(); Unit.InitializeUnit(newTeam); reviveEvent.Invoke(); } public void Update() { if (Object.op_Implicit((Object)(object)Unit)) { ((Component)Unit.data).GetComponent<UnitColorHandler>().SetColor(color, LerpProgress); } } } public class EnableDamageOnAllWeapons : MonoBehaviour { private List<MeleeWeapon> MeleeWeapons = new List<MeleeWeapon>(); private void Start() { MeleeWeapons = ((Component)((Component)this).transform.root).GetComponentsInChildren<MeleeWeapon>().ToList(); } public void EnableDamage() { if (MeleeWeapons.Count <= 0) { return; } foreach (MeleeWeapon item in MeleeWeapons.Where((MeleeWeapon weapon) => (Object)(object)weapon != (Object)null)) { item.EnableDamageOutOfSwing(); } } public void DisableDamage() { if (MeleeWeapons.Count <= 0) { return; } foreach (MeleeWeapon item in MeleeWeapons.Where((MeleeWeapon weapon) => (Object)(object)weapon != (Object)null)) { item.DisableDamageOutOfSwing(); } } } public class ExplosionAddEffectOnce : ExplosionEffect { public UnitEffectBase effectPrefab; public bool onlyOnce; public bool onlyVampire; public float chance = 1f; public override void DoEffect(GameObject target) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) UnitEffectBase val = UnitEffectBase.AddEffectToTarget(target.gameObject, effectPrefab); if (!Object.op_Implicit((Object)(object)val) && chance > Random.value) { GameObject val2 = Object.Instantiate<GameObject>(((Component)effectPrefab).gameObject, target.transform.root); val2.transform.position = target.transform.root.position; val2.transform.rotation = Quaternion.LookRotation(target.transform.root.position - ((Component)this).transform.position); TeamHolder.AddTeamHolder(val2, ((Component)((Component)this).transform.root).gameObject); val = val2.GetComponent<UnitEffectBase>(); val.DoEffect(); TargetableEffect[] componentsInChildren = ((Component)val).gameObject.GetComponentsInChildren<TargetableEffect>(); TargetableEffect[] array = componentsInChildren; foreach (TargetableEffect val3 in array) { val3.DoEffect(((Component)this).transform, target.transform); } } else if (!onlyOnce) { val.Ping(); } } } public class FindCodeAnimationInUnitPart : MonoBehaviour { public enum BodyPart { Head, Torso, Hip, ArmLeft, ArmRight, ElbowLeft, ElbowRight, LegLeft, LegRight, KneeLeft, KneeRight } public enum AnimationType { In, Out, Boop } private DataHandler OwnData; private Transform ChosenPart; public BodyPart bodyPart; [Header("Code Animation")] public AnimationType animationToPlay; [Header("Uni