Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of GsiXDynamicShield v1.1.7
GsiX.DynamicShield.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using DynamicShield; using GsiXHelper; using HarmonyLib; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using Steamworks; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("DynamicShield")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("GsiX.DynamicShield")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("0.0.1.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.1.0")] public class DynamicEffect : MonoBehaviour { public float effectInterval = Time.time; public int effectIconPos; public float effectIconDelay = 0.1f; public bool hasDynamicEffect; private int statusEffectHash = DynamicDefault.DynShieldUmbrella_Hash; private List<StatusEffect> playerSEList = new List<StatusEffect>(); public void Awake() { if (!Player.IsPlacementGhost(((Component)this).gameObject)) { ((MonoBehaviour)this).InvokeRepeating("SlowUpdate", 0f, 0.22f); } } public void SlowUpdate() { if ((Object)(object)Player.m_localPlayer == (Object)null) { return; } if (((Character)Player.m_localPlayer).m_seman.HaveStatusEffect(statusEffectHash)) { hasDynamicEffect = true; foreach (StatusEffect statusEffect in ((Character)Player.m_localPlayer).m_seman.m_statusEffects) { if (statusEffect.m_name == "$se_rested_name") { statusEffect.m_time = 0f; } if (statusEffect.m_name == "$se_wet_name" || statusEffect.m_name == "$se_burning_name" || statusEffect.m_name == "$se_frost_name" || statusEffect.m_name == "$se_lightning_name" || statusEffect.m_name == "$se_poison_name" || statusEffect.m_name == "$se_lightning_name") { playerSEList.Add(statusEffect); } } if (playerSEList.Count() <= 0) { return; } foreach (StatusEffect playerSE in playerSEList) { ((Character)Player.m_localPlayer).m_seman.RemoveStatusEffect(playerSE, false); } playerSEList.Clear(); } else { hasDynamicEffect = false; } } } public class DynamicEnemy : MonoBehaviour { public DynamicTower m_dTower; public int GeneratorCost; public bool rangedEnable; public float rangedInterval; public int rangedTargetTotal; public int rangedCost; public bool showActivity; public bool miniAoeEnable; public float miniAoeDamage; public float miniAoeInterval; public int miniAoeTotalTarget; public int miniAoeCost; private int carI; private Character slowUpdateEnemy; private List<Character> slowUpdateExclude = new List<Character>(); private List<Character> slowUpdateAoeExclude = new List<Character>(); private Collider aimCollider; public void Awake() { if (Player.IsPlacementGhost(((Component)this).gameObject)) { return; } if (showActivity) { GH.DWarn(" DynamicEnemy Awake"); } m_dTower = ((Component)this).GetComponent<DynamicTower>(); if ((Object)(object)m_dTower.m_nview != (Object)null && m_dTower.m_nview.GetZDO() != null) { ((MonoBehaviour)this).InvokeRepeating("FindTarget", 0f, rangedInterval); m_dTower.m_nview.Register<ZDOID>("RPC_AttackMiniAoe", (Action<long, ZDOID>)RPC_AttackMiniAoe); if (showActivity) { GH.DWarn(" DynamicEnemy Register"); } } } public void Update() { } private void FindTarget() { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_dTower == (Object)null || !m_dTower.IsShieldOwner()) { return; } if (rangedEnable && m_dTower.IsEnoughtFuel(GeneratorCost + rangedCost)) { if (showActivity) { GH.DWarn(" DynamicEnemy Trigger"); } for (carI = 0; carI < rangedTargetTotal; carI++) { slowUpdateEnemy = DynamicAmmo.GetEnemyInRange(new Vector3(((Component)m_dTower.m_shield).transform.position.x, ((Component)m_dTower.m_shield).transform.position.y + DynamicTower.fixedHeight * DynamicTower.shieldScale, ((Component)m_dTower.m_shield).transform.position.z), m_dTower.m_shield.m_radius, slowUpdateExclude, 1f); if ((Object)(object)slowUpdateEnemy == (Object)null) { break; } if ((Object)(object)slowUpdateEnemy != (Object)null && (Object)(object)slowUpdateEnemy.m_nview != (Object)null) { switch (Random.Range(0, 3)) { case 0: Target(((Component)slowUpdateEnemy).gameObject, slowUpdateEnemy.GetZDOID(), DynamicAmmo.AmmoType.Light); break; case 1: Target(((Component)slowUpdateEnemy).gameObject, slowUpdateEnemy.GetZDOID(), DynamicAmmo.AmmoType.Sham); break; case 2: Target(((Component)slowUpdateEnemy).gameObject, slowUpdateEnemy.GetZDOID(), DynamicAmmo.AmmoType.Rads); break; } } } if (slowUpdateExclude.Count() > 0) { slowUpdateExclude.Clear(); } } if (!miniAoeEnable || !m_dTower.IsEnoughtFuel(GeneratorCost + miniAoeCost) || !GH.IsTimeElpase(m_dTower.m_nview, ZDOVars.s_growStart, miniAoeInterval)) { return; } GH.SetZDOsTime(m_dTower.m_nview, ZDOVars.s_growStart); int num = 0; for (int i = 0; i < miniAoeTotalTarget; i++) { slowUpdateEnemy = DynamicAmmo.GetEnemyInRange(new Vector3(((Component)m_dTower.m_shield).transform.position.x, ((Component)m_dTower.m_shield).transform.position.y + DynamicTower.fixedHeight * DynamicTower.shieldScale, ((Component)m_dTower.m_shield).transform.position.z), m_dTower.m_shield.m_radius, slowUpdateAoeExclude, 1f); if ((Object)(object)slowUpdateEnemy == (Object)null) { break; } InvokeMiniAoe(slowUpdateEnemy); num++; } if (num > 0) { m_dTower.InvokeUseFuel(miniAoeCost, 4, num); } slowUpdateAoeExclude.Clear(); void Target(GameObject enemy, ZDOID targetZDOID, DynamicAmmo.AmmoType type) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) DynamicAmmo.ShootProjectile(m_dTower.m_shield, m_dTower, targetZDOID, enemy, type); m_dTower.InvokeUseFuel(rangedCost, 4, 1); } } private HitData CreateHitData(float damage, HitType hitType, Vector3 pos, Vector3 dir) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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_0021: 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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown return new HitData { m_damage = { m_damage = damage }, m_point = pos, m_dir = dir, m_hitType = hitType, m_toolTier = 4 }; } private void ShieldAOEEffect(Transform baseparent) { //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_0018: 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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Vector3 position = baseparent.position; position.y += 0.5f; Quaternion rotation = baseparent.rotation; CreateDynamicEffect(DynamicAmmo.animeMiniAoe, position, rotation, baseparent); } private void ShieldPlayerEffect(Transform baseparent, float zOffsets, float incDegree, float maxDegree) { //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_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: 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_002f: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) Vector3 position = baseparent.position; position.y += zOffsets; Quaternion rotation = baseparent.rotation; rotation *= Quaternion.Euler(90f, 0f, 0f); CreateDynamicEffect(DynamicAmmo.animeDomehit, position, rotation, baseparent); float num = 0f; Quaternion val = baseparent.rotation; for (; num < maxDegree; num += incDegree) { val *= Quaternion.Euler(0f, num, 0f); CreateDynamicEffect(DynamicAmmo.animeDomehit, position, val, baseparent); } } private void CreateDynamicEffect(GameObject effectData, Vector3 pos, Quaternion rot, Transform baseparent, float scale = 1f) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)effectData == (Object)null) { GH.DWarn("[Update] Try to create null effectData"); return; } GameObject val = Object.Instantiate<GameObject>(effectData, pos, rot); if ((Object)(object)val == (Object)null) { GH.DWarn("[Update] Try to Instantiate object but return null"); } else { val.transform.localScale = baseparent.localScale * scale; } } private void InvokeMiniAoe(Character badguy) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) m_dTower.m_nview.InvokeRPC(ZRoutedRpc.Everybody, "RPC_AttackMiniAoe", new object[1] { badguy.GetZDOID() }); } private void RPC_AttackMiniAoe(long sender, ZDOID zdoid) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) GameObject val = ZNetScene.instance.FindInstance(zdoid); if (!((Object)(object)val != (Object)null)) { return; } Character component = val.GetComponent<Character>(); if ((Object)(object)component != (Object)null) { Drawrays(m_dTower.m_shield, component, 1f); if (m_dTower.m_nview.IsOwner()) { component.Damage(CreateHitData(miniAoeDamage, (HitType)20, ((Component)component).transform.position, ((Component)component).transform.forward)); ShieldAOEEffect(((Component)component).transform); ShieldPlayerEffect(((Component)m_dTower.m_shield).transform, 7f, 45f, 180f); } } } private void Drawrays(ShieldGenerator from, Character to, float raylife, bool random = true) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00af: 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_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: 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_00e4: 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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013a: 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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)from).transform.position + Vector3.up * DynamicTower.fixedHeight * DynamicTower.shieldScale; if (random) { Vector3 val2 = Vector2.op_Implicit(Random.insideUnitCircle * (m_dTower.domeScale + 0.5f)); val.x += val2.x; val.y += Random.Range(0f, 0.4f); val.z += val2.y; } Vector3 val3 = GetCenterAim(((Component)to).gameObject, ((Component)to).transform.position) + Vector3.up * 0.5f; float num = Vector3.Distance(val, val3); float num2 = num / 30f; float num3 = 0f; float num4 = 0f; Vector3 val4 = (val3 - val) / 3f; Vector3 val5 = val + val4 + Vector3.up * num / 3f; Vector3 val6 = val5 + val4 + Vector3.up * num / 3f; List<Vector3> list = new List<Vector3> { val }; while (num3 < num) { num3 += num2; num4 = num3 / num; Vector3 val7 = Vector3.Lerp(val, val5, num4); Vector3 val8 = Vector3.Lerp(val5, val6, num4); Vector3 val9 = Vector3.Lerp(val6, val3, num4); Vector3 val10 = Vector3.Lerp(val7, val8, num4); Vector3 val11 = Vector3.Lerp(val8, val9, num4); list.Add(Vector3.Lerp(val10, val11, num4)); } Color red = Color.red; GH.DrawRayLine(list, 0.07f, raylife, red); } private Vector3 GetCenterAim(GameObject target, Vector3 oldAimCenter) { //IL_002e: 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) //IL_0028: Unknown result type (might be due to invalid IL or missing references) aimCollider = target.GetComponent<Collider>(); if ((Object)(object)aimCollider != (Object)null) { Bounds bounds = aimCollider.bounds; return ((Bounds)(ref bounds)).center; } return oldAimCenter; } } public class DynamicFriendly : MonoBehaviour { public DynamicTower m_dTower; public int GeneratorCost; public bool damagePlayer; public bool damageTamed; public bool showActivity; public bool regenPlayer; public float regenInterval; public float regenPlayerHP; public float regenPlayerStam; public bool regenTamed; public float regenTamedHP; public int regenCost; public int regenPieceNum; public bool regenPlayerPiece; public int cleanupNum; public float claenLifespan; public bool cleanFish; public bool claenInTar; public int cleanCost; public List<string> itemDestroyList; public List<string> itemIgnoreList; private int cleanCount; private List<string> clientDestroylistbuff = new List<string>(); private List<string> clientignorelistbuff = new List<string>(); private Fish fishbuff; private string ignoreNameBuff1; private string ignoreNameBuff2; private DynamicFriendly dynFriendly; private bool canPickup; private float pickupSpeed = 30f; private Vector3 autoPickup_Auto1; private Vector3 autoPickup_Auto2; private FloatingTerrainDummy floatingTerrainDummy; [NonSerialized] public Dictionary<ItemDrop, float> autoPickupList = new Dictionary<ItemDrop, float>(); [NonSerialized] public Dictionary<ItemDrop, float> autoPickupBuff = new Dictionary<ItemDrop, float>(); public void Awake() { if (Player.IsPlacementGhost(((Component)this).gameObject)) { return; } if (showActivity) { GH.DWarn(" DynamicFriendly Awake"); } m_dTower = ((Component)this).GetComponent<DynamicTower>(); if ((Object)(object)m_dTower.m_nview != (Object)null && m_dTower.m_nview.GetZDO() != null) { ((MonoBehaviour)this).InvokeRepeating("FindTarget", 0f, regenInterval); if (showActivity) { GH.DWarn(" DynamicFriendly Register"); } } } public void FixedUpdate() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) UpdatePickUp(((Component)m_dTower.m_shield).transform.position, Time.time, Time.fixedDeltaTime); } private void FindTarget() { //IL_00db: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_dTower == (Object)null || !m_dTower.IsShieldOwner() || !m_dTower.IsEnoughtFuel(GeneratorCost + regenCost)) { return; } if (showActivity) { GH.DWarn(" DynamicFriendly Trigger"); } foreach (Character s_character in Character.s_characters) { if ((Object)(object)s_character == (Object)null || (Object)(object)s_character.m_nview == (Object)null || s_character.IsDead() || IsOutsideShield(((Component)s_character).gameObject)) { continue; } if (s_character.IsPlayer()) { if ((!damagePlayer && regenPlayer && s_character.GetHealthPercentage() < 1f) || s_character.GetStaminaPercentage() < 1f) { DynamicFriendlyHealChars(s_character); } } else if (s_character.IsTamed() && (int)s_character.m_faction == 0 && !damageTamed && regenTamed && s_character.GetHealthPercentage() < 1f) { DynamicFriendlyHealTamed(s_character); } } if (regenPieceNum > 0) { cleanCount = 0; foreach (WearNTear s_allInstance in WearNTear.s_allInstances) { if (cleanCount >= regenPieceNum) { break; } if (!((Object)(object)s_allInstance == (Object)null) && !((Object)(object)s_allInstance.m_piece == (Object)null) && !(s_allInstance.m_healthPercentage >= 0.99f) && !IsOutsideShield(((Component)s_allInstance).gameObject) && (!regenPlayerPiece || s_allInstance.m_piece.IsPlacedByPlayer()) && !((Object)(object)s_allInstance.m_nview == (Object)null)) { DynamicFriendlyRepair(s_allInstance); cleanCount++; } } } if (cleanupNum <= 0) { return; } cleanCount = 0; foreach (ItemDrop s_instance in ItemDrop.s_instances) { if (cleanCount >= cleanupNum) { break; } if ((Object)(object)s_instance == (Object)null || (Object)(object)s_instance.m_nview == (Object)null || !s_instance.m_nview.IsValid() || IsOutsideShield(((Component)s_instance).gameObject) || s_instance.GetTimeSinceSpawned() < (double)claenLifespan || (!claenInTar && s_instance.InTar())) { continue; } if (!s_instance.m_nview.IsOwner()) { s_instance.m_nview.ClaimOwnership(); } else { if (FindItemIgnore(s_instance)) { continue; } if (FindItemDestroy(s_instance)) { cleanCount++; DynamicFriendlyDestroy(s_instance); continue; } canPickup = true; foreach (ShieldGenerator instance in ShieldGenerator.m_instances) { dynFriendly = ((Component)instance).GetComponent<DynamicFriendly>(); if ((Object)(object)dynFriendly != (Object)null && (dynFriendly.autoPickupList.ContainsKey(s_instance) || dynFriendly.autoPickupBuff.ContainsKey(s_instance))) { canPickup = false; break; } } if (canPickup) { s_instance.m_autoPickup = false; s_instance.m_itemData.m_shared.m_weight = 0f; autoPickupList.Add(s_instance, Time.time); cleanCount++; } } } bool FindItemDestroy(ItemDrop droppedItem) { clientDestroylistbuff = itemDestroyList; if (DynamicRPC.ClientDestroyListBuffer.Count() > 0) { clientDestroylistbuff = DynamicRPC.ClientDestroyListBuffer; } ignoreNameBuff1 = ((Object)droppedItem).name.Replace("(Clone)", "").ToLower(); foreach (string item in clientDestroylistbuff) { if (ignoreNameBuff1.Contains(item.ToLower())) { return true; } } return false; } bool FindItemIgnore(ItemDrop droppedItem) { clientignorelistbuff = itemIgnoreList; if (DynamicRPC.ClientIgnoreListBuffer.Count() > 0) { clientignorelistbuff = DynamicRPC.ClientIgnoreListBuffer; } ignoreNameBuff2 = ((Object)droppedItem).name.Replace("(Clone)", "").ToLower(); foreach (string item2 in clientignorelistbuff) { if (ignoreNameBuff2.Contains(item2.ToLower())) { if (item2.Contains("fish") && !cleanFish) { fishbuff = ((Component)droppedItem).GetComponent<Fish>(); if ((Object)(object)fishbuff == (Object)null || !fishbuff.IsOutOfWater() || fishbuff.IsHooked()) { continue; } } return true; } } return false; } } private void DynamicFriendlyHealChars(Character friendly) { if (friendly.GetHealthPercentage() < 1f) { friendly.Heal(regenPlayerHP, true); } if (friendly.GetStaminaPercentage() < 1f) { friendly.AddStamina(regenPlayerStam); } ShieldPlayerEffect(((Component)friendly).transform, 1f, 90f, 180f); m_dTower.InvokeUseFuel(regenCost, 0, 1); } private void DynamicFriendlyHealTamed(Character friendly) { friendly.Heal(regenTamedHP, true); ShieldPlayerEffect(((Component)friendly).transform, 1f, 90f, 180f); m_dTower.InvokeUseFuel(regenCost, 0, 1); } private void DynamicFriendlyRepair(WearNTear piece) { piece.Repair(); ShieldOtherEffect(((Component)piece).transform); m_dTower.InvokeUseFuel(regenCost, 1, 1); if ((Object)(object)Player.m_localPlayer != (Object)null && !IsOutsideShield(((Component)Player.m_localPlayer).gameObject)) { ((Character)Player.m_localPlayer).Message((MessageType)1, Localization.instance.Localize("[DynamicShield] $msg_repaired", new string[1] { piece.m_piece.m_name }), 0, (Sprite)null); } } private void UpdatePickUp(Vector3 basePos, float currenTime, float dt) { //IL_001f: 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_002a: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) if (!m_dTower.IsShieldOwner() || autoPickupList.Count <= 0) { return; } basePos += Vector3.up * DynamicTower.fixedHeight * DynamicTower.shieldScale; foreach (KeyValuePair<ItemDrop, float> autoPickup in autoPickupList) { if ((Object)(object)autoPickup.Key != (Object)null && Vector3.Distance(basePos, ((Component)autoPickup.Key).transform.position) > 1.5f && currenTime - autoPickup.Value < 5f) { AutoPickup(autoPickup.Key, basePos, dt); } else { autoPickupBuff.Add(autoPickup.Key, autoPickup.Value); } } if (autoPickupBuff.Count <= 0) { return; } foreach (KeyValuePair<ItemDrop, float> item in autoPickupBuff) { autoPickupList.Remove(item.Key); if ((Object)(object)item.Key != (Object)null) { DynamicFriendlyPickup(item.Key); } } autoPickupBuff.Clear(); } public void AutoPickup(ItemDrop item, Vector3 basePos, float dt) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //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_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) basePos += Vector3.up; if (!item.CanPickup(true)) { item.RequestOwn(); return; } autoPickup_Auto1 = Vector3.Normalize(basePos - ((Component)item).transform.position); autoPickup_Auto2 = autoPickup_Auto1 * pickupSpeed * dt; Transform transform = ((Component)item).transform; transform.position += autoPickup_Auto2; floatingTerrainDummy = ((Component)item).GetComponent<FloatingTerrainDummy>(); if ((Object)(object)floatingTerrainDummy != (Object)null) { Transform transform2 = ((Component)floatingTerrainDummy).transform; transform2.position += autoPickup_Auto2; } } private void DynamicFriendlyPickup(ItemDrop item) { item.Load(); if (PickupItem(item)) { ShieldOtherEffect(((Component)item).transform); m_dTower.InvokeUseFuel(cleanCost, 2, 1); if ((Object)(object)Player.m_localPlayer != (Object)null && !IsOutsideShield(((Component)Player.m_localPlayer).gameObject)) { ((Character)Player.m_localPlayer).Message((MessageType)1, Localization.instance.Localize("[DynamicShield] Pickup " + item.m_itemData.m_shared.m_name), 0, (Sprite)null); } } bool PickupItem(ItemDrop droppedItem) { if (droppedItem.CanPickup(false) && m_dTower.m_container.m_inventory.AddItem(droppedItem.m_itemData)) { EggGrow component = ((Component)droppedItem).GetComponent<EggGrow>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } if (m_dTower.m_nview.GetZDO() == null) { Object.Destroy((Object)(object)((Component)droppedItem).gameObject); } else { ZNetScene.instance.Destroy(((Component)droppedItem).gameObject); } if (m_dTower.m_container.m_inventory.GetEmptySlots() <= 2) { GH.MoveAllToCrate(m_dTower.m_container); } m_dTower.m_container.Save(); return true; } return false; } } private void DynamicFriendlyDestroy(ItemDrop item) { ShieldOtherEffect(((Component)item).transform); m_dTower.InvokeUseFuel(cleanCost, 3, 1); if ((Object)(object)Player.m_localPlayer != (Object)null && !IsOutsideShield(((Component)Player.m_localPlayer).gameObject)) { ((Character)Player.m_localPlayer).Message((MessageType)1, Localization.instance.Localize("[DynamicShield] Cleaned " + item.m_itemData.m_shared.m_name), 0, (Sprite)null); } item.m_nview.Destroy(); } private void ShieldPlayerEffect(Transform baseparent, float zOffsets, float incDegree, float maxDegree) { //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_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: 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_002f: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) Vector3 position = baseparent.position; position.y += zOffsets; Quaternion rotation = baseparent.rotation; rotation *= Quaternion.Euler(90f, 0f, 0f); CreateDynamicEffect(DynamicAmmo.animeDomehit, position, rotation, baseparent); float num = 0f; Quaternion val = baseparent.rotation; for (; num < maxDegree; num += incDegree) { val *= Quaternion.Euler(0f, num, 0f); CreateDynamicEffect(DynamicAmmo.animeDomehit, position, val, baseparent); } } private bool IsOutsideShield(GameObject pointB) { //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) return Vector3.Distance(((Component)m_dTower.m_shield).transform.position, pointB.transform.position) > m_dTower.m_shield.m_radius; } private void ShieldOtherEffect(Transform baseparent) { //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_0008: 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_0015: Unknown result type (might be due to invalid IL or missing references) Vector3 position = baseparent.position; Quaternion rotation = baseparent.rotation; CreateDynamicEffect(DynamicAmmo.animeRefuel, position, rotation, baseparent); } private void CreateDynamicEffect(GameObject effectData, Vector3 pos, Quaternion rot, Transform baseparent, float scale = 1f) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)effectData == (Object)null) { GH.DWarn("[UpdateEnemyThink] Try to create null effectData"); return; } GameObject val = Object.Instantiate<GameObject>(effectData, pos, rot); if ((Object)(object)val == (Object)null) { GH.DWarn("[UpdateEnemyThink] Try to Instantiate object but return null"); } else { val.transform.localScale = baseparent.localScale * scale; } } } public class DynamicMisc : MonoBehaviour { public DynamicTower m_dTower; public int GeneratorCost; public bool miscEnable; public float miscUpdateInterval; public int miscTotal; public int miscUseCost; public int miscNumber; public bool miscTreeLog; public bool miscPickable; public bool miscBush; public bool miscRock; public bool miscStump; public bool miscSeagal; public bool showActivity; private List<GameObject> m_miscTarget = new List<GameObject>(); private List<ZDOID> m_miscTarget2 = new List<ZDOID>(); private bool m_miscCanTarget; private int tree; private int pick; private int seagul; private int statphy; private int radiusMult = 1; private float radiusApply; private Collider[] hitColliders; public void Awake() { if (Player.IsPlacementGhost(((Component)this).gameObject)) { return; } if (showActivity) { GH.DWarn(" DynamicMisc Awake"); } m_dTower = ((Component)this).GetComponent<DynamicTower>(); m_miscTarget.Clear(); m_miscTarget2.Clear(); if ((Object)(object)m_dTower.m_nview != (Object)null && m_dTower.m_nview.GetZDO() != null) { ((MonoBehaviour)this).InvokeRepeating("FindTarget", 0f, miscUpdateInterval); ((MonoBehaviour)this).InvokeRepeating("ShootTarget", 0f, 0.22f); m_dTower.m_nview.Register<int>("RPC_IncrementDynamicStats", (Action<long, int>)RPC_IncrementDynamicStats); if (showActivity) { GH.DWarn(" DynamicMisc Register"); } } } private void FindTarget() { //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0453: Unknown result type (might be due to invalid IL or missing references) //IL_047b: Unknown result type (might be due to invalid IL or missing references) //IL_05af: Unknown result type (might be due to invalid IL or missing references) //IL_0555: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_dTower == (Object)null || !m_dTower.IsShieldOwner() || !miscEnable || !m_dTower.IsEnoughtFuel(GeneratorCost + miscUseCost)) { return; } if (showActivity) { GH.DWarn(" DynamicMisc Trigger"); } tree = 0; pick = 0; seagul = 0; statphy = 0; radiusApply = m_dTower.m_shield.m_radius / 3f * (float)radiusMult; radiusMult++; if (radiusMult > 3) { radiusMult = 1; } hitColliders = Physics.OverlapSphere(((Component)m_dTower.m_shield).transform.position, radiusApply); Collider[] array = hitColliders; foreach (Collider val in array) { if ((Object)(object)val == (Object)null) { continue; } if (tree >= miscTotal && pick >= miscTotal && seagul >= miscTotal && statphy >= miscTotal) { break; } if (miscTreeLog) { TreeLog componentInParent = ((Component)val).GetComponentInParent<TreeLog>(); if ((Object)(object)componentInParent != (Object)null) { if (tree < miscTotal && (Object)(object)componentInParent.m_nview != (Object)null) { ReloadAmmo(((Component)componentInParent).gameObject, componentInParent.m_nview.GetZDO().m_uid); tree++; } continue; } } if (miscPickable) { Pickable componentInParent2 = ((Component)val).GetComponentInParent<Pickable>(); if ((Object)(object)componentInParent2 != (Object)null) { if (pick < miscTotal && (Object)(object)componentInParent2.m_nview != (Object)null && componentInParent2.m_nview.IsValid() && !componentInParent2.m_picked && componentInParent2.CanBePicked()) { componentInParent2.m_nview.InvokeRPC("RPC_Pick", Array.Empty<object>()); pick++; m_dTower.InvokeUseFuel(0, 5, 1); } continue; } PickableItem componentInParent3 = ((Component)val).GetComponentInParent<PickableItem>(); if ((Object)(object)componentInParent3 != (Object)null) { if (pick < miscTotal && (Object)(object)componentInParent3.m_nview != (Object)null && componentInParent3.m_nview.IsValid() && !componentInParent3.m_picked) { componentInParent3.m_nview.InvokeRPC("Pick", Array.Empty<object>()); pick++; m_dTower.InvokeUseFuel(0, 5, 1); } continue; } Beehive componentInParent4 = ((Component)val).GetComponentInParent<Beehive>(); if ((Object)(object)componentInParent4 != (Object)null) { if (pick < miscTotal && (Object)(object)componentInParent4.m_nview != (Object)null && componentInParent4.m_nview.IsValid() && componentInParent4.GetHoneyLevel() >= 10) { componentInParent4.m_nview.InvokeRPC("RPC_Extract", Array.Empty<object>()); InvokeIncrementStats((PlayerStatType)76); pick++; m_dTower.InvokeUseFuel(0, 5, 1); } continue; } SapCollector componentInParent5 = ((Component)val).GetComponentInParent<SapCollector>(); if ((Object)(object)componentInParent5 != (Object)null) { if (pick < miscTotal && (Object)(object)componentInParent5.m_nview != (Object)null && componentInParent5.m_nview.IsValid() && componentInParent5.GetLevel() >= 10) { componentInParent5.m_nview.InvokeRPC("RPC_Extract", Array.Empty<object>()); InvokeIncrementStats((PlayerStatType)77); pick++; m_dTower.InvokeUseFuel(0, 5, 1); } continue; } } if (miscSeagal) { RandomFlyingBird componentInParent6 = ((Component)val).GetComponentInParent<RandomFlyingBird>(); if ((Object)(object)componentInParent6 != (Object)null) { if (seagul < miscTotal && ((Object)componentInParent6).name.StartsWith("Seagal") && (Object)(object)componentInParent6.m_nview != (Object)null && GH.TerrainCheck(((Component)componentInParent6).transform.position, -0.1f)) { ReloadAmmo(((Component)componentInParent6).gameObject, componentInParent6.m_nview.GetZDO().m_uid); seagul++; } continue; } } if ((!miscStump && !miscRock && !miscBush) || statphy >= miscTotal) { continue; } StaticPhysics componentInParent7 = ((Component)val).GetComponentInParent<StaticPhysics>(); Destructible componentInParent8 = ((Component)val).GetComponentInParent<Destructible>(); if ((Object)(object)componentInParent7 != (Object)null && (Object)(object)componentInParent8 != (Object)null && (Object)(object)componentInParent7.m_nview != (Object)null) { m_miscCanTarget = false; if (((Object)componentInParent7).name.Contains("Stub") || ((Object)componentInParent7).name.Contains("Stump")) { m_miscCanTarget = miscStump; } else if (((Object)componentInParent7).name.StartsWith("Rock") && GH.TerrainCheck(((Component)componentInParent7).transform.position)) { m_miscCanTarget = miscRock; } else if (((Object)componentInParent7).name.StartsWith("Bush")) { m_miscCanTarget = miscBush; } if (m_miscCanTarget) { ReloadAmmo(((Component)componentInParent7).gameObject, componentInParent7.m_nview.GetZDO().m_uid); statphy++; } } } } private void ReloadAmmo(GameObject target, ZDOID zdoid) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < 3; i++) { m_miscTarget.Add(target); m_miscTarget2.Add(zdoid); } m_dTower.InvokeUseFuel(miscUseCost, 5, 1); } private void InvokeIncrementStats(PlayerStatType statType) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected I4, but got Unknown m_dTower.m_nview.InvokeRPC(ZRoutedRpc.Everybody, "RPC_IncrementDynamicStats", new object[1] { (int)statType }); } private void RPC_IncrementDynamicStats(long sender, int statsType) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)ZNet.instance != (Object)null && (Object)(object)Player.m_localPlayer != (Object)null && !ZNet.instance.IsServer() && Vector3.Distance(((Component)Player.m_localPlayer).transform.position, ((Component)m_dTower.m_shield).transform.position) <= m_dTower.m_shield.m_radius) { Game.instance.IncrementPlayerStat((PlayerStatType)statsType, 1f); } } private void ShootTarget() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) if (m_dTower.IsShieldOwner() && m_miscTarget.Count > 0) { GameObject val = m_miscTarget.First(); m_miscTarget.Remove(val); ZDOID val2 = m_miscTarget2.First(); m_miscTarget2.Remove(val2); if ((Object)(object)val != (Object)null) { DynamicAmmo.ShootProjectile(m_dTower.m_shield, m_dTower, val2, val, DynamicAmmo.AmmoType.Ice); } } } } public class DynamicAmmo : MonoBehaviour { public enum AmmoType { Ice, Light, Sham, Rads, len } public ZDOID targetZDOID; public ShieldGenerator m_tower; public Projectile m_projectile; public ZNetView m_nview; public GameObject m_target; public Character m_targetBff; public int retry; public bool hasHeight; public float m_ttl = 10f; public float turnRate = 180f; public Vector3 pointA; public Vector3 pointB; public Vector3 posAmmo; public Vector3 posBff; public Vector3 posNow; public Vector3 posOld = Vector3.zero; public Vector3 vecFwd; public List<Vector3> rayPoint = new List<Vector3>(); private float deltaTime; private Collider aimCollider; public static float m_speed1 = 20f; public static float m_speed2 = 15f; public static float m_speed3 = 10f; private static GameObject projectileBuff; public static GameObject projectileIce; public static GameObject projectileLight; public static GameObject projectileSham; public static GameObject projectileRads; public static string[] projectileName_Dynamic = new string[4] { "DynamicIce", "DynamicLightning", "DynamicSham", "DynamicRad" }; public static string[] projectileName_Vanilla = new string[4] { "staff_iceshard_projectile", "staff_lightning_projectile", "GoblinShaman_projectile_fireball", "radiation" }; public static GameObject animeMiniAoe; public static GameObject animeRefuel; public static GameObject animeDomehit; public static float projectileDamage; public static float iceshardFrost; public static float lightningLight; public static float fireballFire; public static float radiatonSpirit; public static bool seeThruWall; public static bool canHitStructure; public static bool canHitPlayer; public static bool canHitTameable; public static bool canHitWild; public static bool canHitBoss; public static bool showDebugRay; private static Vector3 endPos = default(Vector3); private TreeBase hitTreeBase; private Projectile hitProjectile; private WearNTear hitWearTear; private Collider[] hitColliders; public void Awake() { m_nview = ((Component)this).GetComponent<ZNetView>(); m_projectile = ((Component)this).GetComponent<Projectile>(); if ((Object)(object)m_nview != (Object)null && m_nview.GetZDO() != null) { ((MonoBehaviour)this).InvokeRepeating("SlowUpdate", 0f, 1f); ((MonoBehaviour)this).InvokeRepeating("UpdateTarget", 0f, 0.22f); m_nview.Register("RPC_IncrementDynamicAmmoSkill", (Action<long>)RPC_IncrementDynamicAmmoSkill); } } public void FixedUpdate() { //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: 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) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_nview == (Object)null || !m_nview.IsOwner()) { return; } if ((Object)(object)m_target == (Object)null && retry <= 2) { retry++; if ((Object)(object)m_tower != (Object)null) { m_targetBff = GetEnemyInRange(pointA, m_tower.m_radius, new List<Character>()); if ((Object)(object)m_targetBff != (Object)null) { m_target = ((Component)m_targetBff).gameObject; } } } if ((Object)(object)m_target != (Object)null) { posBff = GetCenterAim(m_target, posBff); } else if (!hasHeight) { hasHeight = true; posBff.y = GH.GetTerrainHeight(posBff); } pointB = posBff; posAmmo = ((Component)m_projectile).transform.position; posNow = GetVecForward(pointA, posAmmo, pointB, 0.5f, out vecFwd); m_projectile.m_vel = Vector3.RotateTowards(m_projectile.m_vel, vecFwd, turnRate * Time.deltaTime * ((float)Math.PI / 180f), 0f); if (showDebugRay) { if (Vector3.Distance(posNow, posOld) > 0.5f) { posOld = posNow; rayPoint.Add(posOld); } GH.DrawRayLine(rayPoint, 0.05f, 0.1f, Color.red); } } public void InvokeIncrementAmmoSkill() { m_nview.InvokeRPC(ZRoutedRpc.Everybody, "RPC_IncrementDynamicAmmoSkill", Array.Empty<object>()); } public void RPC_IncrementDynamicAmmoSkill(long sender) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Invalid comparison between Unknown and I4 //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)Player.m_localPlayer == (Object)null || !(Vector3.Distance(((Component)m_tower).transform.position, ((Component)Player.m_localPlayer).transform.position) <= m_tower.m_radius)) { return; } float raiseSkillAmount = m_projectile.m_raiseSkillAmount; string text = ""; SkillType val = (SkillType)0; if (((Character)Player.m_localPlayer).GetSkillFactor(m_projectile.m_skill) < 1f) { val = (SkillType)10; text = "Blood +"; } else if (((Character)Player.m_localPlayer).GetSkillFactor((SkillType)9) < 1f) { val = (SkillType)9; text = "Element +"; } else { val = (SkillType)999; text = "++ All Skills ++"; } if ((int)val != 0) { if ((int)val == 999) { AddSkills((SkillType)1, raiseSkillAmount); AddSkills((SkillType)2, raiseSkillAmount); AddSkills((SkillType)3, raiseSkillAmount); AddSkills((SkillType)4, raiseSkillAmount); AddSkills((SkillType)6, raiseSkillAmount); AddSkills((SkillType)7, raiseSkillAmount); AddSkills((SkillType)8, raiseSkillAmount); AddSkills((SkillType)11, raiseSkillAmount); AddSkills((SkillType)12, raiseSkillAmount); AddSkills((SkillType)13, raiseSkillAmount); AddSkills((SkillType)14, raiseSkillAmount); AddSkills((SkillType)100, raiseSkillAmount); AddSkills((SkillType)101, raiseSkillAmount); AddSkills((SkillType)102, raiseSkillAmount); AddSkills((SkillType)103, raiseSkillAmount); AddSkills((SkillType)104, raiseSkillAmount); AddSkills((SkillType)110, raiseSkillAmount); } else { AddSkills(val, raiseSkillAmount); } Vector3 position = ((Component)Player.m_localPlayer).transform.position; position.y += 1.2f; float num = 1f; ((Character)Player.m_localPlayer).m_seman.ModifyRaiseSkill(val, ref num); text += num * raiseSkillAmount; DynamicText.instance.ShowText(DynamicText.TextType.Skill, position, text); } static void AddSkills(SkillType addskilltype, float skillamount) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) if (((Character)Player.m_localPlayer).GetSkillFactor(addskilltype) < 1f) { ((Character)Player.m_localPlayer).RaiseSkill(addskilltype, skillamount); } } } public void SetStartPoint(Vector3 start) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) pointA = start; posAmmo = start; posOld = start; rayPoint.Add(start); } private Vector3 GetVecForward(Vector3 start, Vector3 ammo, Vector3 end, float targetOffsets, out Vector3 fwd) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: 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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008d: 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_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) if (DistanceVector2(ammo, end) < 5f) { fwd = end - ammo; return end; } float num = DistanceVector2(start, end); float num2 = DistanceVector2(start, ammo) + targetOffsets; Vector3 val = (end - start) / 3f; Vector3 val2 = start + val + Vector3.up * 15f; Vector3 val3 = val2 + val + Vector3.up * 15f; if (num2 <= num) { deltaTime = num2 / num; } Vector3 val4 = Vector3.Lerp(start, val2, deltaTime); Vector3 val5 = Vector3.Lerp(val2, val3, deltaTime); Vector3 val6 = Vector3.Lerp(val3, end, deltaTime); Vector3 val7 = Vector3.Lerp(val4, val5, deltaTime); Vector3 val8 = Vector3.Lerp(val5, val6, deltaTime); Vector3 val9 = Vector3.Lerp(val7, val8, deltaTime) + Vector3.up * 7f; fwd = val9 - ammo; return val9; } private float DistanceVector2(Vector3 startt, Vector3 endd) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: 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_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) Vector3 val = startt; val.y = endd.y; return Vector3.Distance(val, endd); } private Vector3 GetCenterAim(GameObject target, Vector3 oldAimCenter) { //IL_002e: 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) //IL_0028: Unknown result type (might be due to invalid IL or missing references) aimCollider = target.GetComponent<Collider>(); if ((Object)(object)aimCollider != (Object)null) { Bounds bounds = aimCollider.bounds; return ((Bounds)(ref bounds)).center; } return oldAimCenter; } public static Character GetEnemyInRange(Vector3 basePos, float range, List<Character> excludList, float targetHeight = 0f) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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_00c4: Unknown result type (might be due to invalid IL or missing references) foreach (Character s_character in Character.s_characters) { if (excludList.Contains(s_character) || (Object)(object)s_character == (Object)null || Vector3.Distance(((Component)s_character).transform.position, basePos) > range || (Object)(object)((Component)s_character).GetComponent<Growup>() != (Object)null || (s_character.IsBoss() && !canHitBoss)) { continue; } if (!seeThruWall) { endPos = new Vector3(((Component)s_character).transform.position.x, ((Component)s_character).transform.position.y + targetHeight, ((Component)s_character).transform.position.z); if (GH.RaycastIsBlocked(basePos, endPos)) { continue; } } if (!canHitPlayer && (int)s_character.m_faction == 0) { continue; } if ((Object)(object)((Component)s_character).GetComponent<Tameable>() != (Object)null) { if (s_character.IsTamed()) { if (!canHitTameable) { continue; } } else if (!canHitWild) { continue; } } if (!s_character.IsDead()) { excludList.Add(s_character); return s_character; } } return null; } public static void ShootProjectile(ShieldGenerator tower, DynamicTower dyntower, ZDOID zdoid, GameObject victim, AmmoType ammotype) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: 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_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013c: 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_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Expected O, but got Unknown //IL_0193: 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_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0330: Unknown result type (might be due to invalid IL or missing references) projectileBuff = GetAmmoFromType(ammotype); if ((Object)(object)tower == (Object)null || (Object)(object)dyntower == (Object)null || (Object)(object)victim == (Object)null || (Object)(object)projectileBuff == (Object)null) { return; } Vector3 val = GetTowerShootPos(addoffsets: true); Vector3 val2 = val; val2.y += 1f; Vector3 val3 = val2 - val; Quaternion val4 = Quaternion.LookRotation(val3, Vector3.up); GameObject val5 = Object.Instantiate<GameObject>(projectileBuff, val, val4); if ((Object)(object)val5 == (Object)null) { return; } Projectile component = val5.GetComponent<Projectile>(); DynamicAmmo component2 = val5.GetComponent<DynamicAmmo>(); if ((Object)(object)component == (Object)null || (Object)(object)component2 == (Object)null) { Object.Destroy((Object)(object)val5); return; } component2.targetZDOID = zdoid; component2.m_tower = tower; component2.m_target = victim; component2.pointB = victim.transform.position; component2.posBff = victim.transform.position; component2.SetStartPoint(val); float num = Vector3.Distance(component2.pointA, component2.pointB); if (num <= 5f) { component.m_vel = ((Vector3)(ref val3)).normalized * m_speed3; } else if (num <= 10f) { component.m_vel = ((Vector3)(ref val3)).normalized * m_speed2; } else { component.m_vel = ((Vector3)(ref val3)).normalized * m_speed1; } HitData val6 = new HitData(); ((DamageTypes)(ref val6.m_damage)).Add(GetDamageType(ammotype), 1); val6.m_pushForce = 3f; val6.m_backstabBonus = 3f; val6.m_dodgeable = false; val6.m_blockable = false; val6.m_ranged = true; val6.m_skill = (SkillType)10; val6.m_skillRaiseAmount = (Game.m_worldLevel + 1) * 2; val6.m_hitType = (HitType)19; val6.m_healthReturn = 10f; val6.m_toolTier = 4; val6.m_itemWorldLevel = 0; val6.m_staggerMultiplier = 3f; component.m_damage = val6.m_damage; component.m_originalHitData = val6; component.m_stayTTL = 0f; component.m_gravity = 0f; component.m_stayAfterHitStatic = false; component.m_stayAfterHitDynamic = false; component.m_skill = val6.m_skill; component.m_raiseSkillAmount = val6.m_skillRaiseAmount; Rigidbody component3 = ((Component)component).GetComponent<Rigidbody>(); if ((Object)(object)component3 != (Object)null) { component3.mass = 0f; } Piece component4 = ((Component)tower).GetComponent<Piece>(); if ((Object)(object)component4 != (Object)null) { long creator = component4.GetCreator(); component.m_owner = (Character)(object)Player.GetPlayer(creator); if ((Object)(object)component.m_owner != (Object)null) { val6.m_attacker = component.m_owner.GetZDOID(); } } if ((Object)(object)component.m_owner == (Object)null) { component.m_owner = (Character)(object)Player.GetPlayer(tower.m_nview.GetZDO().GetOwner()); if ((Object)(object)component.m_owner != (Object)null) { val6.m_attacker = component.m_owner.GetZDOID(); } } IProjectile component5 = val5.GetComponent<IProjectile>(); if (component5 != null) { component5.Setup(component.m_owner, component.m_vel, 0f, val6, (ItemData)null, (ItemData)null); } static GameObject GetAmmoFromType(AmmoType type) { GameObject val8 = null; switch (type) { case AmmoType.Ice: val8 = projectileIce; if ((Object)(object)val8 == (Object)null) { GH.DWarn(" projectileIce == null"); } break; case AmmoType.Light: val8 = projectileLight; if ((Object)(object)val8 == (Object)null) { GH.DWarn(" projectileLight == null"); } break; case AmmoType.Sham: val8 = projectileSham; if ((Object)(object)val8 == (Object)null) { GH.DWarn(" projectileSham == null"); } break; case AmmoType.Rads: val8 = projectileRads; if ((Object)(object)val8 == (Object)null) { GH.DWarn(" projectileRads == null"); } break; default: val8 = null; GH.DWarn(" Attempt to fetch unknown projectile type"); break; } return val8; } static DamageTypes GetDamageType(AmmoType type) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) DamageTypes result = default(DamageTypes); switch (type) { case AmmoType.Ice: result.m_damage = projectileDamage; result.m_blunt = 50f; result.m_slash = 50f; result.m_pierce = 50f; result.m_chop = 50f; result.m_pickaxe = 50f; break; case AmmoType.Light: result.m_damage = projectileDamage; result.m_lightning = lightningLight; result.m_poison = 3f; break; case AmmoType.Sham: result.m_damage = projectileDamage; result.m_fire = fireballFire; result.m_poison = 3f; break; case AmmoType.Rads: result.m_damage = projectileDamage; result.m_spirit = radiatonSpirit; result.m_poison = 3f; break; } return result; } Vector3 GetTowerShootPos(bool addoffsets = false) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_0059: Unknown result type (might be due to invalid IL or missing references) Vector3 val7 = ((Component)tower).transform.position; val7.y += DynamicTower.fixedHeight + 0.5f; if ((Object)(object)dyntower != (Object)null) { if (addoffsets) { val7 += dyntower.shootOffsets[dyntower.offsets]; dyntower.offsets++; if (dyntower.offsets >= dyntower.shootOffsets.Length) { dyntower.offsets = 0; } } } else { val7 += Random.onUnitSphere * 1.5f; } return val7; } } public static bool IsAmmo(string name) { if (name.StartsWith(projectileName_Dynamic[0]) || name.StartsWith(projectileName_Dynamic[1]) || name.StartsWith(projectileName_Dynamic[2]) || name.StartsWith(projectileName_Dynamic[3])) { return true; } return false; } public bool IsHitPiecesNStatic(Collider projectileCollider, GameObject hitObject) { hitTreeBase = hitObject.GetComponent<TreeBase>(); if ((Object)(object)hitTreeBase != (Object)null) { IgnoreAllCollider(projectileCollider, hitObject); return true; } hitProjectile = hitObject.GetComponent<Projectile>(); if ((Object)(object)hitProjectile != (Object)null) { IgnoreAllCollider(projectileCollider, hitObject); return true; } hitWearTear = hitObject.GetComponent<WearNTear>(); if ((Object)(object)hitWearTear != (Object)null && !canHitStructure) { IgnoreAllCollider(projectileCollider, hitObject); return true; } return false; void IgnoreAllCollider(Collider baseCollider, GameObject go) { hitColliders = go.GetComponentsInChildren<Collider>(true); if (hitColliders.Length != 0) { Collider[] array = hitColliders; foreach (Collider val in array) { Physics.IgnoreCollision(baseCollider, val); } } } } public bool IsHitCharacter(Collider projectileCollider, Character character) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)((Component)character).GetComponent<Tameable>() != (Object)null) { if (character.m_tamed) { if (!canHitTameable) { Physics.IgnoreCollision(projectileCollider, ((Component)character).gameObject.GetComponent<Collider>()); return true; } } else if (!canHitWild) { Physics.IgnoreCollision(projectileCollider, ((Component)character).gameObject.GetComponent<Collider>()); return true; } } else if ((int)character.m_faction == 0 && character.IsPlayer()) { if (!canHitPlayer) { Physics.IgnoreCollision(projectileCollider, ((Component)character).gameObject.GetComponent<Collider>()); return true; } } else if (character.IsBoss() && !canHitBoss) { Physics.IgnoreCollision(projectileCollider, ((Component)character).gameObject.GetComponent<Collider>()); return true; } return false; } } public class DynamicText : MonoBehaviour { public enum TextType { Heal, Repair, Pickup, Destroy, Enemy, Misc, AOE, Skill } public class WorldTextInstance { public Vector3 m_worldPos; public GameObject m_gui; public float m_timer; public TMP_Text m_textField; } public static DynamicText m_instance; public float m_textDuration = 1.5f; public float m_maxTextDistance = 30f; public int m_largeFontSize = 16; public int m_smallFontSize = 8; public float m_smallFontDistance = 10f; public GameObject m_worldTextBase; public List<WorldTextInstance> m_worldTexts = new List<WorldTextInstance>(); public DamageText m_body; private float alpha = 0.5f; public static DynamicText instance => m_instance; public void Awake() { m_instance = this; m_body = ((Component)this).GetComponent<DamageText>(); m_worldTextBase = DamageText.instance.m_worldTextBase; ZRoutedRpc.instance.Register<ZPackage>("RPC_DamageText", (Action<long, ZPackage>)RPC_DamageText); } public void LateUpdate() { UpdateWorldTexts(Time.deltaTime); } public void UpdateWorldTexts(float dt) { //IL_006c: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: 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_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) WorldTextInstance worldTextInstance = null; Camera mainCamera = Utils.GetMainCamera(); foreach (WorldTextInstance worldText in m_worldTexts) { worldText.m_timer += dt; if (worldText.m_timer > m_textDuration && worldTextInstance == null) { worldTextInstance = worldText; } worldText.m_worldPos.y += dt; float num = Mathf.Clamp01(worldText.m_timer / m_textDuration); Color color = ((Graphic)worldText.m_textField).color; color.a = 1f - Mathf.Pow(num, 3f); ((Graphic)worldText.m_textField).color = color; Vector3 val = Utils.WorldToScreenPointScaled(mainCamera, worldText.m_worldPos); if (val.x < 0f || val.x > (float)Screen.width || val.y < 0f || val.y > (float)Screen.height || val.z < 0f) { worldText.m_gui.SetActive(false); continue; } worldText.m_gui.SetActive(true); worldText.m_gui.transform.position = val; } if (worldTextInstance != null) { Object.Destroy((Object)(object)worldTextInstance.m_gui); m_worldTexts.Remove(worldTextInstance); } } public void AddInworldText(TextType type, Vector3 pos, float distance, string num, bool mySelf) { //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_0027: 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) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) if (m_worldTexts.Count <= 200) { WorldTextInstance worldTextInstance = new WorldTextInstance(); worldTextInstance.m_worldPos = pos + Random.insideUnitSphere * 0.5f; worldTextInstance.m_gui = Object.Instantiate<GameObject>(m_worldTextBase, ((Component)this).transform); worldTextInstance.m_textField = worldTextInstance.m_gui.GetComponent<TMP_Text>(); worldTextInstance.m_timer = 0f; m_worldTexts.Add(worldTextInstance); string text = ""; Color color = Color.white; GetColorNText(type, ref text, ref color); worldTextInstance.m_textField.text = text + num; ((Graphic)worldTextInstance.m_textField).color = color; if (distance > m_smallFontDistance) { worldTextInstance.m_textField.fontSize = m_smallFontSize; } else { worldTextInstance.m_textField.fontSize = m_largeFontSize; } } } private void GetColorNText(TextType texttype, ref string text, ref Color color) { //IL_0008: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) text = ""; color = Color.white; switch (texttype) { case TextType.Heal: color = new Color(0f, 1f, 0f, alpha); text = "Heal "; break; case TextType.Repair: color = new Color(0.4f, 1f, 0.4f, alpha); text = "Repair "; break; case TextType.Pickup: color = new Color(0f, 1f, 1f, alpha); text = "Pickup "; break; case TextType.Destroy: color = new Color(1f, 0.5f, 0.5f, alpha); text = "Destroy "; break; case TextType.Enemy: color = new Color(1f, 0.62f, 0.31f, alpha); text = "Enemy "; break; case TextType.Misc: color = new Color(1f, 1f, 0.7f, alpha); text = "Misc "; break; case TextType.AOE: color = new Color(1f, 0f, 0f, alpha); text = "AOE "; break; case TextType.Skill: color = Color.yellow; text = ""; break; default: color = Color.white; break; } } public void ShowText(TextType type, Vector3 pos, string num, bool player = false) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_000e: Unknown result type (might be due to invalid IL or missing references) ZPackage val = new ZPackage(); val.Write((int)type); val.Write(pos); val.Write(num); val.Write(player); ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "RPC_DamageText", new object[1] { val }); } public void RPC_DamageText(long sender, ZPackage pkg) { //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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) Camera mainCamera = Utils.GetMainCamera(); if (Object.op_Implicit((Object)(object)mainCamera) && !Hud.IsUserHidden()) { TextType type = (TextType)pkg.ReadInt(); Vector3 val = pkg.ReadVector3(); string num = pkg.ReadString(); bool flag = pkg.ReadBool(); float num2 = Vector3.Distance(((Component)mainCamera).transform.position, val); if (!(num2 > m_maxTextDistance)) { bool mySelf = flag && sender == ZNet.GetUID(); AddInworldText(type, val, num2, num, mySelf); } } } } public class DynamicTower : MonoBehaviour { public ShieldGenerator m_shield; public ZNetView m_nview; public Container m_container; public bool showActivity; public int generatorCost; private Transform fakeDome1; private Transform fakeDome2; private Transform[] fakeWisps; public int Frag; public int Chrd = 1; public int Fuel = 2; private bool isDropContent; public float[] fuelAmount = new float[3] { -1f, -1f, -1f }; public string[] fuelName = new string[3] { "BoneFragments", "CharredBone", "None" }; private int wispNum; private int maxWisp = 10; private int ringNum; private int maxRing = 5; private float ringRad; private float ringOff; private Color ringColor = new Color(0.313f, 1f, 1f, 0.3f); private float particlePosition = 4f; private float particleDirection = 1f; private float triggerTime = 10f; public float domeScale; private bool triggerIsUsed; private Vector3 fixedPoint = new Vector3(0f, fixedHeight, 0f); public int offsets; public Vector3[] shootOffsets = (Vector3[])(object)new Vector3[5] { new Vector3(0f, 0f, 0f), new Vector3(0f, 0f, 1f), new Vector3(1f, 0f, 1f), new Vector3(1f, 0f, -1f), new Vector3(-1f, 0f, 1f) }; public static GameObject DynamicGoblin; public static GameObject DynamicStaff; public static GameObject DynamicWisp; public static string[] fakeName_Goblin = new string[2] { "vfx_DynamicGoblinShield", "vfx_GoblinShield" }; public static string[] fakeName_Staff = new string[2] { "vfx_DynamicStaffShield", "vfx_StaffShield" }; public static string[] fakeName_Wisp = new string[2] { "DynamicWisp", "LuredWisp" }; public static float shieldScale = 1.5f; public static float fixedHeight = 6.7f; private string zdoCount; private int healCount; private int repairCount; private int pickupCount; private int destroyCount; private int enemyCount; private int miscCount; private int aoeCount; public void Awake() { if (Player.IsPlacementGhost(((Component)this).gameObject)) { return; } if (showActivity) { GH.DWarn(" DynamicTrigger Awake"); } m_shield = ((Component)this).GetComponent<ShieldGenerator>(); m_nview = ((Component)this).GetComponent<ZNetView>(); m_container = ((Component)this).GetComponent<Container>(); fuelAmount[Fuel] = -1f; isDropContent = false; if (!((Object)(object)m_nview != (Object)null) || m_nview.GetZDO() == null) { return; } ((MonoBehaviour)this).InvokeRepeating("ApplyShieldEffect", 0f, 0.5f); m_nview.Register<string, int>("RPC_AddDynamicFuel", (Action<long, string, int>)RPC_AddDynamicFuel); m_nview.Register<int, int, int>("RPC_UseDynamicFuel", (Action<long, int, int, int>)RPC_UseDynamicFuel); m_nview.Register<int>("RPC_UseDynamicAoe", (Action<long, int>)RPC_UseDynamicAoe); if ((Object)(object)m_shield != (Object)null) { EffectData[] effectPrefabs = m_shield.m_fuelAddedEffects.m_effectPrefabs; foreach (EffectData val in effectPrefabs) { if (val != null && (Object)(object)val.m_prefab != (Object)null && ((Object)val.m_prefab).name == "sfx_kiln_addore") { val.m_prefab.SetActive(false); break; } } } ((MonoBehaviour)this).InvokeRepeating("DynamicSlowUpdate", 0f, 1f); if (m_nview.IsOwner()) { RemoveAllWisp(); } } public void Update() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) if (!IsShieldValid()) { return; } if (ringNum > 0) { ringRad = 1.8f; ringOff = -1f; for (int i = 0; i < ringNum; i++) { GH.DrawRayCircle(((Component)m_shield).transform.position, 0.1f, ringRad, (fixedHeight + ringOff) * shieldScale, ringColor); ringRad -= 0.3f; ringOff -= 0.5f; } } if (fuelAmount[Fuel] > 0f) { GH.ShowHaloRing(m_shield, "DynamicParticle_Ring1", 2f, 1.4f, ref particlePosition, ref particleDirection); GH.FollowLeadHaloRing(m_shield, "DynamicParticle_Ring2", 1.2f, particlePosition - 0.5f); GH.FollowLeadHaloRing(m_shield, "DynamicParticle_Ring3", 1f, particlePosition - 1f); GH.FollowLeadHaloRing(m_shield, "DynamicParticle_Ring4", 0.8f, particlePosition - 1.5f); } if (m_nview.IsOwner()) { domeScale = Mathf.Max(fuelAmount[Fuel] / (float)m_shield.m_maxFuel, 0.1f); FindandSet(fakeName_Goblin[0] + "(Clone)", domeScale, 0.5f * domeScale); FindandSet(fakeName_Staff[0] + "(Clone)", domeScale); } void FindandSet(string fxname, float set, float rad = 0f) { fakeDome1 = ((Component)m_shield).transform.Find(fxname); if ((Object)(object)fakeDome1 != (Object)null) { UpdateLocalPosition(((Component)fakeDome1).gameObject, set, rad); } } } public void DynamicSlowUpdate() { //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) if (!IsShieldValid()) { return; } if (fuelAmount[Fuel] == -1f) { LoadFuel(); LoadCounter(); fakeDome2 = ((Component)m_shield).transform.Find(fakeName_Goblin[0] + "(Clone)"); if ((Object)(object)fakeDome2 != (Object)null) { ZNetScene.instance.Destroy(((Component)fakeDome2).gameObject); } fakeDome2 = ((Component)m_shield).transform.Find(fakeName_Staff[0] + "(Clone)"); if ((Object)(object)fakeDome2 != (Object)null) { ZNetScene.instance.Destroy(((Component)fakeDome2).gameObject); } return; } if (triggerIsUsed && GH.IsTimeElpase(m_nview, ZDOVars.s_lastTime, triggerTime)) { triggerIsUsed = false; } ringNum = CountRingNumber(); if (!m_nview.IsOwner() || isDropContent) { return; } fakeDome2 = ((Component)m_shield).transform.Find(fakeName_Goblin[0] + "(Clone)"); if ((Object)(object)fakeDome2 == (Object)null) { CreateDome(DynamicGoblin); } fakeDome2 = ((Component)m_shield).transform.Find(fakeName_Staff[0] + "(Clone)"); if ((Object)(object)fakeDome2 == (Object)null) { CreateDome(DynamicStaff); } fakeWisps = FindChildren(((Component)m_shield).transform, fakeName_Wisp[0] + "(Clone)"); wispNum = GetWispNumber(); if (wispNum < fakeWisps.Length) { if ((Object)(object)ZNetScene.instance != (Object)null) { Transform val = ((Component)m_shield).transform.Find(fakeName_Wisp[0] + "(Clone)"); if ((Object)(object)val != (Object)null) { ZNetScene.instance.Destroy(((Component)val).gameObject); } } } else { if (wispNum <= fakeWisps.Length || !((Object)(object)ZNetScene.instance != (Object)null)) { return; } Vector3 val2 = ((Component)m_shield).transform.position + Vector3.up * fixedHeight * shieldScale; GameObject val3 = Object.Instantiate<GameObject>(DynamicWisp, val2, Quaternion.identity); if ((Object)(object)val3 != (Object)null) { val3.transform.SetParent(((Component)m_shield).transform, true); val3.transform.localPosition = new Vector3(0f, fixedHeight * shieldScale, 0f); LuredWisp component = val3.GetComponent<LuredWisp>(); if ((Object)(object)component != (Object)null) { component.m_despawnTimer = 3f; component.m_targetPoint = val2; component.m_despawnInDaylight = false; } else { ZNetScene.instance.Destroy(val3); } } } int CountRingNumber() { return (int)Mathf.Ceil(Mathf.Lerp(0f, (float)maxRing, fuelAmount[Fuel] / (float)m_shield.m_maxFuel)); } int GetWispNumber() { return (int)Mathf.Ceil(Mathf.Lerp(0f, (float)maxWisp, fuelAmount[Fuel] / (float)m_shield.m_maxFuel)); } } private Transform[] FindChildren(Transform transform, string name) { return (from t in ((Component)transform).GetComponentsInChildren<Transform>() where ((Object)t).name == name select t).ToArray(); } private void RemoveAllWisp() { if ((Object)(object)ZNetScene.instance == (Object)null) { return; } Transform[] array = FindChildren(((Component)m_shield).transform, fakeName_Wisp[0] + "(Clone)"); if (array.Length != 0) { for (int i = 0; i < array.Length; i++) { ZNetScene.instance.Destroy(((Component)array[i]).gameObject); } } } private GameObject CreateDome(GameObject fxobj, float addRadius = 0f) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)m_shield).transform.position + Vector3.up * fixedHeight * shieldScale; GameObject val2 = Object.Instantiate<GameObject>(fxobj, val, ((Component)m_shield).transform.rotation); if ((Object)(object)val2 != (Object)null) { val2.transform.SetParent(((Component)m_shield).transform, true); UpdateLocalPosition(val2, 0.1f, addRadius); return val2; } return null; } private void UpdateLocalPosition(GameObject vfxobj, float innerRad, float addRadius = 0f) { //IL_0018: 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) if ((Object)(object)vfxobj != (Object)null) { vfxobj.transform.localScale = new Vector3(innerRad + addRadius, innerRad + addRadius, innerRad + addRadius); vfxobj.transform.localPosition = new Vector3(0f, fixedHeight, 0f); } } public void InvokeUseAoe(int cost) { triggerIsUsed = true; m_nview.InvokeRPC(ZRoutedRpc.Everybody, "RPC_UseDynamicAoe", new object[1] { cost }); } private void RPC_UseDynamicAoe(long sender, int amount) { triggerIsUsed = true; RPC_UseDynamicFuel(0L, amount, 6, 1); if ((Object)(object)m_nview != (Object)null && m_nview.IsOwner()) { GH.SetZDOsTime(m_nview, ZDOVars.s_lastTime); } } public void InvokeAddFuel(string fuelname, int amount = 1) { m_nview.InvokeRPC(ZRoutedRpc.Everybody, "RPC_AddDynamicFuel", new object[2] { fuelname, amount }); } private void RPC_AddDynamicFuel(long sender, string fuelname, int amount) { //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) if (fuelname.StartsWith(fuelName[Frag])) { fuelAmount[Frag] += amount; } else if (fuelname.StartsWith(fuelName[Chrd])) { fuelAmount[Chrd] += amount; } fuelAmount[Fuel] = fuelAmount[Frag] + fuelAmount[Chrd]; m_shield.m_fuelAddedEffects.Create(((Component)m_shield).transform.position, ((Component)m_shield).transform.rotation, ((Component)m_shield).transform, 1f, -1); SetFuel(); } public void InvokeUseFuel(int cost, int DynType, int hitCount) { m_nview.InvokeRPC(ZRoutedRpc.Everybody, "RPC_UseDynamicFuel", new object[3] { cost, DynType, hitCount }); } private void RPC_UseDynamicFuel(long sender, int amount, int type, int hitNum) { if (fuelAmount[Frag] > 0f) { fuelAmount[Frag] = Mathf.Max(fuelAmount[Frag] - (float)amount, 0f); } else if (fuelAmount[Chrd] > 0f) { fuelAmount[Chrd] = Mathf.Max(fuelAmount[Chrd] - (float)amount, 0f); } fuelAmount[Fuel] = fuelAmount[Frag] + fuelAmount[Chrd]; SetFuel(); for (int i = 0; i < hitNum; i++) { ShowHitCount((DynamicText.TextType)type); } } private void SetFuel() { if ((Object)(object)m_nview != (Object)null && m_nview.IsOwner()) { m_nview.GetZDO().Set(ZDOVars.s_stamina, Mathf.Max(fuelAmount[Frag], 0f)); m_nview.GetZDO().Set(ZDOVars.s_health, Mathf.Max(fuelAmount[Chrd], 0f)); m_nview.GetZDO().Set(ZDOVars.s_fuel, Mathf.Max(fuelAmount[Fuel], 0f)); } } public void DropOnDestroy(Container crate, GameObject cargeCrate) { //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) if (((Object)(object)ZNetScene.instance == (Object)null && (Object)(object)m_shield == (Object)null) || (Object)(object)m_nview == (Object)null) { return; } isDropContent = true; if (!m_nview.IsOwner()) { return; } Transform val = ((Component)m_shield).transform.Find(fakeName_Goblin[0] + "(Clone)"); if ((Object)(object)val != (Object)null) { ZNetScene.instance.Destroy(((Component)val).gameObject); } val = ((Component)m_shield).transform.Find(fakeName_Staff[0] + "(Clone)"); if ((Object)(object)val != (Object)null) {