using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OpenScripts2;
using OtherLoader;
using UnityEngine;
using theWNbotMods;
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace theWNbotMods
{
public class AC130TabletLeftHand : FVRInteractiveObject
{
[Header("平板主控制器")]
public AC130TabletRightHand tabletController;
[Header("干扰弹 Prefab")]
public GameObject countermeasurePrefab;
[Header("Debug 模拟输入")]
public bool SimTrigger = false;
public bool SimStickLeft = false;
public bool SimStickRight = false;
public bool SimStickUp = false;
public bool SimStickDown = false;
private Vector2 _lAxes;
public override void UpdateInteraction(FVRViveHand hand)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Invalid comparison between Unknown and I4
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Invalid comparison between Unknown and I4
//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_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Invalid comparison between Unknown and I4
//IL_004a: 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)
((FVRInteractiveObject)this).UpdateInteraction(hand);
if ((int)hand.HandSource != 1)
{
return;
}
if ((int)hand.CMode == 3 || (int)hand.CMode == 1)
{
_lAxes = hand.Input.Secondary2AxisInputAxes;
}
else
{
_lAxes = hand.Input.TouchpadAxes;
}
if (SimStickLeft)
{
_lAxes.x = -1f;
SimStickLeft = false;
}
if (SimStickRight)
{
_lAxes.x = 1f;
SimStickRight = false;
}
if (SimStickUp)
{
_lAxes.y = 1f;
SimStickUp = false;
}
if (SimStickDown)
{
_lAxes.y = -1f;
SimStickDown = false;
}
if (_lAxes.x > 0.8f)
{
tabletController.CurrentIndex++;
}
else if (_lAxes.x < -0.8f)
{
tabletController.CurrentIndex--;
}
if (hand.Input.TriggerDown || SimTrigger)
{
if ((Object)(object)countermeasurePrefab != (Object)null)
{
countermeasurePrefab.SetActive(true);
}
SimTrigger = false;
}
}
}
public class AC130TabletRightHand : FVRPhysicalObject
{
[Header("炮艇控制器")]
public OrbitalStrikeController[] strikeControllers;
public GameObject[] cannonUIPrefabs;
[Header("摄像头角度限制")]
public Transform cameraPivot;
public float yawLimit = 60f;
public float pitchLimit = 30f;
public float rotationSpeed = 2f;
[Header("Debug 模拟输入")]
public bool SimTrigger = false;
public bool SimStickLeft = false;
public bool SimStickRight = false;
public bool SimStickUp = false;
public bool SimStickDown = false;
private Vector2 _rAxes;
private int currentIndex = 0;
public int CurrentIndex
{
get
{
return currentIndex;
}
set
{
currentIndex = Mathf.Clamp(value, 0, strikeControllers.Length - 1);
UpdateUI();
}
}
public override void UpdateInteraction(FVRViveHand hand)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Invalid comparison between Unknown and I4
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Invalid comparison between Unknown and I4
//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_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Invalid comparison between Unknown and I4
//IL_004a: 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_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: 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_0163: Unknown result type (might be due to invalid IL or missing references)
((FVRPhysicalObject)this).UpdateInteraction(hand);
if ((int)hand.HandSource != 2)
{
return;
}
if ((int)hand.CMode == 3 || (int)hand.CMode == 1)
{
_rAxes = hand.Input.Secondary2AxisInputAxes;
}
else
{
_rAxes = hand.Input.TouchpadAxes;
}
if (SimStickLeft)
{
_rAxes.x = -1f;
SimStickLeft = false;
}
if (SimStickRight)
{
_rAxes.x = 1f;
SimStickRight = false;
}
if (SimStickUp)
{
_rAxes.y = 1f;
SimStickUp = false;
}
if (SimStickDown)
{
_rAxes.y = -1f;
SimStickDown = false;
}
float num = Mathf.Clamp(cameraPivot.localEulerAngles.y + _rAxes.x * rotationSpeed, 0f - yawLimit, yawLimit);
float num2 = Mathf.Clamp(cameraPivot.localEulerAngles.x - _rAxes.y * rotationSpeed, 0f - pitchLimit, pitchLimit);
cameraPivot.localRotation = Quaternion.Euler(num2, num, 0f);
if (!hand.Input.TriggerDown && !SimTrigger)
{
return;
}
if (strikeControllers != null && strikeControllers.Length > 0)
{
OrbitalStrikeController orbitalStrikeController = strikeControllers[currentIndex];
if ((Object)(object)orbitalStrikeController != (Object)null)
{
orbitalStrikeController.shouldFire = true;
}
}
SimTrigger = false;
}
public void UpdateUI()
{
for (int i = 0; i < cannonUIPrefabs.Length; i++)
{
if ((Object)(object)cannonUIPrefabs[i] != (Object)null)
{
cannonUIPrefabs[i].SetActive(i == currentIndex);
}
}
}
public void SetCurrentIndex(int index)
{
CurrentIndex = index;
}
}
public class AirstrikeBinocular : FVRPhysicalObject
{
[Header("望远镜镜头中心(Ray 起点)")]
public Transform RayOrigin;
[Header("默认空袭 Prefab")]
public GameObject defaultAirstrikePrefab;
[Header("最大射程")]
public float MaxDistance = 500f;
[Header("可命中的层(地面、环境等)")]
public LayerMask HitLayers;
[Header("菜单 UI Canvas")]
public GameObject menuCanvas;
[Header("音效播放")]
public AudioSource audioSource;
private GameObject currentAirstrikePrefab;
private AudioClip[] currentAirstrikeClips;
[Header("调试信息")]
[SerializeField]
private string currentTypeName = "None";
[Header("部署方向设置")]
[SerializeField]
private Vector3 rotationOffsetEuler = Vector3.zero;
[Header("冷却时间设置")]
[SerializeField]
private float cooldownTime = 5f;
private float lastDeployTime = -999f;
[Header("调试开关")]
[SerializeField]
private bool debugTrigger = false;
private void Start()
{
currentAirstrikePrefab = defaultAirstrikePrefab;
currentTypeName = ((!((Object)(object)defaultAirstrikePrefab != (Object)null)) ? "None" : ((Object)defaultAirstrikePrefab).name);
if ((Object)(object)menuCanvas != (Object)null)
{
menuCanvas.SetActive(false);
}
Debug.Log((object)("AirstrikeBinocular当前空袭类型: " + currentTypeName));
}
private void Update()
{
if (debugTrigger)
{
Debug.Log((object)("调试Inspector触发空袭 → " + currentTypeName));
DeployAirstrike(null);
debugTrigger = false;
}
}
public void ToggleMenu(bool isOpen)
{
if ((Object)(object)menuCanvas != (Object)null)
{
menuCanvas.SetActive(isOpen);
}
}
public void SetAirstrikeType(GameObject prefab, AudioClip[] clips)
{
currentAirstrikePrefab = prefab;
currentAirstrikeClips = clips;
currentTypeName = ((!((Object)(object)prefab != (Object)null)) ? "None" : ((Object)prefab).name);
Debug.Log((object)("当前空袭类型切换为: " + currentTypeName));
}
public override void UpdateInteraction(FVRViveHand hand)
{
((FVRPhysicalObject)this).UpdateInteraction(hand);
if (hand.Input.TriggerFloat > 0.8f)
{
DeployAirstrike(hand);
}
}
public void DeployAirstrike(FVRViveHand hand)
{
//IL_0058: 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_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: 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_00c3: 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_00cd: 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_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_010c: 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_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)
RaycastHit val = default(RaycastHit);
if (Time.time - lastDeployTime < cooldownTime)
{
Debug.Log((object)("冷却中,剩余时间: " + (cooldownTime - (Time.time - lastDeployTime)).ToString("F1") + " 秒"));
}
else if (Physics.Raycast(RayOrigin.position, RayOrigin.forward, ref val, MaxDistance, LayerMask.op_Implicit(HitLayers)))
{
Vector3 forward = RayOrigin.forward;
forward.y = 0f;
if (((Vector3)(ref forward)).sqrMagnitude < 0.001f)
{
forward = Vector3.forward;
}
Quaternion val2 = Quaternion.LookRotation(forward, Vector3.up);
Quaternion val3 = val2 * Quaternion.Euler(rotationOffsetEuler);
Object.Instantiate<GameObject>(currentAirstrikePrefab, ((RaycastHit)(ref val)).point, val3);
Debug.Log((object)string.Concat("释放空袭: ", currentTypeName, " 于位置 ", ((RaycastHit)(ref val)).point, ",旋转: ", ((Quaternion)(ref val3)).eulerAngles));
lastDeployTime = Time.time;
if ((Object)(object)audioSource != (Object)null && currentAirstrikeClips != null && currentAirstrikeClips.Length > 0)
{
AudioClip val4 = currentAirstrikeClips[Random.Range(0, currentAirstrikeClips.Length)];
audioSource.PlayOneShot(val4);
}
if ((Object)(object)hand != (Object)null)
{
hand.Buzz(hand.Buzzer.Buzz_OnHoverInteractive);
}
}
}
}
public class AirstrikeDebugger : MonoBehaviour
{
[Header("移动速度")]
public float moveSpeed = 5f;
[Header("鼠标灵敏度")]
public float mouseSensitivity = 2f;
[Header("头部对象(联动 UILookAtPlayer)")]
public Transform headTransform;
private float rotationX = 0f;
private float rotationY = 0f;
private void Start()
{
Cursor.lockState = (CursorLockMode)1;
Cursor.visible = false;
}
private void Update()
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: 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_0044: 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_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: 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_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: 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_0116: 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_0131: Unknown result type (might be due to invalid IL or missing references)
float axis = Input.GetAxis("Horizontal");
float axis2 = Input.GetAxis("Vertical");
Vector3 val = (((Component)this).transform.right * axis + ((Component)this).transform.forward * axis2) * moveSpeed * Time.deltaTime;
Transform transform = ((Component)this).transform;
transform.position += val;
float num = Input.GetAxis("Mouse X") * mouseSensitivity;
float num2 = Input.GetAxis("Mouse Y") * mouseSensitivity;
rotationY += num;
rotationX -= num2;
rotationX = Mathf.Clamp(rotationX, -80f, 80f);
((Component)this).transform.rotation = Quaternion.Euler(rotationX, rotationY, 0f);
if ((Object)(object)headTransform != (Object)null)
{
headTransform.position = ((Component)this).transform.position + Vector3.up * 1.6f;
headTransform.rotation = ((Component)this).transform.rotation;
}
}
}
public class ChangeTypeWhenAwake : MonoBehaviour
{
public GameObject airstrikePrefab;
public AudioClip[] airstrikeClips;
public AirstrikeBinocular binocular;
private void OnEnable()
{
if ((Object)(object)binocular != (Object)null && (Object)(object)airstrikePrefab != (Object)null)
{
binocular.SetAirstrikeType(airstrikePrefab, airstrikeClips);
}
}
}
}
public class ScopeScript : MonoBehaviour
{
[SerializeField]
[Range(0f, 1f)]
private float zoom;
[SerializeField]
private float minFOV;
[SerializeField]
private float maxFOV;
[SerializeField]
private Camera myCamera;
[SerializeField]
private Transform myCrossHair;
[SerializeField]
private float minCrossHairScale;
[SerializeField]
private float maxCrossHairScale;
[SerializeField]
private Material imageMat;
[SerializeField]
private float minDistortion;
[SerializeField]
private float maxDistortion;
private void Start()
{
}
private void Update()
{
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
myCamera.fieldOfView = Mathf.Lerp(maxFOV, minFOV, zoom);
float num = Mathf.Lerp(minCrossHairScale, maxCrossHairScale, zoom);
myCrossHair.localScale = new Vector3(num, num, 1f);
imageMat.SetFloat("_Constant", Mathf.Lerp(minDistortion, maxDistortion, zoom));
}
}
namespace theWNbotMods
{
public class scopeFocusScript : MonoBehaviour
{
[Header("眼睛位置(VR Head 或 Debug Head)")]
[SerializeField]
private Transform eye;
[Header("瞄具参考点(通常是镜片中心)")]
[SerializeField]
private Transform eyeDistPos;
[Header("聚焦参数")]
[SerializeField]
private float fadedDist = 0.2f;
[SerializeField]
private float maxAngle = 15f;
[Header("材质控制")]
[SerializeField]
private Material focusMat;
[SerializeField]
private float minMult = 0f;
[SerializeField]
private float maxMult = 1f;
private Vector2 posInput;
private float circleCenterMovement;
private void LateUpdate()
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: 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_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_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_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: 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_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)
if (!((Object)(object)eye == (Object)null) && !((Object)(object)eyeDistPos == (Object)null) && !((Object)(object)focusMat == (Object)null))
{
float num = Vector3.Distance(eyeDistPos.position, eye.position);
float num2 = num / fadedDist;
num2 = Mathf.Clamp(num2, minMult, maxMult);
Vector3 val = ((Component)this).transform.position - eye.position;
float num3 = Vector3.Angle(val, ((Component)this).transform.forward);
circleCenterMovement = num3 / maxAngle;
Vector3 val2 = ((Component)this).transform.InverseTransformDirection(val);
Vector2 val3 = default(Vector2);
((Vector2)(ref val3))..ctor(val2.x, val2.y);
posInput = ((Vector2)(ref val3)).normalized * circleCenterMovement / 2f;
focusMat.SetFloat("_Mult", num2);
focusMat.SetFloat("_XPos", 0.5f + posInput.x);
focusMat.SetFloat("_YPos", 0.5f + posInput.y);
}
}
}
public class CigaretteAttach : MonoBehaviour
{
[Header("Attach Settings")]
public float attachDistance = 0.2f;
public Vector3 positionOffset = new Vector3(0f, -0.05f, 0.05f);
public Vector3 rotationOffsetEuler = new Vector3(0f, 0f, 0f);
[Header("Smoke Settings")]
public GameObject PuffedSmokePrefab;
public float puffDelay = 3f;
public float puffCooldown = 2f;
public Vector3 smokeOffset = new Vector3(0f, -0.1f, 0.1f);
[Header("References")]
public FVRCigarette cigarette;
[Header("Attach Prefab Control")]
public GameObject[] enableOnAttach;
public GameObject[] disableOnAttach;
[Header("Detach Prefab Control")]
public GameObject[] enableOnDetach;
public GameObject[] disableOnDetach;
private bool isAttachedToHead = false;
private Transform headTransform;
private FVRPhysicalObject fvrObject;
private Rigidbody rb;
private float puffTimer = 0f;
private bool inCooldown = false;
private void Awake()
{
if ((Object)(object)GM.CurrentPlayerBody != (Object)null && (Object)(object)GM.CurrentPlayerBody.Head != (Object)null)
{
headTransform = GM.CurrentPlayerBody.Head;
}
fvrObject = ((Component)this).GetComponent<FVRPhysicalObject>();
rb = ((Component)this).GetComponent<Rigidbody>();
}
private void Update()
{
//IL_0029: 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)
if ((Object)(object)headTransform == (Object)null)
{
return;
}
if (!isAttachedToHead)
{
float num = Vector3.Distance(((Component)this).transform.position, headTransform.position);
if (num <= attachDistance)
{
AttachToHead();
}
}
if (isAttachedToHead)
{
if ((Object)(object)fvrObject != (Object)null && ((FVRInteractiveObject)fvrObject).m_isHeld)
{
DetachFromHead();
}
else
{
HandleSmokeLogic();
}
}
}
private void AttachToHead()
{
//IL_0020: 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_0036: Unknown result type (might be due to invalid IL or missing references)
isAttachedToHead = true;
((Component)this).transform.SetParent(headTransform);
((Component)this).transform.localPosition = positionOffset;
((Component)this).transform.localRotation = Quaternion.Euler(rotationOffsetEuler);
if ((Object)(object)rb != (Object)null)
{
rb.isKinematic = true;
rb.useGravity = false;
}
puffTimer = 0f;
inCooldown = false;
GameObject[] array = enableOnAttach;
foreach (GameObject val in array)
{
if ((Object)(object)val != (Object)null)
{
val.SetActive(true);
}
}
GameObject[] array2 = disableOnAttach;
foreach (GameObject val2 in array2)
{
if ((Object)(object)val2 != (Object)null)
{
val2.SetActive(false);
}
}
}
private void DetachFromHead()
{
isAttachedToHead = false;
((Component)this).transform.SetParent((Transform)null);
if ((Object)(object)rb != (Object)null)
{
rb.isKinematic = false;
rb.useGravity = true;
}
puffTimer = 0f;
inCooldown = false;
GameObject[] array = enableOnDetach;
foreach (GameObject val in array)
{
if ((Object)(object)val != (Object)null)
{
val.SetActive(true);
}
}
GameObject[] array2 = disableOnDetach;
foreach (GameObject val2 in array2)
{
if ((Object)(object)val2 != (Object)null)
{
val2.SetActive(false);
}
}
}
private void HandleSmokeLogic()
{
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: 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_0089: 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_0097: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)cigarette == (Object)null || !cigarette.IsBurning())
{
return;
}
puffTimer += Time.deltaTime;
if (!inCooldown && puffTimer >= puffDelay)
{
if ((Object)(object)PuffedSmokePrefab != (Object)null)
{
Vector3 val = headTransform.position + headTransform.TransformVector(smokeOffset);
Object.Instantiate<GameObject>(PuffedSmokePrefab, val, headTransform.rotation);
}
inCooldown = true;
puffTimer = 0f;
}
else if (inCooldown && puffTimer >= puffCooldown)
{
inCooldown = false;
puffTimer = 0f;
}
}
}
public class CigaretteBox : FVRPhysicalObject
{
private bool triggerPressedLastFrame = false;
private bool isOpen = false;
private bool isTouching = false;
private Vector2 initTouch = Vector2.zero;
private Vector2 LastTouchPoint = Vector2.zero;
public Transform CaseLid;
public float openRotationX = 90f;
public float openRotationY = 0f;
public float openRotationZ = 0f;
public float closeRotationX = 0f;
public float closeRotationY = 0f;
public float closeRotationZ = 0f;
public float rotationSpeed = 5f;
public AudioSource audioSource;
public AudioClip openSound;
public AudioClip closeSound;
public GameObject objectToToggle;
public List<Transform> Dings;
public int m_numDings;
public CigaretteBoxTrigger cigaretteBoxTrigger;
private Quaternion targetRotation;
public override void Start()
{
//IL_0019: 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)
CaseLid.localRotation = Quaternion.Euler(closeRotationX, closeRotationY, closeRotationZ);
targetRotation = CaseLid.localRotation;
}
private void Update()
{
//IL_000d: 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_0024: Unknown result type (might be due to invalid IL or missing references)
CaseLid.localRotation = Quaternion.Lerp(CaseLid.localRotation, targetRotation, Time.deltaTime * rotationSpeed);
}
public override void UpdateInteraction(FVRViveHand hand)
{
//IL_016b: Unknown result type (might be due to invalid IL or missing references)
//IL_0170: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: 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_011f: 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_012b: 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_00ef: 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_015d: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
((FVRPhysicalObject)this).UpdateInteraction(hand);
if (hand.Input.TriggerFloat > 0.8f && !triggerPressedLastFrame && (Object)(object)hand.CurrentInteractable == (Object)(object)this)
{
ToggleLid();
triggerPressedLastFrame = true;
}
else if (hand.Input.TriggerFloat < 0.2f)
{
triggerPressedLastFrame = false;
}
if (hand.IsInStreamlinedMode)
{
if (hand.Input.BYButtonDown || hand.Input.AXButtonDown)
{
ToggleLid();
}
return;
}
if (hand.Input.TouchpadTouched && !isTouching && hand.Input.TouchpadAxes != Vector2.zero)
{
isTouching = true;
initTouch = hand.Input.TouchpadAxes;
}
if (hand.Input.TouchpadTouchUp && isTouching)
{
isTouching = false;
Vector2 lastTouchPoint = LastTouchPoint;
float y = (lastTouchPoint - initTouch).y;
if (y > 0.5f || y < -0.5f)
{
ToggleLid();
}
initTouch = Vector2.zero;
lastTouchPoint = Vector2.zero;
}
LastTouchPoint = hand.Input.TouchpadAxes;
}
private void ToggleLid()
{
//IL_004a: 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_004f: Unknown result type (might be due to invalid IL or missing references)
isOpen = !isOpen;
targetRotation = (isOpen ? Quaternion.Euler(openRotationX, openRotationY, openRotationZ) : Quaternion.Euler(closeRotationX, closeRotationY, closeRotationZ));
if (isOpen)
{
if ((Object)(object)audioSource != (Object)null && (Object)(object)openSound != (Object)null)
{
audioSource.PlayOneShot(openSound);
}
if ((Object)(object)objectToToggle != (Object)null)
{
objectToToggle.SetActive(true);
}
Open();
}
else
{
if ((Object)(object)audioSource != (Object)null && (Object)(object)closeSound != (Object)null)
{
audioSource.PlayOneShot(closeSound);
}
if ((Object)(object)objectToToggle != (Object)null)
{
objectToToggle.SetActive(false);
}
Close();
}
}
public bool IsOpen()
{
return isOpen;
}
public bool HasADing()
{
return m_numDings > 0;
}
public override void FVRUpdate()
{
((FVRPhysicalObject)this).FVRUpdate();
}
public void Open()
{
isOpen = true;
if ((Object)(object)audioSource != (Object)null && (Object)(object)openSound != (Object)null)
{
audioSource.PlayOneShot(openSound);
}
UpdateDingDisplay();
}
public void Close()
{
isOpen = false;
if ((Object)(object)audioSource != (Object)null && (Object)(object)closeSound != (Object)null)
{
audioSource.PlayOneShot(closeSound);
}
UpdateDingDisplay();
}
public void RemoveDing()
{
if (m_numDings > 0)
{
m_numDings--;
UpdateDingDisplay();
}
}
private void UpdateDingDisplay()
{
for (int i = 0; i < Dings.Count; i++)
{
if (i < m_numDings)
{
((Component)Dings[i]).gameObject.SetActive(true);
}
else
{
((Component)Dings[i]).gameObject.SetActive(false);
}
}
}
}
}
public class CigaretteBoxTrigger : FVRInteractiveObject
{
public CigaretteBox cigaretteBox;
public GameObject cigarPrefab;
public override bool IsInteractable()
{
return cigaretteBox.HasADing() && ((FVRInteractiveObject)this).IsInteractable();
}
public override void BeginInteraction(FVRViveHand hand)
{
((FVRInteractiveObject)this).SimpleInteraction(hand);
}
public override void SimpleInteraction(FVRViveHand hand)
{
//IL_0030: 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)
((FVRInteractiveObject)this).SimpleInteraction(hand);
if (cigaretteBox.IsOpen())
{
cigaretteBox.RemoveDing();
GameObject val = Object.Instantiate<GameObject>(cigarPrefab, ((HandInput)(ref hand.Input)).Pos, ((HandInput)(ref hand.Input)).Rot);
FVRPhysicalObject component = val.GetComponent<FVRPhysicalObject>();
hand.ForceSetInteractable((FVRInteractiveObject)(object)component);
((FVRInteractiveObject)component).BeginInteraction(hand);
}
else
{
cigaretteBox.Open();
}
}
}
namespace theWNbotMods
{
[Serializable]
public class MotionPart
{
public GameObject motionPrefab;
public GameObject startPrefab;
public GameObject endPrefab;
}
public class FVRCigarette : QBArmorHelmet
{
[Header("Visual Prefabs")]
public GameObject Unlit;
public GameObject Lit;
[Header("Motion Parts")]
public MotionPart[] motionParts;
[Header("Animation Settings")]
public float burnAnimDuration = 10f;
private float burnAnimTimer = 0f;
private bool animPlaying = false;
[Header("Burn Settings")]
public float BurnDuration = 120f;
public float DestructionDelay = 10f;
private bool m_isBurning = false;
private bool m_hasBeenLit = false;
private float m_burnTimer;
private bool m_hasBurntOut = false;
[Header("Fire Prefabs Control")]
public GameObject[] fireOnPrefabs;
public GameObject[] fireOffPrefabs;
[Header("Torch Prefab Control")]
public GameObject torchPrefab;
[Header("Extinguish Collider")]
public Collider ExtinguishCollider;
public override void Awake()
{
((QBArmorHelmet)this).Awake();
if ((Object)(object)Unlit != (Object)null)
{
Unlit.SetActive(true);
}
if ((Object)(object)Lit != (Object)null)
{
Lit.SetActive(false);
}
if (motionParts == null)
{
return;
}
MotionPart[] array = motionParts;
foreach (MotionPart motionPart in array)
{
if ((Object)(object)motionPart.motionPrefab != (Object)null)
{
motionPart.motionPrefab.SetActive(false);
}
}
}
public override void FVRUpdate()
{
//IL_00b4: 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_00ca: 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_00fa: 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_0120: 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_0136: Unknown result type (might be due to invalid IL or missing references)
((QBArmorPiece)this).FVRUpdate();
if (!m_isBurning)
{
return;
}
m_burnTimer -= Time.deltaTime;
if (animPlaying)
{
burnAnimTimer += Time.deltaTime;
float num = Mathf.Clamp01(burnAnimTimer / burnAnimDuration);
MotionPart[] array = motionParts;
foreach (MotionPart motionPart in array)
{
if ((Object)(object)motionPart.motionPrefab != (Object)null && (Object)(object)motionPart.startPrefab != (Object)null && (Object)(object)motionPart.endPrefab != (Object)null)
{
motionPart.motionPrefab.transform.position = Vector3.Lerp(motionPart.startPrefab.transform.position, motionPart.endPrefab.transform.position, num);
motionPart.motionPrefab.transform.rotation = Quaternion.Lerp(motionPart.startPrefab.transform.rotation, motionPart.endPrefab.transform.rotation, num);
motionPart.motionPrefab.transform.localScale = Vector3.Lerp(motionPart.startPrefab.transform.localScale, motionPart.endPrefab.transform.localScale, num);
}
}
if (num >= 1f)
{
animPlaying = false;
}
}
if (m_burnTimer <= 0f)
{
StopBurning();
}
}
public void Ignite()
{
if (m_isBurning || m_hasBurntOut)
{
return;
}
m_hasBeenLit = true;
m_isBurning = true;
if (m_burnTimer <= 0f)
{
m_burnTimer = BurnDuration;
}
if ((Object)(object)Unlit != (Object)null)
{
Unlit.SetActive(false);
}
if ((Object)(object)Lit != (Object)null)
{
Lit.SetActive(true);
}
animPlaying = true;
if (motionParts != null)
{
MotionPart[] array = motionParts;
foreach (MotionPart motionPart in array)
{
if ((Object)(object)motionPart.motionPrefab != (Object)null && (Object)(object)motionPart.startPrefab != (Object)null)
{
motionPart.motionPrefab.SetActive(true);
}
}
}
GameObject[] array2 = fireOnPrefabs;
foreach (GameObject val in array2)
{
if ((Object)(object)val != (Object)null)
{
val.SetActive(true);
}
}
if ((Object)(object)torchPrefab != (Object)null)
{
torchPrefab.SetActive(false);
}
}
private void Extinguish()
{
if (!m_isBurning)
{
return;
}
m_isBurning = false;
animPlaying = false;
if ((Object)(object)Lit != (Object)null)
{
Lit.SetActive(true);
}
if ((Object)(object)Unlit != (Object)null)
{
Unlit.SetActive(false);
}
GameObject[] array = fireOffPrefabs;
foreach (GameObject val in array)
{
if ((Object)(object)val != (Object)null)
{
val.SetActive(false);
}
}
if ((Object)(object)torchPrefab != (Object)null)
{
torchPrefab.SetActive(true);
}
}
private void StopBurning()
{
m_isBurning = false;
m_hasBurntOut = true;
animPlaying = false;
if (motionParts == null)
{
return;
}
MotionPart[] array = motionParts;
foreach (MotionPart motionPart in array)
{
if ((Object)(object)motionPart.motionPrefab != (Object)null)
{
motionPart.motionPrefab.SetActive(false);
}
}
}
private void OnCollisionEnter(Collision collision)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)ExtinguishCollider == (Object)null)
{
return;
}
ContactPoint[] contacts = collision.contacts;
for (int i = 0; i < contacts.Length; i++)
{
ContactPoint val = contacts[i];
if ((Object)(object)((ContactPoint)(ref val)).thisCollider == (Object)(object)ExtinguishCollider)
{
Extinguish();
break;
}
}
}
public bool IsBurning()
{
return m_isBurning && !m_hasBurntOut;
}
}
public class TorchCigaretteTrigger : MonoBehaviour
{
[Header("Cigarette Reference")]
public FVRCigarette Cigarette;
[Header("Torch Prefab")]
public GameObject torchPrefab;
private void OnTriggerEnter(Collider col)
{
if ((Object)(object)Cigarette != (Object)null)
{
Cigarette.Ignite();
if ((Object)(object)torchPrefab != (Object)null)
{
torchPrefab.SetActive(false);
}
}
}
}
public class DelayedActive : MonoBehaviour
{
[Header("延迟多少秒后激活 Prefab")]
public float delay = 1f;
[Header("要激活的 Prefab 列表")]
public GameObject[] prefabsToActivate;
private void OnEnable()
{
((MonoBehaviour)this).StartCoroutine(ActivateAfterDelay());
}
private IEnumerator ActivateAfterDelay()
{
if (delay > 0f)
{
yield return (object)new WaitForSeconds(delay);
}
for (int i = 0; i < prefabsToActivate.Length; i++)
{
if ((Object)(object)prefabsToActivate[i] != (Object)null)
{
prefabsToActivate[i].SetActive(true);
}
}
}
}
public class AR15FlipSightUniversalTrigger : MonoBehaviour
{
public enum AnimationType
{
OneWay,
Lever,
Button
}
[Serializable]
public class AnimatedTarget
{
[Header("目标设置")]
public Transform target;
public GameObject startPrefab;
public GameObject endPrefab;
[Header("动画类型")]
public AnimationType animationType = AnimationType.OneWay;
[Header("动画参数")]
public float delayBeforeStart = 0f;
public float durationToEnd = 1f;
public float delayBeforeReturn = 0f;
public float durationToStart = 1f;
[HideInInspector]
public bool hasPlayed = false;
[HideInInspector]
public bool isAtEnd = false;
[HideInInspector]
public Vector3 startPos;
[HideInInspector]
public Vector3 endPos;
[HideInInspector]
public Vector3 startRot;
[HideInInspector]
public Vector3 endRot;
[HideInInspector]
public Vector3 startScale;
[HideInInspector]
public Vector3 endScale;
}
[Header("触发事件:生成 Prefab")]
public GameObject prefabToSpawn;
public Transform spawnPoint;
[Header("动画目标列表")]
public List<AnimatedTarget> animatedTargets = new List<AnimatedTarget>();
private AR15HandleSightFlipper flipper;
private bool lastState;
private void Start()
{
//IL_00bc: 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_00d2: 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_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_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_0114: 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_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
flipper = ((Component)this).GetComponent<AR15HandleSightFlipper>();
if ((Object)(object)flipper == (Object)null)
{
Debug.LogError((object)"[UniversalTrigger] 找不到 AR15HandleSightFlipper!");
((Behaviour)this).enabled = false;
return;
}
if ((Object)(object)spawnPoint == (Object)null)
{
spawnPoint = ((Component)this).transform;
}
foreach (AnimatedTarget animatedTarget in animatedTargets)
{
if ((Object)(object)animatedTarget.target == (Object)null || (Object)(object)animatedTarget.startPrefab == (Object)null || (Object)(object)animatedTarget.endPrefab == (Object)null)
{
Debug.LogWarning((object)"[UniversalTrigger] 有动画目标未设置完整!");
continue;
}
animatedTarget.startPos = animatedTarget.startPrefab.transform.localPosition;
animatedTarget.startRot = animatedTarget.startPrefab.transform.localEulerAngles;
animatedTarget.startScale = animatedTarget.startPrefab.transform.localScale;
animatedTarget.endPos = animatedTarget.endPrefab.transform.localPosition;
animatedTarget.endRot = animatedTarget.endPrefab.transform.localEulerAngles;
animatedTarget.endScale = animatedTarget.endPrefab.transform.localScale;
}
lastState = flipper.m_isLargeAperture;
}
private void Update()
{
if (flipper.m_isLargeAperture != lastState)
{
TriggerEvent();
lastState = flipper.m_isLargeAperture;
}
}
public void TriggerEvent()
{
//IL_001e: 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)
if ((Object)(object)prefabToSpawn != (Object)null)
{
Object.Instantiate<GameObject>(prefabToSpawn, spawnPoint.position, spawnPoint.rotation);
}
foreach (AnimatedTarget animatedTarget in animatedTargets)
{
if ((Object)(object)animatedTarget.target == (Object)null)
{
continue;
}
switch (animatedTarget.animationType)
{
case AnimationType.OneWay:
if (!animatedTarget.hasPlayed)
{
((MonoBehaviour)this).StartCoroutine(Animate(animatedTarget, toEnd: true));
animatedTarget.hasPlayed = true;
}
break;
case AnimationType.Lever:
((MonoBehaviour)this).StartCoroutine(Animate(animatedTarget, !animatedTarget.isAtEnd));
animatedTarget.isAtEnd = !animatedTarget.isAtEnd;
break;
case AnimationType.Button:
((MonoBehaviour)this).StartCoroutine(Animate(animatedTarget, toEnd: true));
((MonoBehaviour)this).StartCoroutine(Animate(animatedTarget, toEnd: false, animatedTarget.delayBeforeStart + animatedTarget.durationToEnd + animatedTarget.delayBeforeReturn));
break;
}
}
}
private IEnumerator Animate(AnimatedTarget target, bool toEnd, float extraDelay = 0f)
{
float delay = ((!toEnd) ? target.delayBeforeReturn : target.delayBeforeStart);
float duration = ((!toEnd) ? target.durationToStart : target.durationToEnd);
if (extraDelay > 0f)
{
yield return (object)new WaitForSeconds(extraDelay);
}
if (delay > 0f)
{
yield return (object)new WaitForSeconds(delay);
}
float t = 0f;
while (t < duration)
{
float lerp = t / duration;
Vector3 pos = Vector3.Lerp((!toEnd) ? target.endPos : target.startPos, (!toEnd) ? target.startPos : target.endPos, lerp);
Vector3 rot = Vector3.Lerp((!toEnd) ? target.endRot : target.startRot, (!toEnd) ? target.startRot : target.endRot, lerp);
Vector3 scale = Vector3.Lerp((!toEnd) ? target.endScale : target.startScale, (!toEnd) ? target.startScale : target.endScale, lerp);
target.target.localPosition = pos;
target.target.localEulerAngles = rot;
target.target.localScale = scale;
t += Time.deltaTime;
yield return null;
}
target.target.localPosition = ((!toEnd) ? target.startPos : target.endPos);
target.target.localEulerAngles = ((!toEnd) ? target.startRot : target.endRot);
target.target.localScale = ((!toEnd) ? target.startScale : target.endScale);
}
}
}
public class Nuclear_bomb : MonoBehaviour
{
[Range(1f, 256f)]
public float NukeDuration = 40f;
private float CurrentDuration;
public AnimationCurve SizeCurve;
[Range(1f, 1024f)]
public float SizeCurve_multiply;
public float LightRadius = 2048f;
public AnimationCurve LightRadius_curve;
public float LightPower = 64f;
public AnimationCurve LightPower_curve;
private float FinalCurveVaue;
private Vector3 finalShockWaveSize;
public float sizeSpeed = 1f;
private float finalShockSizeF;
public Transform ShockWaveTransform;
public Light BlastLight;
public ParticleSystem blowPart;
public MeshRenderer Mushrom;
public float Emmis_mush;
public float Emmis_steam;
public AnimationCurve Mat_SizeCurve;
public float _mat_SizeCurve_multiply;
private void Start()
{
//IL_0011: 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)
finalShockWaveSize = new Vector3(0f, 0f, 0f);
CurrentDuration = 0f;
finalShockSizeF = 0f;
}
private void Update()
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
finalShockSizeF += Time.deltaTime * sizeSpeed;
finalShockWaveSize = new Vector3(finalShockSizeF, finalShockSizeF, finalShockSizeF);
ShockWaveTransform.localScale = finalShockWaveSize;
CurrentDuration += Time.deltaTime;
FinalCurveVaue = Mathf.Clamp01(CurrentDuration / NukeDuration);
BlastLight.intensity = LightPower * LightPower_curve.Evaluate(FinalCurveVaue);
BlastLight.range = Mathf.Lerp(LightRadius, 0f, LightRadius_curve.Evaluate(FinalCurveVaue));
if (CurrentDuration > 40f)
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
}
}
public class NukeBomb : MonoBehaviour
{
public GameObject Prefab;
private void Start()
{
}
private void Update()
{
//IL_001d: 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)
if (Input.GetButtonDown("Fire1"))
{
Object.Instantiate<GameObject>(Prefab, ((Component)this).transform.position, ((Component)this).transform.rotation);
}
}
}
public class ShockWave : MonoBehaviour
{
public AudioSource shockwaveSound;
private void Start()
{
}
private void Update()
{
}
private void OnTriggerEnter(Collider other)
{
if (((Component)other).gameObject.tag == "Player")
{
shockwaveSound.Play();
}
}
}
namespace theWNbotMods
{
public class AirStrikeController : MonoBehaviour
{
[Serializable]
public class BombConfig
{
public Transform dropPoint;
public GameObject prefab;
public float delay = 2f;
public float forwardForce = 50f;
[Header("额外参数")]
public Vector3 spawnRotationOffset;
public float downwardForce = 20f;
}
[Header("飞行参数")]
public float flightSpeed = 80f;
public Transform pos1;
public Transform pos2;
[Header("贝塞尔控制点")]
public bool useAutoControlPoint = true;
public float bendHeight = 50f;
public float bendSide = 0f;
public Transform controlPoint;
[Header("多少个boomboom炸弹")]
public BombConfig[] bombs;
[Header("Flare 参数(机身自带隐藏的 Flare 对象)")]
public GameObject flareObject;
public float flareDelay = 5f;
[Header("生命周期")]
public float cleanupDelayAfterFlare = 5f;
private float elapsedTime = 0f;
private float totalTime = 0f;
private Vector3 p0;
private Vector3 p1;
private Vector3 p2;
private bool flareReleased = false;
private void Awake()
{
if ((Object)(object)pos1 == (Object)null || (Object)(object)pos2 == (Object)null)
{
Debug.LogError((object)"[AirStrikeController] 请在 Inspector 设置 pos1 和 pos2。脚本已禁用。");
((Behaviour)this).enabled = false;
}
else if ((Object)(object)flareObject != (Object)null)
{
flareObject.SetActive(false);
}
}
private void Start()
{
//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_0019: 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_0030: 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_003b: 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_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: 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_0067: 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_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: 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)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: 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_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: 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)
p0 = pos1.position;
p2 = pos2.position;
if (useAutoControlPoint)
{
Vector3 val = (p0 + p2) * 0.5f;
Vector3 val2 = Vector3.right * bendSide;
Vector3 val3 = Vector3.up * bendHeight;
p1 = val + val3 + val2;
}
else
{
if ((Object)(object)controlPoint == (Object)null)
{
Debug.LogError((object)"[AirStrikeController] useAutoControlPoint = false 时必须指定 controlPoint。脚本已禁用。");
((Behaviour)this).enabled = false;
return;
}
p1 = controlPoint.position;
}
((Component)this).transform.position = p0;
float num = Vector3.Distance(p0, p2);
totalTime = Mathf.Max(0.01f, num / Mathf.Max(0.01f, flightSpeed));
BombConfig[] array = bombs;
foreach (BombConfig bombConfig in array)
{
if (bombConfig != null && (Object)(object)bombConfig.prefab != (Object)null && (Object)(object)bombConfig.dropPoint != (Object)null)
{
((MonoBehaviour)this).StartCoroutine(DropBombWithDelay(bombConfig));
}
}
}
private void Update()
{
//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_0050: 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_005a: 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_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: 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_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: 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_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
elapsedTime += Time.deltaTime;
float num = Mathf.Clamp01(elapsedTime / totalTime);
Vector3 position = (1f - num) * (1f - num) * p0 + 2f * (1f - num) * num * p1 + num * num * p2;
((Component)this).transform.position = position;
Vector3 val = 2f * (1f - num) * (p1 - p0) + 2f * num * (p2 - p1);
if (((Vector3)(ref val)).sqrMagnitude > 1E-06f)
{
((Component)this).transform.forward = ((Vector3)(ref val)).normalized;
}
if (!flareReleased && elapsedTime >= flareDelay)
{
flareReleased = true;
DeployFlare();
if (cleanupDelayAfterFlare > 0f)
{
Object.Destroy((Object)(object)((Component)this).gameObject, cleanupDelayAfterFlare);
}
}
}
private IEnumerator DropBombWithDelay(BombConfig bomb)
{
yield return (object)new WaitForSeconds(bomb.delay);
Quaternion spawnRot = bomb.dropPoint.rotation * Quaternion.Euler(bomb.spawnRotationOffset);
GameObject newBomb = Object.Instantiate<GameObject>(bomb.prefab, bomb.dropPoint.position, spawnRot);
Rigidbody rb = newBomb.GetComponent<Rigidbody>();
if ((Object)(object)rb != (Object)null)
{
rb.velocity = ((Component)this).transform.forward * bomb.forwardForce;
rb.AddForce(Vector3.down * bomb.downwardForce, (ForceMode)2);
}
}
private void DeployFlare()
{
if ((Object)(object)flareObject == (Object)null)
{
Debug.LogWarning((object)"[AirStrikeController] 未设置 flareObject,跳过 Flare 释放。");
return;
}
flareObject.SetActive(true);
flareObject.SendMessage("StartDeploy", (SendMessageOptions)1);
}
private void OnValidate()
{
flightSpeed = Mathf.Max(0.01f, flightSpeed);
flareDelay = Mathf.Max(0f, flareDelay);
cleanupDelayAfterFlare = Mathf.Max(0f, cleanupDelayAfterFlare);
}
}
public class AirburstClusterScripts : MonoBehaviour
{
public enum StrikeMode
{
Airburst,
Cluster
}
[Header("General Settings")]
public StrikeMode mode = StrikeMode.Airburst;
public GameObject fragmentPrefab;
public GameObject subBombPrefab;
public int count = 10;
public float delay = 2f;
public float initialSpeed = 20f;
[Header("Cone Settings (for Airburst)")]
public Transform pos1;
public Transform pos2;
public float coneRadius = 10f;
private bool triggered = false;
private void Start()
{
((MonoBehaviour)this).StartCoroutine(SpawnRoutine());
}
private IEnumerator SpawnRoutine()
{
yield return (object)new WaitForSeconds(delay);
TriggerSpawn();
}
public void TriggerSpawn()
{
if (!triggered)
{
triggered = true;
if (mode == StrikeMode.Airburst)
{
SpawnAirburst();
}
else if (mode == StrikeMode.Cluster)
{
SpawnCluster();
}
}
}
private void SpawnAirburst()
{
//IL_0039: 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_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_0068: 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_00cd: 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_00de: 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_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_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_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)pos1 == (Object)null || (Object)(object)pos2 == (Object)null)
{
Debug.LogError((object)"Airburst mode requires pos1 and pos2 to define cone.");
return;
}
Vector3 val = pos2.position - pos1.position;
Vector3 normalized = ((Vector3)(ref val)).normalized;
float num = Vector3.Distance(pos1.position, pos2.position);
float num2 = Mathf.Atan2(coneRadius, num);
OrthonormalBasis(normalized, out var u, out var v);
for (int i = 0; i < count; i++)
{
float num3 = Mathf.Lerp(1f, Mathf.Cos(num2), Random.value);
float num4 = Mathf.Sqrt(1f - num3 * num3);
float num5 = Random.Range(0f, (float)Math.PI * 2f);
Vector3 val2 = normalized * num3 + (u * Mathf.Cos(num5) + v * Mathf.Sin(num5)) * num4;
((Vector3)(ref val2)).Normalize();
GameObject val3 = Object.Instantiate<GameObject>(fragmentPrefab, pos1.position, Quaternion.identity);
Rigidbody component = val3.GetComponent<Rigidbody>();
if ((Object)(object)component != (Object)null)
{
component.velocity = val2 * initialSpeed;
}
}
}
private void SpawnCluster()
{
//IL_0015: 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_003a: 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)
for (int i = 0; i < count; i++)
{
GameObject val = Object.Instantiate<GameObject>(subBombPrefab, ((Component)this).transform.position, Quaternion.identity);
Rigidbody component = val.GetComponent<Rigidbody>();
if ((Object)(object)component != (Object)null)
{
component.velocity = Random.insideUnitSphere * initialSpeed;
}
}
}
private static void OrthonormalBasis(Vector3 axis, out Vector3 u, out Vector3 v)
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: 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_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_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_003a: 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_0041: 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_004b: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = ((!(Mathf.Abs(axis.y) < 0.99f)) ? Vector3.right : Vector3.up);
u = Vector3.Normalize(Vector3.Cross(val, axis));
v = Vector3.Normalize(Vector3.Cross(axis, u));
}
private void OnDrawGizmosSelected()
{
//IL_0028: 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_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: 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_006b: 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)
//IL_0071: 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_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: 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_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_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: 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_00f7: 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_0106: 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_0112: 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)
if (!((Object)(object)pos1 == (Object)null) && !((Object)(object)pos2 == (Object)null))
{
Gizmos.color = Color.yellow;
Gizmos.DrawLine(pos1.position, pos2.position);
Vector3 val = pos2.position - pos1.position;
Vector3 normalized = ((Vector3)(ref val)).normalized;
OrthonormalBasis(normalized, out var u, out var v);
int num = 36;
Vector3 val2 = pos2.position + u * coneRadius;
for (int i = 1; i <= num; i++)
{
float num2 = (float)i / (float)num * (float)Math.PI * 2f;
Vector3 val3 = pos2.position + (u * Mathf.Cos(num2) + v * Mathf.Sin(num2)) * coneRadius;
Gizmos.DrawLine(val2, val3);
Gizmos.DrawLine(pos1.position, val3);
val2 = val3;
}
}
}
}
}
public class Clustershit : MonoBehaviour
{
public FVRDestroyableObject DO;
public string bname;
private void OnCollisionEnter(Collision collision)
{
if (((Object)((Component)collision.collider).gameObject).name != bname)
{
DO.m_isDestroyed = true;
}
}
}
namespace theWNbotMods
{
public class DSSEagleStorm : MonoBehaviour
{
[Header("生成设置")]
public GameObject[] eaglePrefabs;
public Transform floorPos;
public float spawnRadius = 50f;
public float spawnInterval = 1f;
public float stormDuration = 10f;
[Header("角度设置")]
public bool randomRotation = true;
public Vector3 fixedRotationEuler;
private void Start()
{
((MonoBehaviour)this).StartCoroutine(StormRoutine());
}
private IEnumerator StormRoutine()
{
float startTime = Time.time;
while (Time.time - startTime < stormDuration)
{
SpawnEagle();
yield return (object)new WaitForSeconds(spawnInterval);
}
}
private void SpawnEagle()
{
//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_009f: 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_00da: 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_00c6: 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_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
if (eaglePrefabs != null && eaglePrefabs.Length != 0 && !((Object)(object)floorPos == (Object)null))
{
GameObject val = eaglePrefabs[Random.Range(0, eaglePrefabs.Length)];
float num = Random.Range(0f, 360f);
float num2 = Random.Range(0f, spawnRadius);
Vector3 val2 = default(Vector3);
((Vector3)(ref val2))..ctor(Mathf.Cos(num * ((float)Math.PI / 180f)) * num2, 0f, Mathf.Sin(num * ((float)Math.PI / 180f)) * num2);
Vector3 val3 = floorPos.position + val2;
Quaternion val4 = ((!randomRotation) ? Quaternion.Euler(fixedRotationEuler) : Quaternion.Euler(0f, Random.Range(0f, 360f), 0f));
Object.Instantiate<GameObject>(val, val3, val4);
}
}
}
}
namespace calafex.Factory
{
public class DamageArea : MonoBehaviour
{
private Dictionary<Collider, IFVRDamageable> _trackedDamageables = new Dictionary<Collider, IFVRDamageable>();
public int Damage = 25;
public DamageAreaType DamageAreaType;
public bool IsContinuous = false;
public float DamageFrequency = 0.5f;
private float _timeUntilNextHit = 0f;
public bool PlaySoundOnHit = false;
public AudioSource AudioSource;
public AudioClip[] AudioClips;
private float _timeAfterLastSoundPlay = 0f;
private void Start()
{
_timeUntilNextHit = DamageFrequency;
}
private void OnTriggerEnter(Collider col)
{
Component component = ((Component)col).gameObject.GetComponent(typeof(IFVRDamageable));
if (!Object.op_Implicit((Object)(object)component))
{
return;
}
IFVRDamageable val = (IFVRDamageable)(object)((component is IFVRDamageable) ? component : null);
if (!IsAffectable(col, val))
{
return;
}
ApplyDamage(col, val);
if (IsContinuous && !_trackedDamageables.ContainsKey(col))
{
_trackedDamageables.Add(col, val);
}
if (((Component)col).gameObject.layer == 15)
{
if (GM.CurrentPlayerBody.GetPlayerHealthRaw() <= Damage)
{
GM.CurrentPlayerBody.KillPlayer(false);
}
else if (GM.CurrentPlayerBody.GetPlayerHealthRaw() > Damage)
{
FVRPlayerBody currentPlayerBody = GM.CurrentPlayerBody;
currentPlayerBody.Health -= (float)Damage;
GM.CurrentPlayerBody.HitEffect();
}
}
}
private void OnTriggerExit(Collider col)
{
if (IsContinuous && _trackedDamageables.ContainsKey(col))
{
_trackedDamageables.Remove(col);
}
}
private void Update()
{
if (_timeAfterLastSoundPlay < 1f)
{
_timeAfterLastSoundPlay += Time.deltaTime;
}
if (!IsContinuous)
{
return;
}
_timeUntilNextHit -= Time.deltaTime;
if (_timeUntilNextHit > 0f)
{
return;
}
_trackedDamageables = _trackedDamageables.Where((KeyValuePair<Collider, IFVRDamageable> kvp) => (Object)(object)kvp.Key != (Object)null).ToDictionary((KeyValuePair<Collider, IFVRDamageable> kvp) => kvp.Key, (KeyValuePair<Collider, IFVRDamageable> kvp) => kvp.Value);
foreach (KeyValuePair<Collider, IFVRDamageable> trackedDamageable in _trackedDamageables)
{
ApplyDamage(trackedDamageable.Key, trackedDamageable.Value);
}
_timeUntilNextHit = DamageFrequency;
}
private bool IsAffectable(Collider col, IFVRDamageable damageable)
{
bool result = false;
if (DamageAreaType == DamageAreaType.Fire)
{
if ((Object)(object)((Component)col).gameObject.GetComponent<FVRIgnitable>() != (Object)null)
{
result = true;
}
if (damageable is FVRMatchhead)
{
result = true;
}
if (damageable is HairsprayCan || damageable is HairsprayIgnitionTrigger)
{
result = true;
}
if (damageable is RotrwCharcoal)
{
result = true;
}
}
if (DamageAreaType == DamageAreaType.Piercing)
{
if (damageable is UberShatterable)
{
result = true;
}
if (damageable is SodaCan)
{
result = true;
}
}
if (damageable is FVRPlayerHitbox)
{
result = true;
}
if (damageable is SosigLink)
{
result = true;
}
if (damageable is MeatCrab)
{
result = true;
}
if (damageable is JerryCan)
{
result = true;
}
if (damageable is LightFluid)
{
result = true;
}
if (damageable is Molotov)
{
result = true;
}
return result;
}
private void ApplyDamage(Collider col, IFVRDamageable damageable)
{
//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_0012: 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 hitPoint = col.ClosestPoint(((Component)this).transform.position);
damageable.Damage(GetDamage(hitPoint));
if (DamageAreaType == DamageAreaType.Fire)
{
FVRIgnitable component = ((Component)col).gameObject.GetComponent<FVRIgnitable>();
if (Object.op_Implicit((Object)(object)component))
{
FXM.Ignite(component, Random.Range(0.5f, 1.5f));
}
}
if (PlaySoundOnHit)
{
PlaySound();
}
}
private void PlaySound()
{
if (_timeAfterLastSoundPlay > 0.2f)
{
AudioSource.PlayOneShot(AudioClips[Random.Range(0, AudioClips.Length)]);
_timeAfterLastSoundPlay = 0f;
}
}
private Damage GetDamage(Vector3 hitPoint)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//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_0014: 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_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
Damage val = new Damage();
val.point = hitPoint;
val.hitNormal = Vector3.up;
val.strikeDir = ((Component)this).transform.up;
Damage val2 = val;
switch (DamageAreaType)
{
case DamageAreaType.Fire:
val2.Class = (DamageClass)0;
val2.Dam_Thermal = Damage;
val2.Dam_TotalEnergetic = Damage;
break;
case DamageAreaType.Piercing:
val2.Class = (DamageClass)3;
val2.Dam_Piercing = Damage;
val2.Dam_TotalKinetic = Damage;
break;
}
return val2;
}
}
public enum DamageAreaType
{
Fire = 1,
Piercing
}
}
namespace theWNbotMods
{
public class DelayedExplosion : MonoBehaviour
{
[Header("爆炸参数")]
public float delay = 0.5f;
public GameObject[] explosionPrefabs;
public Transform spawnPoint;
[Header("插入地表参数")]
public float embedDepth = 0.5f;
private void Start()
{
((MonoBehaviour)this).StartCoroutine(ExplodeAfterDelay());
}
private IEnumerator ExplodeAfterDelay()
{
yield return (object)new WaitForSeconds(delay);
Transform transform = ((Component)this).transform;
transform.position += Vector3.down * embedDepth;
GameObject[] array = explosionPrefabs;
foreach (GameObject val in array)
{
if ((Object)(object)val != (Object)null)
{
Vector3 val2 = ((!((Object)(object)spawnPoint != (Object)null)) ? ((Component)this).transform.position : spawnPoint.position);
Quaternion val3 = ((!((Object)(object)spawnPoint != (Object)null)) ? Quaternion.identity : spawnPoint.rotation);
GameObject val4 = Object.Instantiate<GameObject>(val, val2, val3);
ParticleSystem[] componentsInChildren = val4.GetComponentsInChildren<ParticleSystem>();
foreach (ParticleSystem val5 in componentsInChildren)
{
val5.Play();
}
AudioSource[] componentsInChildren2 = val4.GetComponentsInChildren<AudioSource>();
foreach (AudioSource val6 in componentsInChildren2)
{
val6.Play();
}
}
}
Object.Destroy((Object)(object)((Component)this).gameObject);
}
}
public class DestroyerMover : MonoBehaviour
{
[Header("路径点")]
public Transform entryPos;
public Transform stayPoint;
public Transform exitPos;
public Transform strikePos;
[Header("速度设置")]
public float entrySpeed = 300f;
public float exitSpeed = 400f;
public float rotateSpeed = 90f;
[Header("时间设置")]
public float waitBeforeStrike = 1f;
public float strikeDuration = 2f;
public float waitAfterExit = 3f;
[Header("Prefab 设置")]
public GameObject strikePrefab;
[Header("音效控制")]
public GameObject arriveStayPrefab;
public float arriveSoundDuration = 2f;
public GameObject leaveStayPrefab;
public float leaveSoundLeadTime = 0.5f;
[Header("驱逐舰模型设置")]
public Transform destroyerRoot;
public Vector3 modelForwardOffsetEuler;
public bool yawOnly = true;
private void Start()
{
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)destroyerRoot == (Object)null)
{
Debug.LogError((object)"[DestroyerMover] 请在 Inspector 指定 destroyerRoot(驱逐舰模型子物体)");
((Behaviour)this).enabled = false;
return;
}
if ((Object)(object)entryPos != (Object)null)
{
destroyerRoot.position = entryPos.position;
}
((MonoBehaviour)this).StartCoroutine(DestroyerRoutine());
}
private IEnumerator DestroyerRoutine()
{
if ((Object)(object)arriveStayPrefab != (Object)null)
{
arriveStayPrefab.SetActive(true);
AudioSource audio2 = arriveStayPrefab.GetComponent<AudioSource>();
if ((Object)(object)audio2 != (Object)null)
{
audio2.Play();
}
yield return (object)new WaitForSeconds(arriveSoundDuration);
}
yield return MoveToPoint(stayPoint.position, entrySpeed);
yield return (object)new WaitForSeconds(waitBeforeStrike);
if ((Object)(object)strikePrefab != (Object)null && (Object)(object)strikePos != (Object)null)
{
Object.Instantiate<GameObject>(strikePrefab, strikePos.position, strikePos.rotation);
}
if ((Object)(object)leaveStayPrefab != (Object)null)
{
yield return (object)new WaitForSeconds(Mathf.Max(0f, strikeDuration - leaveSoundLeadTime));
leaveStayPrefab.SetActive(true);
AudioSource audio = leaveStayPrefab.GetComponent<AudioSource>();
if ((Object)(object)audio != (Object)null)
{
audio.Play();
}
yield return (object)new WaitForSeconds(leaveSoundLeadTime);
}
else
{
yield return (object)new WaitForSeconds(strikeDuration);
}
yield return MoveToPoint(exitPos.position, exitSpeed);
yield return (object)new WaitForSeconds(waitAfterExit);
Object.Destroy((Object)(object)((Component)this).gameObject);
}
private IEnumerator MoveToPoint(Vector3 targetPos, float speed)
{
//IL_0007: 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)
Quaternion forwardOffset = Quaternion.Euler(modelForwardOffsetEuler);
while (Vector3.Distance(destroyerRoot.position, targetPos) > 0.1f)
{
destroyerRoot.position = Vector3.MoveTowards(destroyerRoot.position, targetPos, speed * Time.deltaTime);
Vector3 moveDir = targetPos - destroyerRoot.position;
if (yawOnly)
{
moveDir.y = 0f;
}
if (((Vector3)(ref moveDir)).sqrMagnitude > 0.001f)
{
Quaternion val = Quaternion.LookRotation(((Vector3)(ref moveDir)).normalized, Vector3.up) * forwardOffset;
destroyerRoot.rotation = Quaternion.RotateTowards(destroyerRoot.rotation, val, rotateSpeed * Time.deltaTime);
}
yield return null;
}
}
}
public class OneWayMover : MonoBehaviour
{
[Header("移动点")]
public Transform pos1;
public Transform pos2;
public Transform targetObject;
[Header("移动设置")]
public float moveDuration = 2f;
[Header("音效设置")]
public AudioSource audioAtStart;
public AudioSource audioAtEnd;
[Header("新功能")]
public bool EveryActiveMove = false;
private Coroutine moveRoutine;
private void Start()
{
if ((Object)(object)targetObject == (Object)null)
{
targetObject = ((Component)this).transform;
}
if (!EveryActiveMove)
{
moveRoutine = ((MonoBehaviour)this).StartCoroutine(MoveRoutine());
}
}
private void OnEnable()
{
if (EveryActiveMove)
{
if ((Object)(object)targetObject == (Object)null)
{
targetObject = ((Component)this).transform;
}
moveRoutine = ((MonoBehaviour)this).StartCoroutine(MoveRoutine());
}
}
private IEnumerator MoveRoutine()
{
if ((Object)(object)audioAtStart != (Object)null)
{
((Component)audioAtStart).gameObject.SetActive(true);
audioAtStart.Play();
}
yield return MoveBetween(pos1.position, pos2.position, moveDuration);
if ((Object)(object)audioAtEnd != (Object)null)
{
((Component)audioAtEnd).gameObject.SetActive(true);
audioAtEnd.Play();
}
moveRoutine = null;
}
private IEnumerator MoveBetween(Vector3 start, Vector3 end, float duration)
{
//IL_000e: 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_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)
float elapsed = 0f;
while (elapsed < duration)
{
elapsed += Time.deltaTime;
float t = Mathf.Clamp01(elapsed / duration);
targetObject.position = Vector3.Lerp(start, end, t);
yield return null;
}
targetObject.position = end;
}
}
public class OrbitalStrikeController : MonoBehaviour
{
[Header("炮击参数")]
public GameObject shellPrefab;
public GameObject explosionPrefab;
public float fireInterval = 0.2f;
public float duration = 10f;
public float shellSpeed = 100f;
[Header("锥形散布参数")]
[Range(0f, 45f)]
public float coneAngle = 5f;
public Transform firePos;
public Transform landPos;
[Header("三连发模式参数")]
public bool burstMode = false;
public int burstCount = 3;
public float burstInterval = 0.1f;
[Header("启动延迟")]
public float startDelay = 0f;
[Header("状态变量")]
public bool ispublicFiring = false;
private bool isFiring = false;
public bool shouldFire = true;
private void Start()
{
if ((Object)(object)shellPrefab == (Object)null || (Object)(object)firePos == (Object)null || (Object)(object)landPos == (Object)null)
{
Debug.LogError((object)"[OrbitalStrikeController] 请在 Inspector 设置 shellPrefab、firePos 和 landPos。");
((Behaviour)this).enabled = false;
}
else
{
((MonoBehaviour)this).StartCoroutine(DelayedStart());
}
}
private IEnumerator DelayedStart()
{
shouldFire = false;
yield return (object)new WaitForSeconds(startDelay);
shouldFire = true;
}
private void FixedUpdate()
{
ispublicFiring = isFiring;
if (shouldFire)
{
((MonoBehaviour)this).StartCoroutine(FireShells());
shouldFire = false;
}
}
private IEnumerator FireShells()
{
isFiring = true;
for (float elapsed = 0f; elapsed < duration; elapsed += fireInterval)
{
if (burstMode)
{
for (int i = 0; i < burstCount; i++)
{
SpawnShell();
yield return (object)new WaitForSeconds(burstInterval);
}
}
else
{
SpawnShell();
}
yield return (object)new WaitForSeconds(fireInterval);
}
isFiring = false;
}
private void SpawnShell()
{
//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_0017: 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_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_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: 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_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)
//IL_0047: 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_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: 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)
Vector3 val = landPos.position - firePos.position;
Vector3 normalized = ((Vector3)(ref val)).normalized;
Quaternion val2 = Quaternion.AngleAxis(Random.Range(0f, coneAngle), Random.onUnitSphere);
Vector3 val3 = val2 * normalized;
GameObject val4 = Object.Instantiate<GameObject>(shellPrefab, firePos.position, Quaternion.LookRotation(val3));
Rigidbody component = val4.GetComponent<Rigidbody>();
if ((Object)(object)component != (Object)null)
{
component.velocity = val3 * shellSpeed;
}
if ((Object)(object)explosionPrefab != (Object)null)
{
Object.Instantiate<GameObject>(explosionPrefab, val4.transform.position, Quaternion.identity);
}
}
}
public class PlayRandomAudioWhenSpawn : MonoBehaviour
{
[Header("音频源 (挂在物体上的 AudioSource)")]
public AudioSource audioSource;
[Header("可选音频剪辑列表")]
public AudioClip[] audioClips;
private void Start()
{
if ((Object)(object)audioSource != (Object)null && audioClips != null && audioClips.Length > 0)
{
int num = Random.Range(0, audioClips.Length);
AudioClip val = audioClips[num];
audioSource.PlayOneShot(val);
}
else
{
Debug.LogWarning((object)"[RandomAudioOnSpawn] 缺少 AudioSource 或音频剪辑,无法播放。");
}
}
}
public class ShredderMissileController : MonoBehaviour
{
[Header("路径点设置")]
public Transform launchPos;
public Transform targetPos;
[Header("导弹设置")]
public GameObject missilePrefab;
public float flightTime = 3f;
public float rotateSpeed = 180f;
public float warningDuration = 2f;
[Header("音效设置")]
public AudioSource warningAudio;
private GameObject missileInstance;
private void Start()
{
((MonoBehaviour)this).StartCoroutine(MissileRoutine());
}
private IEnumerator MissileRoutine()
{
if ((Object)(object)warningAudio != (Object)null)
{
((Component)warningAudio).gameObject.SetActive(true);
warningAudio.Play();
}
yield return (object)new WaitForSeconds(warningDuration);
if ((Object)(object)missilePrefab != (Object)null && (Object)(object)launchPos != (Object)null)
{
missileInstance = Object.Instantiate<GameObject>(missilePrefab, launchPos.position, Quaternion.identity);
((MonoBehaviour)this).StartCoroutine(FlyMissile());
}
}
private IEnumerator FlyMissile()
{
Vector3 start = launchPos.position;
Vector3 end = targetPos.position;
float elapsed = 0f;
while (elapsed < flightTime)
{
elapsed += Time.deltaTime;
float t = elapsed / flightTime;
Vector3 pos = Vector3.Lerp(start, end, t);
pos.y += Mathf.Sin(t * (float)Math.PI) * 20f;
missileInstance.transform.position = pos;
Vector3 val = end - missileInstance.transform.position;
Vector3 dir = ((Vector3)(ref val)).normalized;
Quaternion targetRot = Quaternion.LookRotation(dir, Vector3.up);
missileInstance.transform.rotation = Quaternion.RotateTowards(missileInstance.transform.rotation, targetRot, rotateSpeed * Time.deltaTime);
yield return null;
}
Object.Destroy((Object)(object)missileInstance);
}
}
public class SuperKillAfter : MonoBehaviour
{
[Header("销毁延迟时间 (秒)")]
public float killDelay = 5f;
private void Start()
{
Object.Destroy((Object)(object)((Component)this).gameObject, killDelay);
}
}
}
public class LightFlicker : MonoBehaviour
{
public bool flicker = true;
public float flickerIntensity = 0.5f;
private float baseIntensity;
private Light lightComp;
private void Awake()
{
lightComp = ((Component)this).gameObject.GetComponent<Light>();
baseIntensity = lightComp.intensity;
}
private void Update()
{
if (flicker)
{
float num = Mathf.PerlinNoise(Random.Range(0f, 1000f), Time.time);
lightComp.intensity = Mathf.Lerp(baseIntensity - flickerIntensity, baseIntensity, num);
}
}
}
namespace thewnbot.The_Cigarette_Mod
{
[BepInPlugin("thewnbot.The_Cigarette_Mod", "The_Cigarette_Mod", "1.0.1")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class The_Cigarette_ModPlugin : BaseUnityPlugin
{
private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
internal static ManualLogSource Logger;
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssets();
}
private void LoadAssets()
{
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "thewnbot.The_Cigarette_Mod");
OtherLoader.RegisterDirectLoad(BasePath, "thewnbot.The_Cigarette_Mod", "", "", "the_cigarette_mod", "");
}
}
}