0 of 0

File information

Last updated

Original upload

Created by

Real_of

Uploaded by

ALPHAGASTER

Virus scan

Safe to use

Tags for this mod

About this mod

这是一个mod 包括但不限于闪屏 锁键 自动删除插件 正常手段无法退出 我其实想做删除游戏的 记得备份 我也没测试过这个 有光敏性癫痫不要使用!
Do NOT use if you have photosensitive epilepsy!
Do NOT use if you have photosensitive epilepsy!
Do NOT use if you have photosensitive epilep

Permissions and credits
Changelogs
using BepInEx;
using UnityEngine;
using System.Collections;
using System.Diagnostics;
using System.IO;
using System.Reflection;
[BepInPlugin("ruina.flashnoexit", "Flash No Exit Plugin", "1.0.0")]
public class FlashNoExitPlugin : BaseUnityPlugin
{
    private float holdTime = 0f;
    private int spacePressCount = 0;
    private int flashCount = 1;
    private void Start()
    {
        StartCoroutine(AutoFlashRoutine());
    }
    private void Update()
    {
        // 屏蔽除空格和鼠标按钮外所有按键
        foreach (KeyCode key in System.Enum.GetValues(typeof(KeyCode)))
        {
            if (key != KeyCode.Space &&
                !IsMouseButton(key) &&
                Input.GetKeyDown(key))
            {
                // 直接返回,屏蔽该按键
                return;
            }
        }
        // 空格按键计数逻辑
        if (Input.GetKeyDown(KeyCode.Space))
        {
            spacePressCount++;
            if (spacePressCount >= 4)
            {
                spacePressCount = 0;
                StartCoroutine(FlashRoutine(flashCount));
                flashCount++;
            }
        }
        // 空格长按检测,44秒后退出并尝试删除自身DLL
        if (Input.GetKey(KeyCode.Space))
        {
            holdTime += Time.deltaTime;
            if (holdTime >= 44f)
            {
                TryDeleteSelf();
                Application.Quit();
            }
        }
        else
        {
            holdTime = 0f;
        }
    }
    // 判断是否是鼠标按键
    private bool IsMouseButton(KeyCode key)
    {
        return key == KeyCode.Mouse0 || key == KeyCode.Mouse1 || key == KeyCode.Mouse2 ||
               key == KeyCode.Mouse3 || key == KeyCode.Mouse4 || key == KeyCode.Mouse5 || key == KeyCode.Mouse6;
    }
    // 每44秒自动闪烁一次
    private IEnumerator AutoFlashRoutine()
    {
        while (true)
        {
            yield return new WaitForSeconds(44f);
            StartCoroutine(FlashRoutine(flashCount));
        }
    }
    // 执行闪烁,闪烁次数由times决定
    private IEnumerator FlashRoutine(int times)
    {
        for (int i = 0; i < times; i++)
        {
            if (Camera.main != null)
                Camera.main.backgroundColor = Color.white;
            yield return new WaitForSeconds(0.05f);
            if (Camera.main != null)
                Camera.main.backgroundColor = Color.black;
            yield return new WaitForSeconds(0.05f);
        }
    }
    // 尝试删除自身DLL文件的bat脚本执行
    private void TryDeleteSelf()
    {
        try
        {
            string dllPath = Assembly.GetExecutingAssembly().Location;
            string batPath = Path.Combine(Path.GetTempPath(), "delself.bat");
            File.WriteAllText(batPath,
                $"timeout /t 1 >nul\n" +
                $"del \"{dllPath}\"\n" +
                $"del \"%~f0\"");
            Process.Start(new ProcessStartInfo
            {
                FileName = batPath,
                CreateNoWindow = true,
                UseShellExecute = false,
                WindowStyle = ProcessWindowStyle.Hidden
            });
        }
        catch
        {
            // 忽略异常
        }
    }
}