Please disclose if any significant portion of your mod was created 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 XIVItems v1.7.1
XIVitems.dll
Decompiled 2 years agousing System; using System.Collections; 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 BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using GameNetcodeStuff; using HarmonyLib; using LethalConfig; using LethalConfig.ConfigItems; using LethalLib.Modules; using Unity.Netcode; using UnityEngine; using UnityEngine.SceneManagement; using XIVitems; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Mare")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Mare")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("a1e7220b-a7c4-4bc7-b4ae-60397cbd6e8a")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] public class GunItem : GrabbableObject { public AudioSource gunAudio; public AudioSource gunShootAudio; public AudioSource gunBulletsRicochetAudio; private Coroutine gunCoroutine; public AudioClip[] gunShootSFX; public float damageScale = 0.5f; public int shotsPerCharge = 4; private float chargePerShot; private bool hasHitGroundWithSafetyOff = true; private bool localClientSendingShootGunRPC; private PlayerControllerB previousPlayerHeldBy; public ParticleSystem gunShootParticle; public Transform shotgunRayPoint; private RaycastHit[] enemyColliders; private EnemyAI heldByEnemy; public override void Start() { ((GrabbableObject)this).Start(); chargePerShot = 1f / (float)shotsPerCharge; } public override void Update() { ((GrabbableObject)this).Update(); if (((NetworkBehaviour)this).IsOwner && !((Object)(object)heldByEnemy != (Object)null) && !base.isPocketed) { } } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); previousPlayerHeldBy = base.playerHeldBy; previousPlayerHeldBy.equippedUsableItemQE = true; hasHitGroundWithSafetyOff = false; } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (((NetworkBehaviour)this).IsOwner && !base.insertedBattery.empty && base.insertedBattery.charge >= chargePerShot) { Debug.Log((object)("before: " + base.insertedBattery.charge)); ShootGunAndSync(heldByPlayer: true); base.insertedBattery.charge = Mathf.Clamp(base.insertedBattery.charge - chargePerShot, 0f, 1f); Debug.Log((object)("after: " + base.insertedBattery.charge)); } } public void ShootGunAndSync(bool heldByPlayer) { //IL_003a: 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_005d: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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) Vector3 shotgunPosition; Vector3 forward; if (!heldByPlayer) { shotgunPosition = shotgunRayPoint.position; forward = shotgunRayPoint.forward; } else { shotgunPosition = ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.position - ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.up * 0.45f; forward = ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.forward; } Debug.Log((object)"Calling shoot gun...."); ShootGun(shotgunPosition, forward); Debug.Log((object)"Calling shoot gun and sync"); localClientSendingShootGunRPC = true; ShootGunServerRpc(shotgunPosition, forward); } [ServerRpc(RequireOwnership = false)] public void ShootGunServerRpc(Vector3 shotgunPosition, Vector3 shotgunForward) { //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) ShootGunClientRpc(shotgunPosition, shotgunForward); } [ClientRpc] public void ShootGunClientRpc(Vector3 shotgunPosition, Vector3 shotgunForward) { //IL_002f: 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) Debug.Log((object)"Shoot gun client rpc received"); if (localClientSendingShootGunRPC) { localClientSendingShootGunRPC = false; Debug.Log((object)"localClientSendingShootGunRPC was true"); } else { ShootGun(shotgunPosition, shotgunForward); } } public void ShootGun(Vector3 shotgunPosition, Vector3 shotgunForward) { //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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_010b: 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_010e: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0266: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03d6: Unknown result type (might be due to invalid IL or missing references) //IL_03f6: Unknown result type (might be due to invalid IL or missing references) //IL_03fb: Unknown result type (might be due to invalid IL or missing references) //IL_0400: Unknown result type (might be due to invalid IL or missing references) //IL_0410: Unknown result type (might be due to invalid IL or missing references) //IL_041e: Unknown result type (might be due to invalid IL or missing references) //IL_0423: Unknown result type (might be due to invalid IL or missing references) //IL_047a: Unknown result type (might be due to invalid IL or missing references) //IL_0488: Unknown result type (might be due to invalid IL or missing references) //IL_04ca: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if (base.isHeld && (Object)(object)base.playerHeldBy != (Object)null && (Object)(object)base.playerHeldBy == (Object)(object)GameNetworkManager.Instance.localPlayerController) { base.playerHeldBy.playerBodyAnimator.SetTrigger("ShootShotgun"); flag = true; } RoundManager.PlayRandomClip(gunShootAudio, gunShootSFX, true, 1f, 1840, 1000); WalkieTalkie.TransmitOneShotAudio(gunShootAudio, gunShootSFX[0], 1f); gunShootParticle.Play(true); PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayerController == (Object)null) { return; } float num = Vector3.Distance(((Component)localPlayerController).transform.position, ((Component)shotgunRayPoint).transform.position); bool flag2 = false; int num2 = 0; float num3 = 0f; Vector3 val = localPlayerController.playerCollider.ClosestPoint(shotgunPosition); if (!flag && !Physics.Linecast(shotgunPosition, val, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1) && Vector3.Angle(shotgunForward, val - shotgunPosition) < 30f) { flag2 = true; } if (num < 5f) { num3 = 0.8f; HUDManager.Instance.ShakeCamera((ScreenShakeType)1); num2 = (int)(100f * damageScale); } if (num < 15f) { num3 = 0.5f; HUDManager.Instance.ShakeCamera((ScreenShakeType)1); num2 = (int)(100f * damageScale); } else if (num < 23f) { HUDManager.Instance.ShakeCamera((ScreenShakeType)0); num2 = (int)(40f * damageScale); } else if (num < 30f) { num2 = (int)(20f * damageScale); } Ray val2 = default(Ray); ((Ray)(ref val2))..ctor(shotgunPosition, shotgunForward); RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(val2, ref val3, 30f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { ((Component)gunBulletsRicochetAudio).transform.position = ((Ray)(ref val2)).GetPoint(((RaycastHit)(ref val3)).distance - 0.5f); gunBulletsRicochetAudio.Play(); } if (flag2) { Debug.Log((object)$"Dealing {num2} damage to player"); localPlayerController.DamagePlayer(num2, true, true, (CauseOfDeath)7, 0, false, shotgunRayPoint.forward * 30f); } if (enemyColliders == null) { enemyColliders = (RaycastHit[])(object)new RaycastHit[10]; } ((Ray)(ref val2))..ctor(shotgunPosition - shotgunForward * 10f, shotgunForward); int num4 = Physics.SphereCastNonAlloc(val2, 5f, enemyColliders, 15f, 524288, (QueryTriggerInteraction)2); Debug.Log((object)$"Enemies hit: {num4}"); IHittable val4 = default(IHittable); for (int i = 0; i < num4; i++) { Debug.Log((object)"Raycasting enemy"); if (!Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref enemyColliders[i])).transform).GetComponent<EnemyAICollisionDetect>())) { continue; } EnemyAI mainScript = ((Component)((RaycastHit)(ref enemyColliders[i])).transform).GetComponent<EnemyAICollisionDetect>().mainScript; if ((Object)(object)heldByEnemy != (Object)null && (Object)(object)heldByEnemy == (Object)(object)mainScript) { Debug.Log((object)"Shotgun is held by enemy, skipping enemy raycast"); continue; } Debug.Log((object)("Hit enemy " + mainScript.enemyType.enemyName)); if (((RaycastHit)(ref enemyColliders[i])).distance == 0f) { Debug.Log((object)"Spherecast started inside enemy collider"); } else if (Physics.Linecast(shotgunPosition, ((RaycastHit)(ref enemyColliders[i])).point, ref val3, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { Debug.DrawRay(((RaycastHit)(ref val3)).point, Vector3.up, Color.red, 15f); Debug.DrawLine(shotgunPosition, ((RaycastHit)(ref enemyColliders[i])).point, Color.cyan, 15f); Debug.Log((object)("Raycast hit wall: " + ((Object)((Component)((RaycastHit)(ref val3)).collider).gameObject).name)); } else if (((Component)((RaycastHit)(ref enemyColliders[i])).transform).TryGetComponent<IHittable>(ref val4)) { float num5 = Vector3.Distance(shotgunPosition, ((RaycastHit)(ref enemyColliders[i])).point); int num6 = ((num5 < 3.7f) ? 3 : ((!(num5 < 6f)) ? 1 : 2)); Debug.Log((object)$"Hit enemy, hitDamage: {num6}"); val4.Hit(num6, shotgunForward, base.playerHeldBy, true, -1); } else { Debug.Log((object)("Could not get hittable script from collider, transform: " + ((Object)((RaycastHit)(ref enemyColliders[i])).transform).name)); Debug.Log((object)("collider: " + ((Object)((RaycastHit)(ref enemyColliders[i])).collider).name)); } } } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); } } public class AzemCrystal : GrabbableObject { public bool isInverseTeleporter; public Transform teleportOutPosition; [Space(5f)] public Transform teleporterPosition; public Animator teleporterAnimator; public Animator buttonAnimator; public AudioSource buttonAudio; public AudioSource shipTeleporterAudio; public AudioClip buttonPressSFX; public AudioClip teleporterSpinSFX; public AudioClip teleporterBeamUpSFX; public AudioClip beamUpPlayerBodySFX; private Coroutine beamUpPlayerCoroutine; public int teleporterId = 1; private int[] playersBeingTeleported; private float cooldownTime; public float cooldownAmount; public InteractTrigger buttonTrigger; public static bool hasBeenSpawnedThisSession; public static bool hasBeenSpawnedThisSessionInverse; private Random shipTeleporterSeed; private void Awake() { playersBeingTeleported = new int[4] { -1, -1, -1, -1 }; if ((isInverseTeleporter && hasBeenSpawnedThisSessionInverse) || (!isInverseTeleporter && hasBeenSpawnedThisSession)) { buttonTrigger.interactable = false; cooldownTime = cooldownAmount; } hasBeenSpawnedThisSession = true; } private void OnDisable() { for (int i = 0; i < playersBeingTeleported.Length; i++) { if (playersBeingTeleported[i] == teleporterId) { StartOfRound.Instance.allPlayerScripts[playersBeingTeleported[i]].shipTeleporterId = -1; } } } public void PressTeleportButtonOnLocalClient() { if (!isInverseTeleporter || (!StartOfRound.Instance.inShipPhase && SceneManager.sceneCount > 1)) { PressTeleportButtonServerRpc(); } } [ServerRpc(RequireOwnership = false)] public void PressTeleportButtonServerRpc() { PressTeleportButtonClientRpc(); } [ClientRpc] public void PressTeleportButtonClientRpc() { PressButtonEffects(); if (beamUpPlayerCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(beamUpPlayerCoroutine); } cooldownTime = cooldownAmount; buttonTrigger.interactable = false; beamUpPlayerCoroutine = ((MonoBehaviour)this).StartCoroutine(beamUpPlayer()); } private void PressButtonEffects() { buttonAnimator.SetTrigger("press"); buttonAnimator.SetBool("GlassOpen", false); ((Component)buttonAnimator).GetComponentInChildren<AnimatedObjectTrigger>().boolValue = false; teleporterAnimator.SetTrigger("useTeleporter"); buttonAudio.PlayOneShot(buttonPressSFX); WalkieTalkie.TransmitOneShotAudio(buttonAudio, buttonPressSFX, 1f); } private IEnumerator beamUpPlayer() { shipTeleporterAudio.PlayOneShot(teleporterSpinSFX); PlayerControllerB playerToBeamUp = StartOfRound.Instance.mapScreen.targetedPlayer; if ((Object)(object)playerToBeamUp == (Object)null) { Debug.Log((object)"Targeted player is null"); yield break; } if ((Object)(object)playerToBeamUp.redirectToEnemy != (Object)null) { Debug.Log((object)$"Attemping to teleport enemy '{((Object)((Component)playerToBeamUp.redirectToEnemy).gameObject).name}' (tied to player #{playerToBeamUp.playerClientId}) to ship."); if (StartOfRound.Instance.shipIsLeaving) { Debug.Log((object)$"Ship could not teleport enemy '{((Object)((Component)playerToBeamUp.redirectToEnemy).gameObject).name}' (tied to player #{playerToBeamUp.playerClientId}) because the ship is leaving the nav mesh."); } playerToBeamUp.redirectToEnemy.ShipTeleportEnemy(); yield return (object)new WaitForSeconds(3f); shipTeleporterAudio.PlayOneShot(teleporterBeamUpSFX); if (GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } } SetPlayerTeleporterId(playerToBeamUp, 1); if ((Object)(object)playerToBeamUp.deadBody != (Object)null) { if ((Object)(object)playerToBeamUp.deadBody.beamUpParticle == (Object)null) { yield break; } playerToBeamUp.deadBody.beamUpParticle.Play(); playerToBeamUp.deadBody.bodyAudio.PlayOneShot(beamUpPlayerBodySFX); } else { playerToBeamUp.beamUpParticle.Play(); playerToBeamUp.movementAudio.PlayOneShot(beamUpPlayerBodySFX); } Debug.Log((object)"Teleport A"); yield return (object)new WaitForSeconds(3f); bool flag = false; if ((Object)(object)playerToBeamUp.deadBody != (Object)null) { if ((Object)(object)playerToBeamUp.deadBody.grabBodyObject == (Object)null || !playerToBeamUp.deadBody.grabBodyObject.isHeldByEnemy) { flag = true; playerToBeamUp.deadBody.attachedTo = null; playerToBeamUp.deadBody.attachedLimb = null; playerToBeamUp.deadBody.secondaryAttachedLimb = null; playerToBeamUp.deadBody.secondaryAttachedTo = null; playerToBeamUp.deadBody.SetRagdollPositionSafely(teleporterPosition.position, true); ((Component)playerToBeamUp.deadBody).transform.SetParent(StartOfRound.Instance.elevatorTransform, true); if ((Object)(object)playerToBeamUp.deadBody.grabBodyObject != (Object)null && playerToBeamUp.deadBody.grabBodyObject.isHeld && (Object)(object)playerToBeamUp.deadBody.grabBodyObject.playerHeldBy != (Object)null) { playerToBeamUp.deadBody.grabBodyObject.playerHeldBy.DropAllHeldItems(true, false); } } } else { flag = true; if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>())) { Object.FindObjectOfType<AudioReverbPresets>().audioPresets[3].ChangeAudioReverbForPlayer(playerToBeamUp); } playerToBeamUp.isInElevator = true; playerToBeamUp.isInHangarShipRoom = true; playerToBeamUp.isInsideFactory = false; playerToBeamUp.averageVelocity = 0f; playerToBeamUp.velocityLastFrame = Vector3.zero; playerToBeamUp.TeleportPlayer(teleporterPosition.position, true, 160f, false, true); } Debug.Log((object)"Teleport B"); SetPlayerTeleporterId(playerToBeamUp, -1); if (flag) { shipTeleporterAudio.PlayOneShot(teleporterBeamUpSFX); if (GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } } Debug.Log((object)"Teleport C"); } private void SetPlayerTeleporterId(PlayerControllerB playerScript, int teleporterId) { playerScript.shipTeleporterId = teleporterId; playersBeingTeleported[playerScript.playerClientId] = (int)playerScript.playerClientId; } } public class FireBall : MonoBehaviour { private float currentMissileSpeed; public TwoHandWithProjectile BLMStaffScript; private bool hitWall = true; private float despawnTimer; private float forwardDistance; private float lastRotationDistance; private void Start() { hitWall = false; currentMissileSpeed = BLMStaffScript.flySpeed; } private void FixedUpdate() { //IL_0046: 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_0061: 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) if (!hitWall) { if (despawnTimer < 5f) { despawnTimer += Time.deltaTime; CheckCollision(); Transform transform = ((Component)this).transform; transform.position += ((Component)this).transform.forward * BLMStaffScript.flySpeed * currentMissileSpeed; forwardDistance += BLMStaffScript.flySpeed * currentMissileSpeed; currentMissileSpeed += 0.05f; } else { Object.Destroy((Object)(object)((Component)this).gameObject); } } } private void CheckCollision() { //IL_0007: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018c: 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) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) RaycastHit val = default(RaycastHit); if (!Physics.Raycast(((Component)this).transform.position, ((Component)this).transform.forward, ref val, 0.6f * currentMissileSpeed, 526592, (QueryTriggerInteraction)2) && !Physics.Raycast(((Component)this).transform.position, ((Component)this).transform.forward, ref val, 0.6f * currentMissileSpeed, 8, (QueryTriggerInteraction)2)) { return; } Debug.Log((object)((Component)((Component)((RaycastHit)(ref val)).collider).transform).gameObject); Debug.Log((object)((Component)((RaycastHit)(ref val)).collider).gameObject.layer); if (((Component)((RaycastHit)(ref val)).collider).gameObject.layer == 19) { Debug.Log((object)"Hit Enemy"); EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref val)).collider).GetComponent<EnemyAICollisionDetect>(); if ((Object)(object)component != (Object)null && (Object)(object)component.mainScript == (Object)(object)BLMStaffScript) { return; } } bool calledByClient = false; if (((Component)((RaycastHit)(ref val)).collider).gameObject.layer == 3) { Debug.Log((object)"Hit Player"); PlayerControllerB component2 = ((Component)((RaycastHit)(ref val)).collider).gameObject.GetComponent<PlayerControllerB>(); if ((Object)(object)component2 != (Object)null && (Object)(object)component2 == (Object)(object)GameNetworkManager.Instance.localPlayerController) { calledByClient = true; } } hitWall = true; Debug.Log((object)"Hit wall"); BLMStaffScript.StartExplosion(((Component)this).transform.position - ((Component)this).transform.forward * 0.5f, ((Component)this).transform.forward, calledByClient); Object.Destroy((Object)(object)((Component)this).gameObject); } } public class TwoHandBackflip : GrabbableObject { public int shovelHitForce = 1; public bool reelingUp; public bool isHoldingButton; public float flipCooldown = 3f; private RaycastHit rayHit; private Coroutine reelingUpCoroutine; private RaycastHit[] objectsHitByShovel; private List<RaycastHit> objectsHitByShovelList = new List<RaycastHit>(); public AudioClip reelUp; public AudioClip swing; public float physicsForce = 30f; public GameObject knockOrigin; public AudioClip[] hitSFX; public AudioClip[] flipSFX; public AudioSource shovelAudio; private PlayerControllerB previousPlayerHeldBy; private PlayerControllerB playerControllerB; private int shovelMask = 11012424; public override void ItemActivate(bool used, bool buttonDown = true) { if ((Object)(object)base.playerHeldBy == (Object)null) { return; } isHoldingButton = buttonDown; if (!reelingUp && buttonDown) { reelingUp = true; previousPlayerHeldBy = base.playerHeldBy; if (reelingUpCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(reelingUpCoroutine); } reelingUpCoroutine = ((MonoBehaviour)this).StartCoroutine(reelUpShovel()); } } public override void ItemInteractLeftRight(bool right) { //IL_0095: 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_00c5: 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_00f7: 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_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_010e: 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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) if (!right) { Debug.Log((object)("curret cooldown" + base.currentUseCooldown)); playerControllerB = base.playerHeldBy; ((GrabbableObject)this).ItemInteractLeftRight(right); if (!((Object)(object)base.playerHeldBy == (Object)null) && base.currentUseCooldown <= 0f) { RoundManager.PlayRandomClip(shovelAudio, flipSFX, true, 0.8f, 0, 1000); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(knockOrigin.transform.position.x, ((Component)playerControllerB).transform.localPosition.y - 0.7f, knockOrigin.transform.position.z); float num = Vector3.Distance(((Component)playerControllerB).transform.position, val); Vector3 val2 = Vector3.Normalize(((Component)playerControllerB).transform.position + Vector3.up * num - val) / (num * 0.35f) * physicsForce; PlayerControllerB obj = playerControllerB; obj.externalForceAutoFade += val2; base.currentUseCooldown = flipCooldown; } } } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); base.playerHeldBy.equippedUsableItemQE = true; } private IEnumerator reelUpShovel() { base.playerHeldBy.activatingItem = true; base.playerHeldBy.twoHanded = true; base.playerHeldBy.playerBodyAnimator.ResetTrigger("shovelHit"); base.playerHeldBy.playerBodyAnimator.SetBool("reelingUp", true); shovelAudio.PlayOneShot(reelUp); ReelUpSFXServerRpc(); yield return (object)new WaitForSeconds(0.35f); yield return (object)new WaitUntil((Func<bool>)(() => !isHoldingButton || !base.isHeld)); SwingShovel(!base.isHeld); yield return (object)new WaitForSeconds(0.13f); yield return (object)new WaitForEndOfFrame(); HitShovel(!base.isHeld); yield return (object)new WaitForSeconds(0.3f); reelingUp = false; reelingUpCoroutine = null; } [ServerRpc] public void ReelUpSFXServerRpc() { ReelUpSFXClientRpc(); } [ClientRpc] public void ReelUpSFXClientRpc() { if (!((NetworkBehaviour)this).IsOwner) { shovelAudio.PlayOneShot(reelUp); } } public override void DiscardItem() { if ((Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.activatingItem = false; } ((GrabbableObject)this).DiscardItem(); } public void SwingShovel(bool cancel = false) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) previousPlayerHeldBy.playerBodyAnimator.SetBool("reelingUp", false); if (!cancel) { shovelAudio.PlayOneShot(swing); previousPlayerHeldBy.UpdateSpecialAnimationValue(true, (short)((Component)previousPlayerHeldBy).transform.localEulerAngles.y, 0.4f, false); } } public void HitShovel(bool cancel = false) { //IL_005f: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_0325: 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_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: 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_0156: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0283: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)previousPlayerHeldBy == (Object)null) { Debug.LogError((object)"Previousplayerheldby is null on this client when HitShovel is called."); return; } previousPlayerHeldBy.activatingItem = false; bool flag = false; bool flag2 = false; int num = -1; if (!cancel) { previousPlayerHeldBy.twoHanded = false; objectsHitByShovel = Physics.SphereCastAll(((Component)previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)previousPlayerHeldBy.gameplayCamera).transform.right * -0.35f, 0.8f, ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward, 1.5f, shovelMask, (QueryTriggerInteraction)2); objectsHitByShovelList = objectsHitByShovel.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList(); IHittable val2 = default(IHittable); RaycastHit val3 = default(RaycastHit); for (int i = 0; i < objectsHitByShovelList.Count; i++) { RaycastHit val = objectsHitByShovelList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 8) { val = objectsHitByShovelList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 11) { val = objectsHitByShovelList[i]; if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent<IHittable>(ref val2)) { continue; } val = objectsHitByShovelList[i]; if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)previousPlayerHeldBy).transform) { continue; } val = objectsHitByShovelList[i]; if (!(((RaycastHit)(ref val)).point == Vector3.zero)) { Vector3 position = ((Component)previousPlayerHeldBy.gameplayCamera).transform.position; val = objectsHitByShovelList[i]; if (Physics.Linecast(position, ((RaycastHit)(ref val)).point, ref val3, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { continue; } } flag = true; Vector3 forward = ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward; try { val2.Hit(shovelHitForce, forward, previousPlayerHeldBy, true, 1); flag2 = true; } catch (Exception arg) { Debug.Log((object)$"Exception caught when hitting object with shovel from player #{previousPlayerHeldBy.playerClientId}: {arg}"); } continue; } } flag = true; val = objectsHitByShovelList[i]; string tag = ((Component)((RaycastHit)(ref val)).collider).gameObject.tag; for (int j = 0; j < StartOfRound.Instance.footstepSurfaces.Length; j++) { if (StartOfRound.Instance.footstepSurfaces[j].surfaceTag == tag) { num = j; break; } } } } if (flag) { RoundManager.PlayRandomClip(shovelAudio, hitSFX, true, 1f, 0, 1000); Object.FindObjectOfType<RoundManager>().PlayAudibleNoise(((Component)this).transform.position, 17f, 0.8f, 0, false, 0); if (!flag2 && num != -1) { shovelAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(shovelAudio, StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX, 1f); } base.playerHeldBy.playerBodyAnimator.SetTrigger("shovelHit"); HitShovelServerRpc(num); } } [ServerRpc] public void HitShovelServerRpc(int hitSurfaceID) { HitShovelClientRpc(hitSurfaceID); } [ClientRpc] public void HitShovelClientRpc(int hitSurfaceID) { if (!((NetworkBehaviour)this).IsOwner) { RoundManager.PlayRandomClip(shovelAudio, hitSFX, true, 1f, 0, 1000); if (hitSurfaceID != -1) { HitSurfaceWithShovel(hitSurfaceID); } } } private void HitSurfaceWithShovel(int hitSurfaceID) { shovelAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(shovelAudio, StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX, 1f); } } namespace XIVitems; public class NoiseAndHeal : GrabbableObject { public int healAmount = 100; public ParticleSystem healVFX; public AudioSource noiseAudio; public AudioSource noiseAudioFar; [Space(3f)] public AudioClip[] noiseSFX; public AudioClip[] noiseSFXFar; public AudioClip[] healSFX; [Space(3f)] public float noiseRange; public float maxLoudness; public float minLoudness; public float minPitch; public float maxPitch; private Random noisemakerRandom; public override void Start() { ((GrabbableObject)this).Start(); noisemakerRandom = new Random(StartOfRound.Instance.randomMapSeed + 85); } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_0120: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemActivate(used, buttonDown); if (!((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null) && base.insertedBattery.charge > 0f) { int num = noisemakerRandom.Next(0, noiseSFX.Length); float num2 = (float)noisemakerRandom.Next((int)(minLoudness * 100f), (int)(maxLoudness * 100f)) / 100f; float pitch = (float)noisemakerRandom.Next((int)(minPitch * 100f), (int)(maxPitch * 100f)) / 100f; noiseAudio.pitch = pitch; noiseAudio.PlayOneShot(noiseSFX[num], num2); if ((Object)(object)noiseAudioFar != (Object)null) { noiseAudioFar.pitch = pitch; noiseAudioFar.PlayOneShot(noiseSFXFar[num], num2); } WalkieTalkie.TransmitOneShotAudio(noiseAudio, noiseSFX[num], num2); RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, noiseRange, num2, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0); if (minLoudness >= 0.6f && (Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.timeSinceMakingLoudNoise = 0f; } Heal(); } } public void Heal() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)("playerHeldby: " + base.playerHeldBy.playerUsername + " Health:" + base.playerHeldBy.health)); base.playerHeldBy.DamagePlayer(-healAmount, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); healVFX.Play(true); RoundManager.PlayRandomClip(noiseAudio, healSFX, true, 0.6f, 0, 1000); Debug.Log((object)("playerHeldby: " + base.playerHeldBy.playerUsername + " HealthAfterRpc:" + base.playerHeldBy.health)); if (base.playerHeldBy.health >= 20) { base.playerHeldBy.criticallyInjured = false; } base.insertedBattery.charge = 0f; } } public class OneHandMeleeBackFlip : GrabbableObject { public AudioSource weaponAudio; public float weaponRadius = 0.3f; public float maxDistance = 1.2f; private List<RaycastHit> objectsHitByweaponList = new List<RaycastHit>(); public PlayerControllerB previousPlayerHeldBy; private RaycastHit[] objectsHitByweapon; public int weaponHitForce; public float flipCoolDown = 2f; public float physicsForce = 30f; public GameObject knockOrigin; public AudioClip[] hitSFX; public AudioClip[] swingSFX; public AudioClip[] flipSFX; private int weaponMask = 11012424; private float timeAtLastDamageDealt; public ParticleSystem bloodParticle; private PlayerControllerB playerControllerB; public override void ItemActivate(bool used, bool buttonDown = true) { RoundManager.PlayRandomClip(weaponAudio, swingSFX, true, 1f, 0, 1000); if ((Object)(object)base.playerHeldBy != (Object)null) { previousPlayerHeldBy = base.playerHeldBy; if (((NetworkBehaviour)base.playerHeldBy).IsOwner) { base.playerHeldBy.playerBodyAnimator.SetTrigger("UseHeldItem1"); } } if (((NetworkBehaviour)this).IsOwner) { Hitweapon(); } } public override void ItemInteractLeftRight(bool right) { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: 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_00c4: 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_00dc: 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_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: 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_0105: 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_0115: 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_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) if (!right) { playerControllerB = base.playerHeldBy; ((GrabbableObject)this).ItemInteractLeftRight(right); if (!((Object)(object)base.playerHeldBy == (Object)null) && base.currentUseCooldown <= 0f) { RoundManager.PlayRandomClip(weaponAudio, flipSFX, true, 0.8f, 0, 1000); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(knockOrigin.transform.position.x, ((Component)playerControllerB).transform.localPosition.y - 0.7f, knockOrigin.transform.position.z); float num = Vector3.Distance(((Component)playerControllerB).transform.position, val); Vector3 val2 = Vector3.Normalize(((Component)playerControllerB).transform.position + Vector3.up * num - val) / (num * 0.35f) * physicsForce; PlayerControllerB obj = playerControllerB; obj.externalForceAutoFade += val2; base.currentUseCooldown = flipCoolDown; } } } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); base.playerHeldBy.equippedUsableItemQE = true; } public void Hitweapon(bool cancel = false) { //IL_005f: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_035d: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)previousPlayerHeldBy == (Object)null) { Debug.LogError((object)"Previousplayerheldby is null on this client when HitStaff is called."); return; } previousPlayerHeldBy.activatingItem = false; bool flag = false; bool flag2 = false; int num = -1; if (!cancel) { previousPlayerHeldBy.twoHanded = false; objectsHitByweapon = Physics.SphereCastAll(((Component)previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)previousPlayerHeldBy.gameplayCamera).transform.right * 0.1f, weaponRadius, ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward, maxDistance, weaponMask, (QueryTriggerInteraction)2); objectsHitByweaponList = objectsHitByweapon.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList(); IHittable val2 = default(IHittable); for (int i = 0; i < objectsHitByweaponList.Count; i++) { RaycastHit val = objectsHitByweaponList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 8) { val = objectsHitByweaponList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 11) { val = objectsHitByweaponList[i]; if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent<IHittable>(ref val2)) { continue; } val = objectsHitByweaponList[i]; if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)previousPlayerHeldBy).transform) { continue; } val = objectsHitByweaponList[i]; if (!(((RaycastHit)(ref val)).point == Vector3.zero)) { Vector3 position = ((Component)previousPlayerHeldBy.gameplayCamera).transform.position; RaycastHit val3 = objectsHitByweaponList[i]; if (Physics.Linecast(position, ((RaycastHit)(ref val3)).point, ref val, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { continue; } } flag = true; Vector3 forward = ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward; try { if (Time.realtimeSinceStartup - timeAtLastDamageDealt > 0.43f) { timeAtLastDamageDealt = Time.realtimeSinceStartup; val2.Hit(weaponHitForce, forward, previousPlayerHeldBy, true, 5); bloodParticle.Play(true); } flag2 = true; } catch (Exception arg) { Debug.Log((object)$"Exception caught when hitting object with staff from player #{previousPlayerHeldBy.playerClientId}: {arg}"); } continue; } } flag = true; val = objectsHitByweaponList[i]; string tag = ((Component)((RaycastHit)(ref val)).collider).gameObject.tag; for (int j = 0; j < StartOfRound.Instance.footstepSurfaces.Length; j++) { if (StartOfRound.Instance.footstepSurfaces[j].surfaceTag == tag) { num = j; break; } } } } if (flag) { RoundManager.PlayRandomClip(weaponAudio, hitSFX, true, 1f, 0, 1000); Object.FindObjectOfType<RoundManager>().PlayAudibleNoise(((Component)this).transform.position, 17f, 0.8f, 0, false, 0); if (!flag2 && num != -1) { weaponAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(weaponAudio, StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX, 1f); } HitStaffServerRpc(num); } } [ServerRpc] public void HitStaffServerRpc(int hitSurfaceID) { HitStaffClientRpc(hitSurfaceID); } [ClientRpc] public void HitStaffClientRpc(int hitSurfaceID) { if (!((NetworkBehaviour)this).IsOwner) { RoundManager.PlayRandomClip(weaponAudio, hitSFX, true, 1f, 0, 1000); if (hitSurfaceID != -1) { HitSurfaceWithweapon(hitSurfaceID); } } } private void HitSurfaceWithweapon(int hitSurfaceID) { weaponAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(weaponAudio, StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX, 1f); } } public class OneHandMelee : GrabbableObject { public AudioSource weaponAudio; public float weaponRadius = 0.3f; public float maxDistance = 1.2f; private List<RaycastHit> objectsHitByweaponList = new List<RaycastHit>(); public PlayerControllerB previousPlayerHeldBy; private RaycastHit[] objectsHitByweapon; public int weaponHitForce; public AudioClip[] hitSFX; public AudioClip[] swingSFX; private int weaponMask = 11012424; private float timeAtLastDamageDealt; public ParticleSystem bloodParticle; public override void ItemActivate(bool used, bool buttonDown = true) { RoundManager.PlayRandomClip(weaponAudio, swingSFX, true, 1f, 0, 1000); if ((Object)(object)base.playerHeldBy != (Object)null) { previousPlayerHeldBy = base.playerHeldBy; if (((NetworkBehaviour)base.playerHeldBy).IsOwner) { base.playerHeldBy.playerBodyAnimator.SetTrigger("UseHeldItem1"); } } if (((NetworkBehaviour)this).IsOwner) { Hitweapon(); } } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); } public void Hitweapon(bool cancel = false) { //IL_005f: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_035d: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)previousPlayerHeldBy == (Object)null) { Debug.LogError((object)"Previousplayerheldby is null on this client when HitStaff is called."); return; } previousPlayerHeldBy.activatingItem = false; bool flag = false; bool flag2 = false; int num = -1; if (!cancel) { previousPlayerHeldBy.twoHanded = false; objectsHitByweapon = Physics.SphereCastAll(((Component)previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)previousPlayerHeldBy.gameplayCamera).transform.right * 0.1f, weaponRadius, ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward, maxDistance, weaponMask, (QueryTriggerInteraction)2); objectsHitByweaponList = objectsHitByweapon.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList(); IHittable val2 = default(IHittable); for (int i = 0; i < objectsHitByweaponList.Count; i++) { RaycastHit val = objectsHitByweaponList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 8) { val = objectsHitByweaponList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 11) { val = objectsHitByweaponList[i]; if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent<IHittable>(ref val2)) { continue; } val = objectsHitByweaponList[i]; if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)previousPlayerHeldBy).transform) { continue; } val = objectsHitByweaponList[i]; if (!(((RaycastHit)(ref val)).point == Vector3.zero)) { Vector3 position = ((Component)previousPlayerHeldBy.gameplayCamera).transform.position; RaycastHit val3 = objectsHitByweaponList[i]; if (Physics.Linecast(position, ((RaycastHit)(ref val3)).point, ref val, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { continue; } } flag = true; Vector3 forward = ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward; try { if (Time.realtimeSinceStartup - timeAtLastDamageDealt > 0.43f) { timeAtLastDamageDealt = Time.realtimeSinceStartup; val2.Hit(weaponHitForce, forward, previousPlayerHeldBy, true, 5); bloodParticle.Play(true); } flag2 = true; } catch (Exception arg) { Debug.Log((object)$"Exception caught when hitting object with staff from player #{previousPlayerHeldBy.playerClientId}: {arg}"); } continue; } } flag = true; val = objectsHitByweaponList[i]; string tag = ((Component)((RaycastHit)(ref val)).collider).gameObject.tag; for (int j = 0; j < StartOfRound.Instance.footstepSurfaces.Length; j++) { if (StartOfRound.Instance.footstepSurfaces[j].surfaceTag == tag) { num = j; break; } } } } if (flag) { RoundManager.PlayRandomClip(weaponAudio, hitSFX, true, 1f, 0, 1000); Object.FindObjectOfType<RoundManager>().PlayAudibleNoise(((Component)this).transform.position, 17f, 0.8f, 0, false, 0); if (!flag2 && num != -1) { weaponAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(weaponAudio, StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX, 1f); } HitStaffServerRpc(num); } } [ServerRpc] public void HitStaffServerRpc(int hitSurfaceID) { HitStaffClientRpc(hitSurfaceID); } [ClientRpc] public void HitStaffClientRpc(int hitSurfaceID) { if (!((NetworkBehaviour)this).IsOwner) { RoundManager.PlayRandomClip(weaponAudio, hitSFX, true, 1f, 0, 1000); if (hitSurfaceID != -1) { HitSurfaceWithweapon(hitSurfaceID); } } } private void HitSurfaceWithweapon(int hitSurfaceID) { weaponAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(weaponAudio, StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX, 1f); } } [BepInPlugin("boboboba.XIVitems", "XIVitems", "1.3.10")] public class Plugin : BaseUnityPlugin { private const string GUID = "boboboba.XIVitems"; private const string NAME = "XIVitems"; private const string VERSION = "1.3.10"; private const string GUID2 = "ainavt.lc.lethalconfig"; public static Plugin instance; private static AssetBundle bundle; private static ConfigEntry<bool> config_RestrictXIVItem; private static string[] XivMoonList = new string[7] { "Mare", "Limsa", "Amaurot", "Ishgard", "Crystarium", "Elpis", "Kugane" }; public static bool IsAvailable => Chainloader.PluginInfos.ContainsKey("ainavt.lc.lethalconfig"); private void Awake() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown instance = this; ((BaseUnityPlugin)this).Logger.LogInfo((object)("LethalConfig Avaliable: " + IsAvailable)); config_RestrictXIVItem = ((BaseUnityPlugin)this).Config.Bind<bool>("Spawn", "Limit to FFXIV moons", false, new ConfigDescription("Check this box to make XIVitems only spawn on Bobo's FFXIV moons", (AcceptableValueBase)null, Array.Empty<object>())); string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "xivitemmod"); bundle = AssetBundle.LoadFromFile(text); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Rock.asset", "Rock", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Ronka.asset", "Great serpent of Ronka", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Bunny.asset", "ScammingWay", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/UFO.asset", "UFO", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Eyes.asset", "Possessed Eye", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Mask.asset", "Mysterious Mask", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Sword.asset", "Ame-no-Habakiri", 25); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Shield.asset", "Broken Shield", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/CatBoi.asset", "Best Boi", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Namazu.asset", "Golden Namazu Plush", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Pupu.asset", "Pupu Plush", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Emet.asset", "Grumpy Old Man", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/AbyssalAxe.asset", "Abyssal War Axe", 20); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/BahamutMini.asset", "Bahamut Statue", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/BlackMagePlush.asset", "Black Mage Plush", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Doll1.asset", "Blue Doll", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Doll2.asset", "Red Doll", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/HadesCrystal.asset", "Hades Crystal", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/IndirectLight.asset", "Indirect Lighting", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/OdinMini.asset", "Odin Statue", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/SwordofLight.asset", "Sword of Light", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/TableOrchestrion.asset", "Table Orchestrion", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/UmbralHammer.asset", "Bonk Hammer", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/DwarvenMythrilHammer.asset", "Dwarven Mythril Hammer", 25); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Estinein.asset", "Estinein Plush", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/FatCatBank.asset", "Fat Cat Bank", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/LionHeart.asset", "Lion Heart", 25); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/NidhoggMini.asset", "Nidhogg Statue", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/SummoningBell.asset", "Summoning Bell", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Tataru.asset", "Tataru Plush", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/ToraJiro.asset", "Tora Jiro", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Urianger.asset", "Urianger Plush", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Hien.asset", "Hien Plush", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Yshtola.asset", "Yshtola Plush", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/ZenosScythe.asset", "Zenos Scythe", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/GaeBolg.asset", "GaeBolg", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Hi-Elixir.asset", "Hi-Elixir", 25); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/WhiteMageStaff.asset", "White Mage Staff", 30); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Hythlodaeus.asset", "Hythlodaeus Plush", 40); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/BlackMageStaff.asset", "Black Mage Staff", 25); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/AlisaieRapier.asset", "Red Mage Rapier", 25); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/EmetPistol.asset", "Emet Pistol", 25); LoadScrap(text, "Assets/LethalCompany/Mods/Items/ItemProperties/Yugiri.asset", "Yugiri Plush", 30); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "boboboba.XIVitems"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"XIV Items Loaded"); } private void LoadScrap(string assetDir, string innerAssetPath, string name, int rarity) { //IL_0017: 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_0045: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_004a: Expected O, but got Unknown ConfigEntry<int> val = ((BaseUnityPlugin)this).Config.Bind<int>(new ConfigDefinition("General", name + " Rarity"), rarity, new ConfigDescription("How often " + name + " will show up. Higher value means more likely to show up", (AcceptableValueBase)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); Item val2 = bundle.LoadAsset<Item>(innerAssetPath); NetworkPrefabs.RegisterNetworkPrefab(val2.spawnPrefab); Utilities.FixMixerGroups(val2.spawnPrefab); if (config_RestrictXIVItem.Value) { Items.RegisterScrap(val2, val.Value, (LevelTypes)1, XivMoonList); } else { Items.RegisterScrap(val2, val.Value, (LevelTypes)(-1)); } if (IsAvailable) { AddIntSlider(val, restartRequired: true); } ((BaseUnityPlugin)this).Logger.LogInfo((object)(name + " Loaded. Rarity: " + val.Value)); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void AddIntSlider(ConfigEntry<int> entry, bool restartRequired) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(entry, restartRequired)); } } public class TwoHandWithProjectile : GrabbableObject { public int staffHitForce = 0; public int healAmount = 20; public GameObject FireBalllPrefab; public GameObject explosionPrefab; public AudioSource explosionAudio; private Vector3 previousExplosionPosition; public float flySpeed = 0.1f; public GameObject startTransform; public bool reelingUp; public bool isHoldingButton; public int shotsPerCharge = 4; private float chargePerShot; private Coroutine reelingUpCoroutine; public AudioClip reelUp; public AudioClip swing; public AudioClip[] largeExplosionSFX; public AudioSource staffAudio; private PlayerControllerB previousPlayerHeldBy; private int staffMask = 11012424; public AudioClip[] fireBallSfx; public AudioSource fireBallAudio; public override void ItemActivate(bool used, bool buttonDown = true) { if ((Object)(object)base.playerHeldBy == (Object)null) { return; } isHoldingButton = buttonDown; if (!reelingUp && buttonDown) { reelingUp = true; previousPlayerHeldBy = base.playerHeldBy; if (reelingUpCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(reelingUpCoroutine); } reelingUpCoroutine = ((MonoBehaviour)this).StartCoroutine(ReelUpStaff()); } } private IEnumerator ReelUpStaff() { base.playerHeldBy.activatingItem = true; base.playerHeldBy.twoHanded = true; base.playerHeldBy.playerBodyAnimator.ResetTrigger("shovelHit"); base.playerHeldBy.playerBodyAnimator.SetBool("reelingUp", true); staffAudio.PlayOneShot(reelUp); ReelUpSFXServerRpc(); yield return (object)new WaitForSeconds(0.35f); yield return (object)new WaitUntil((Func<bool>)(() => !isHoldingButton || !base.isHeld)); SwingStaff(!base.isHeld); yield return (object)new WaitForSeconds(0.13f); yield return (object)new WaitForEndOfFrame(); if (!StartOfRound.Instance.inShipPhase) { StartShootFireBall(); } yield return (object)new WaitForSeconds(0.3f); reelingUp = false; reelingUpCoroutine = null; previousPlayerHeldBy.activatingItem = false; previousPlayerHeldBy.twoHanded = false; } [ServerRpc] public void ReelUpSFXServerRpc() { ReelUpSFXClientRpc(); } [ClientRpc] public void ReelUpSFXClientRpc() { if (!((NetworkBehaviour)this).IsOwner) { staffAudio.PlayOneShot(reelUp); } } public override void DiscardItem() { if ((Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.activatingItem = false; } ((GrabbableObject)this).DiscardItem(); } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); chargePerShot = 1f / (float)shotsPerCharge; } public void SwingStaff(bool cancel = false) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) previousPlayerHeldBy.playerBodyAnimator.SetBool("reelingUp", false); if (!cancel) { staffAudio.PlayOneShot(swing); previousPlayerHeldBy.UpdateSpecialAnimationValue(true, (short)((Component)previousPlayerHeldBy).transform.localEulerAngles.y, 0.4f, false); } } public void StartShootFireBall() { //IL_0022: 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_0059: 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) if (((NetworkBehaviour)this).IsServer) { Debug.Log((object)"FireBall Start"); Debug.Log((object)startTransform.transform.position); Debug.Log((object)startTransform.transform.eulerAngles); ShootFireBallClientRpc(startTransform.transform.position, startTransform.transform.eulerAngles); } } [ClientRpc] public void ShootFireBallClientRpc(Vector3 startPos, Vector3 startRot) { //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) ShootFireBall(startPos, startRot); } public void ShootFireBall(Vector3 startPos, Vector3 startRot) { //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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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) if (!base.insertedBattery.empty && base.insertedBattery.charge >= chargePerShot) { GameObject val = Object.Instantiate<GameObject>(FireBalllPrefab, startPos, Quaternion.Euler(startRot), RoundManager.Instance.mapPropsContainer.transform); val.GetComponent<FireBall>().BLMStaffScript = this; RoundManager.PlayRandomClip(fireBallAudio, fireBallSfx, true, 1f, 0, 1000); if (Vector3.Distance(((Component)this).transform.position, ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.position) < 16f) { HUDManager.Instance.ShakeCamera((ScreenShakeType)0); } base.insertedBattery.charge = Mathf.Clamp(base.insertedBattery.charge - chargePerShot, 0f, 1f); } previousPlayerHeldBy.activatingItem = false; } public void StartExplosion(Vector3 explosionPosition, Vector3 forwardRotation, bool calledByClient = false) { //IL_0023: 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_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"startedExplosiion"); if (((NetworkBehaviour)this).IsServer) { Debug.Log((object)"startExpserver"); SetExplosionClientRpc(explosionPosition, forwardRotation); } else if (calledByClient) { Debug.Log((object)"startExpccalledbyc"); SetExplosionServerRpc(explosionPosition, forwardRotation); } } public void SetExplosion(Vector3 explosionPosition, Vector3 forwardRotation) { //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_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_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_004d: 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_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) //IL_00de: 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_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"SettingExplosion"); if (Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, explosionPosition - forwardRotation * 0.1f) < 8f) { Debug.Log((object)"spawn1"); Landmine.SpawnExplosion(explosionPosition - forwardRotation * 0.1f, true, 1f, 7f, 30, 65f, explosionPrefab); } else { Landmine.SpawnExplosion(explosionPosition - forwardRotation * 0.1f, true, 1f, 7f, 30, 35f, explosionPrefab); } Debug.Log((object)("ExplosionAudio is Active: " + ((Behaviour)explosionAudio).isActiveAndEnabled)); ((Component)explosionAudio).transform.position = explosionPosition + Vector3.up * 0.5f; Debug.Log((object)((Component)explosionAudio).transform.position); RoundManager.PlayRandomClip(explosionAudio, largeExplosionSFX, true, 1f, 0, 1000); RaycastHit val = default(RaycastHit); if (!(Vector3.Distance(previousExplosionPosition, explosionPosition) < 4f) && Physics.Raycast(explosionPosition - forwardRotation * 0.1f, forwardRotation, ref val, 4f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { _ = ((RaycastHit)(ref val)).normal; } } [ServerRpc(RequireOwnership = false)] public void SetExplosionServerRpc(Vector3 explosionPosition, Vector3 forwardRotation) { //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) SetExplosionClientRpc(explosionPosition, forwardRotation, calledByClient: true); } [ClientRpc] public void SetExplosionClientRpc(Vector3 explosionPosition, Vector3 forwardRotation, bool calledByClient = false) { //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) SetExplosion(explosionPosition, forwardRotation); } } public class TwoHandHeal : GrabbableObject { public int staffHitForce = 0; public int healAmount = 20; public ParticleSystem healVFX; public bool reelingUp; public bool isHoldingButton; private RaycastHit rayHit; private Coroutine reelingUpCoroutine; private RaycastHit[] objectsHitByStaff; private List<RaycastHit> objectsHitByStaffList = new List<RaycastHit>(); public AudioClip reelUp; public AudioClip swing; public AudioClip[] hitSFX; public AudioClip[] healSFX; public AudioSource staffAudio; private PlayerControllerB previousPlayerHeldBy; private int staffMask = 11012424; public override void ItemActivate(bool used, bool buttonDown = true) { if ((Object)(object)base.playerHeldBy == (Object)null) { return; } isHoldingButton = buttonDown; if (!reelingUp && buttonDown) { reelingUp = true; previousPlayerHeldBy = base.playerHeldBy; if (reelingUpCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(reelingUpCoroutine); } reelingUpCoroutine = ((MonoBehaviour)this).StartCoroutine(ReelUpStaff()); } } private IEnumerator ReelUpStaff() { base.playerHeldBy.activatingItem = true; base.playerHeldBy.twoHanded = true; base.playerHeldBy.playerBodyAnimator.ResetTrigger("shovelHit"); base.playerHeldBy.playerBodyAnimator.SetBool("reelingUp", true); staffAudio.PlayOneShot(reelUp); ReelUpSFXServerRpc(); yield return (object)new WaitForSeconds(0.35f); yield return (object)new WaitUntil((Func<bool>)(() => !isHoldingButton || !base.isHeld)); SwingStaff(!base.isHeld); yield return (object)new WaitForSeconds(0.13f); yield return (object)new WaitForEndOfFrame(); HitStaff(!base.isHeld); yield return (object)new WaitForSeconds(0.3f); reelingUp = false; reelingUpCoroutine = null; } [ServerRpc] public void ReelUpSFXServerRpc() { ReelUpSFXClientRpc(); } [ClientRpc] public void ReelUpSFXClientRpc() { if (!((NetworkBehaviour)this).IsOwner) { staffAudio.PlayOneShot(reelUp); } } public override void DiscardItem() { if ((Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.activatingItem = false; } ((GrabbableObject)this).DiscardItem(); } public void SwingStaff(bool cancel = false) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) previousPlayerHeldBy.playerBodyAnimator.SetBool("reelingUp", false); if (!cancel) { staffAudio.PlayOneShot(swing); previousPlayerHeldBy.UpdateSpecialAnimationValue(true, (short)((Component)previousPlayerHeldBy).transform.localEulerAngles.y, 0.4f, false); } } public void HitStaff(bool cancel = false) { //IL_005f: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_0386: 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_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: 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_0156: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0219: 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_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_029b: 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) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)previousPlayerHeldBy == (Object)null) { Debug.LogError((object)"Previousplayerheldby is null on this client when HitStaff is called."); return; } previousPlayerHeldBy.activatingItem = false; bool flag = false; bool flag2 = false; int num = -1; if (!cancel) { previousPlayerHeldBy.twoHanded = false; objectsHitByStaff = Physics.SphereCastAll(((Component)previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)previousPlayerHeldBy.gameplayCamera).transform.right * -0.35f, 0.8f, ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward, 1.5f, staffMask, (QueryTriggerInteraction)2); objectsHitByStaffList = objectsHitByStaff.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList(); IHittable val2 = default(IHittable); RaycastHit val3 = default(RaycastHit); for (int i = 0; i < objectsHitByStaffList.Count; i++) { RaycastHit val = objectsHitByStaffList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 8) { val = objectsHitByStaffList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 11) { val = objectsHitByStaffList[i]; if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent<IHittable>(ref val2)) { continue; } val = objectsHitByStaffList[i]; if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)previousPlayerHeldBy).transform) { continue; } val = objectsHitByStaffList[i]; if (!(((RaycastHit)(ref val)).point == Vector3.zero)) { Vector3 position = ((Component)previousPlayerHeldBy.gameplayCamera).transform.position; val = objectsHitByStaffList[i]; if (Physics.Linecast(position, ((RaycastHit)(ref val)).point, ref val3, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { continue; } } flag = true; Vector3 forward = ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward; try { val = objectsHitByStaffList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.CompareTag("Player")) { val = objectsHitByStaffList[i]; PlayerControllerB component = ((Component)((RaycastHit)(ref val)).transform).gameObject.GetComponent<PlayerControllerB>(); Heal(component); flag2 = true; } else { val2.Hit(staffHitForce, forward, previousPlayerHeldBy, true, 1); flag2 = true; } } catch (Exception arg) { Debug.Log((object)$"Exception caught when hitting object with staff from player #{previousPlayerHeldBy.playerClientId}: {arg}"); } continue; } } flag = true; val = objectsHitByStaffList[i]; string tag = ((Component)((RaycastHit)(ref val)).collider).gameObject.tag; for (int j = 0; j < StartOfRound.Instance.footstepSurfaces.Length; j++) { if (StartOfRound.Instance.footstepSurfaces[j].surfaceTag == tag) { num = j; break; } } } } if (flag) { RoundManager.PlayRandomClip(staffAudio, hitSFX, true, 1f, 0, 1000); Object.FindObjectOfType<RoundManager>().PlayAudibleNoise(((Component)this).transform.position, 17f, 0.8f, 0, false, 0); if (!flag2 && num != -1) { staffAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(staffAudio, StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX, 1f); } base.playerHeldBy.playerBodyAnimator.SetTrigger("staffHit"); HitStaffServerRpc(num); } } public void Heal(PlayerControllerB playerToHeal) { //IL_0040: 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) Debug.Log((object)("previousplayerHeldby: " + previousPlayerHeldBy.playerUsername + " Health:" + previousPlayerHeldBy.health)); playerToHeal.DamagePlayer(-healAmount, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); healVFX.Play(true); RoundManager.PlayRandomClip(staffAudio, healSFX, true, 0.6f, 0, 1000); Debug.Log((object)("playerToHeal: " + playerToHeal.playerUsername + "| HealthAfterRpc: " + playerToHeal.health)); if (playerToHeal.health >= 20) { playerToHeal.criticallyInjured = false; } } [ServerRpc] public void HitStaffServerRpc(int hitSurfaceID) { HitStaffClientRpc(hitSurfaceID); } [ClientRpc] public void HitStaffClientRpc(int hitSurfaceID) { if (!((NetworkBehaviour)this).IsOwner) { RoundManager.PlayRandomClip(staffAudio, hitSFX, true, 1f, 0, 1000); if (hitSurfaceID != -1) { HitSurfaceWithStaff(hitSurfaceID); } } } private void HitSurfaceWithStaff(int hitSurfaceID) { staffAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(staffAudio, StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX, 1f); } }