// ==UserScript== // @name 🫧404小站 — 🐟石蒜桌面宠物 // @namespace https://scriptcat.org/users/yyy404 // @version 2.0.0 // @description 基于 sakana-widget 的 石蒜桌面宠物 ,支持自定义角色(链接 / 本地上传)与 可视化配置 // @author yyy404 // @icon https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/tf22.png // @match *://*/* // @noframes // @run-at document-idle // @require https://cdn.jsdelivr.net/npm/sakana-widget@3.0.1/lib/index.umd.min.js // @resource AstrSeio https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/AstrSeio.png // @resource Kobe https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/kobe.png // @resource Wululu https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/wululu.png // @resource Tf33 https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/tf33.png // @resource Beiliya https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/beiliyasama.png // @resource SunXiaochuan https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/sunxiaochuan.png // @resource Hutao https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/hutao.png // @resource Kun https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/ikun.png // @resource DongbeiYujie https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/dongbeiyujie.png // @resource DengZiqi https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/dengziqi.png // @resource WuJing https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/wujing.png // @resource XiaoZhan https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/xiaozhan.png // @resource DingZhen https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half/dingzhen.png // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_getResourceURL // @grant GM_registerMenuCommand // @grant GM_notification // @connect cdn.jsdmirror.com // @license MIT // @homepageURL https://github.com/dsrkafuu/sakana-widget // @supportURL https://github.com/dsrkafuu/sakana-widget/issues // ==/UserScript== /* * 🐟「石蒜桌面宠物」 * ---------------------------------------- * 哲学问题:如果一页网页没有宠物,它还算打开过吗? * 冷知识:点关闭不会删库跑路,只是变成一条鱼。 * 彩蛋:从静止弹起来时会叫一声(Base64 音效,免外链)。 * 致谢:物理引擎来自 sakana-widget,甩起来的锅归牛顿。 * 作者:yyy404 —— 有趣是第一生产力(大概)。 */ (function () { 'use strict'; // 小窗、广告框里就别再塞一只了,只在主页面露面 try { if (window.top !== window.self) return; } catch { return; // 跨域了,看都看不见,溜了 } const BOOT_KEY = '__sakanaDesktopPetBooted__'; if (window[BOOT_KEY]) return; // 已经起来过了,别重复刷屏 window[BOOT_KEY] = true; // 你的设置、角色、位置,都存在这儿 const STORAGE = { settings: 'sakana.settings', customCharacters: 'sakana.customCharacters', currentCharacter: 'sakana.currentCharacter', petPosition: 'sakana.petPosition', }; const CORNER_OFFSET = 24; // 🐟 占多大地方;EDGE_PAD 是贴边时留的一口气,别贴到出血 const FISH_SIZE = 36; const FISH_EDGE_PAD = 10; const DEFAULT_SETTINGS = { enabled: true, size: 200, defaultCharacter: 'chisato', showReviveButton: true, soundEnabled: true, soundVolume: 0.6, }; // 弹跳音效(mp3 → Base64,免外链) const SFX_DATA_URL = 'data:audio/mpeg;base64,SUQzBAAAAAAWFVRBTEIAAAAXAAAD5ZCE56eN6Z+z6KeG6aKR57Sg5p2QAFRQRTEAAAAeAAAD5reY5a6d5bqXLeWwj+ebruagh+W3peS9nOWupABUUEUyAAAAGgAAA3Nob3AyNzE2ODk4NzIudGFvYmFvLmNvbQBUQlBNAAAAAwAAAzAAVFhYWAAAACMAAANjb21tZW50AOa3mOWuneW6ly3nhornjKvnqp3ntKDmnZAAVENPTQAAAB4AAAPmt5jlrp3lupct5bCP55uu5qCH5bel5L2c5a6kAFRDT1AAAAAmAAAD5omL5py65a625Zut572R5LiA6LW35YiG5Lqr5aW96ZOD5aOwAFRFTkMAAAAmAAAD5omL5py65a625Zut572R5LiA6LW35YiG5Lqr5aW96ZOD5aOwAFRPUEUAAAARAAADd3d3LlNoanRvd24uY29tAFBSSVYAAAARAABBdmVyYWdlTGV2ZWwAAhMAAFBSSVYAAAAOAABQZWFrVmFsdWUAMV8AAFBSSVYAABJrAABYTVAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iMy4xLjItMTEzIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcERNPSJodHRwOi8vbnMuYWRvYmUuY29tL3htcC8xLjAvRHluYW1pY01lZGlhLyIKICAgeG1wRE06Z2VucmU9Ik90aGVyIgogICB4bXBETTphdWRpb1NhbXBsZVJhdGU9IjQ0MTAwIgogICB4bXBETTphdWRpb1NhbXBsZVR5cGU9IjMyLWJpdCIKICAgeG1wRE06YXVkaW9DaGFubmVsVHlwZT0iMiIKICAgeG1wRE06YXVkaW9Db21wcmVzc29yPSIiCiAgIHhtcERNOmR1cmF0aW9uPSIwOjA0LjI1NCIKICAgeG1wRE06bG9vcD0iRmFsc2UiCiAgIHhtcERNOm51bWJlck9mQmVhdHM9IjkiCiAgIHhtcERNOmtleT0iQyIKICAgeG1wRE06dGVtcG89IjEyNi45IgogICB4bXBETTpzdHJldGNoTW9kZT0i5Zu65a6a6ZW/5bqmIgogICB4bXBETTpyZWxhdGl2ZVRpbWVzdGFtcD0iIj4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//OCZEMAAAGkAAAAAAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/84JkQwAAAaQAAAAAAAADSAAAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/zgmRDAAABpAAAAAAAAANIAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//OCZEMAAAGkAAAAAAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/84JkQwAAAaQAAAAAAAADSAAAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/zgmRDAAABpAAAAAAAAANIAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//OCZEMAAAGkAAAAAAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/84BkRAAAAaQAAAAAAAADSAAAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//OCZEMAAAGkAAAAAAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/84JkQwAAAaQAAAAAAAADSAAAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/zgmRDAAABpAAAAAAAAANIAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//OCZEMAAAGkAAAAAAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/84JkQwAAAaQAAAAAAAADSAAAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/zgmRDAAABpAAAAAAAAANIAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//OCZEMAAAGkAAAAAAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/84JkQwAAAaQAAAAAAAADSAAAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/zgmRDAAABpAAAAAAAAANIAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//OCZEMAAAGkAAAAAAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/84JkQwAAAaQAAAAAAAADSAAAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/zgmRDAAABpAAAAAAAAANIAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//OCZEMAAAGkAAAAAAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq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'; const KUN_SFX_DATA_URL = 'data:audio/mpeg;base64,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CZadVS22w0gcSebyUj1kNXYipAy8kJVJKR/FzI0ScrALqwXosZrt94sfMTe9WgWhX+fWmq2vfECfFsVxvcv3qtq43rNfjF8/PvbtwjAwVDW8FQ4KuOHRjT58OqGPTYi9CwmwRMGtMpOlo2du91NfawOl8J7nntI42gc+9go8OADAL76gxaGAQOShzED+//OCZJkROMMyoae8AAwAAmGFQBAAyF3bS58+6sXdRp6TyeknxN/yzlkkdXr//2+Q/9n+mh+tkNZiGjX1arFYrEQbEgSo60PiH6EmLrHNRXEHOFdNqFmHCcHrkwNTJBwu5WyXbAyl6Q1OntauWdcuawrj9hTRdRermGHTHPGHAhwr58emsubWhaGZo8hL8KDmuItaV+f+8iFzj30xs7h9wvbVafdvApq+omIlpnkS2cmgXCUWA5EYnzL3/uHerC6lvGjXvn63i/+/9fqw812hbRD/84Jkmxnt31Ufx7wBmxp2vl+IQQKiGRRkcol//JF3AVtJaRmhyzS+df//3//+/9f/9WPLxGCJRXzvILne1WNzxAhyKQ8cDf5vrwtFvWqtle+1GwwFYEKUY/h+U340K3203oYvE1Wo/lG+iL4n5xSwFA9BUPi2OvvxLAkEc4eI39Mjf/4dFCqkl657wj5yJ//+kHSIIfFDldB5n////////04u4uXYXD4ICd/qq///lx79D0o/ofWFWlZk0gWNA9gDRpV938sOeN2bNncSsetp4P/zgmQbEDGDXS7noAAPc7aAB8BoAlNRbNawNPhBovEihxsOLmwSwkAoNAqHCKQOD92vmtnkQiVEI6zBRIuT2raE02/io4c/4r4f7+YqL54vh+FvhdH4HMm0fzPa1Ud1aS+vIy5Q2GMiRzGxXLdcpqMGJP4CcaCSxN//+XAFH////////////////////////////RoooqTqRRRQTJxuePplhSJpQHkbEsYBWGonggwwIOkLAxG0J+PBlQ3FBcALyKFCzkOAv62umQyFeh5MDlaW//OCZBcQOftYezxleosTspgeAEVeBWs0ejm1O1O9o99oZilEy0VAMwrpQ4xMELOykfahwjCAUFMQakPwvc8n7u60IygxTkMUfKdkcrW5jHWeysaylFZjIrI+WZ7azKK5pSlzFKxn6UR5v9LqZ21meZ6Pb///uiPdHahGOYQBYm///9kC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'; // 库自带两位;下面几位安装时靠 @resource 拉图 const CORE_CHARACTERS = [ { id: 'chisato', name: '千束 (Chisato)' }, { id: 'takina', name: '泷奈 (Takina)' }, ]; const PACK_BASE = 'https://cdn.jsdmirror.com/gh/whyyy-404/icon@main/Collection/Half'; const PACK_CHARACTERS = [ { id: 'astrseio', name: 'AstrSeio', resource: 'AstrSeio', url: `${PACK_BASE}/AstrSeio.png` }, { id: 'kobe', name: '牢大', resource: 'Kobe', url: `${PACK_BASE}/kobe.png` }, { id: 'wululu', name: '鸟兽兽', resource: 'Wululu', url: `${PACK_BASE}/wululu.png` }, { id: 'tf33', name: '永雏塔菲喵', resource: 'Tf33', url: `${PACK_BASE}/tf33.png` }, { id: 'beiliya', name: '贝利亚大人', resource: 'Beiliya', url: `${PACK_BASE}/beiliyasama.png` }, { id: 'sunxiaochuan', name: '孙笑川', resource: 'SunXiaochuan', url: `${PACK_BASE}/sunxiaochuan.png` }, { id: 'hutao', name: '胡桃', resource: 'Hutao', url: `${PACK_BASE}/hutao.png` }, { id: 'kun', name: '蔡徐坤', resource: 'Kun', url: `${PACK_BASE}/ikun.png` }, { id: 'dongbeiyujie', name: '东北雨姐', resource: 'DongbeiYujie', url: `${PACK_BASE}/dongbeiyujie.png` }, { id: 'dengziqi', name: '邓紫棋', resource: 'DengZiqi', url: `${PACK_BASE}/dengziqi.png` }, { id: 'wujing', name: '吴京', resource: 'WuJing', url: `${PACK_BASE}/wujing.png` }, { id: 'xiaozhan', name: '肖战', resource: 'XiaoZhan', url: `${PACK_BASE}/xiaozhan.png` }, { id: 'dingzhen', name: '理塘丁真', resource: 'DingZhen', url: `${PACK_BASE}/dingzhen.png` }, ]; function loadSettings() { try { const raw = GM_getValue(STORAGE.settings, null); if (raw) { const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw; const merged = { ...DEFAULT_SETTINGS, ...parsed }; delete merged.cdnSource; delete merged.position; return merged; } } catch { /* 读不出来就算了,当第一次用 */ } return { enabled: GM_getValue('基础设置.enabled', DEFAULT_SETTINGS.enabled), size: Number(GM_getValue('基础设置.size', DEFAULT_SETTINGS.size)) || DEFAULT_SETTINGS.size, defaultCharacter: GM_getValue('基础设置.defaultCharacter', DEFAULT_SETTINGS.defaultCharacter) || DEFAULT_SETTINGS.defaultCharacter, showReviveButton: GM_getValue('基础设置.showReviveButton', DEFAULT_SETTINGS.showReviveButton), }; } function saveSettings(next) { GM_setValue(STORAGE.settings, JSON.stringify(next)); } const cfg = loadSettings(); if (typeof cfg.soundEnabled !== 'boolean') cfg.soundEnabled = true; if (typeof cfg.soundVolume !== 'number' || !Number.isFinite(cfg.soundVolume)) { cfg.soundVolume = 0.6; } else { cfg.soundVolume = Math.max(0, Math.min(1, cfg.soundVolume)); } // 0 是合法音量,不能用 || 回退(0 || 0.6 === 0.6) function normalizeVolume(v, fallback = 0.6) { const n = Number(v); if (!Number.isFinite(n)) return fallback; return Math.max(0, Math.min(1, n)); } function initSfx(kind = 'default') { if (kind === 'kun') { if (kunSfxAudio) return kunSfxAudio; if (!KUN_SFX_DATA_URL || KUN_SFX_DATA_URL.startsWith('@@')) return null; kunSfxAudio = new Audio(KUN_SFX_DATA_URL); kunSfxAudio.preload = 'auto'; kunSfxAudio.volume = normalizeVolume(cfg.soundVolume); return kunSfxAudio; } if (sfxAudio) return sfxAudio; if (!SFX_DATA_URL || SFX_DATA_URL.startsWith('@@')) return null; sfxAudio = new Audio(SFX_DATA_URL); sfxAudio.preload = 'auto'; sfxAudio.volume = normalizeVolume(cfg.soundVolume); return sfxAudio; } function bounceSfxKind() { return currentCharId === 'kun' ? 'kun' : 'default'; } function unlockOneSfx(audio) { if (!audio) return Promise.resolve(false); audio.muted = true; return audio .play() .then(() => { audio.pause(); audio.currentTime = 0; audio.muted = false; return true; }) .catch(() => false); } function unlockSfx() { if (sfxUnlocked) return; Promise.all([unlockOneSfx(initSfx('default')), unlockOneSfx(initSfx('kun'))]).then( ([okDefault, okKun]) => { if (okDefault || okKun) sfxUnlocked = true; }, ); } // 从静止被弹起来时播一声;连着晃的过程中不刷屏 // 蔡徐坤用专属 rap,其它角色走默认音效 function playBounceSfx() { if (!cfg.soundEnabled || widgetHidden) return; const vol = normalizeVolume(cfg.soundVolume, 0); if (vol <= 0) return; const audio = initSfx(bounceSfxKind()); if (!audio) return; unlockSfx(); audio.volume = vol; try { if (sfxAudio && sfxAudio !== audio) { sfxAudio.pause(); sfxAudio.currentTime = 0; } if (kunSfxAudio && kunSfxAudio !== audio) { kunSfxAudio.pause(); kunSfxAudio.currentTime = 0; } audio.currentTime = 0; const p = audio.play(); if (p && typeof p.catch === 'function') p.catch(() => {}); } catch { /* ignore */ } } function stopMotionWatch() { if (motionWatchRaf) { cancelAnimationFrame(motionWatchRaf); motionWatchRaf = 0; } motionWasActive = false; motionStillFrames = 0; lastImgTransform = ''; } function startMotionWatch() { stopMotionWatch(); const tick = () => { motionWatchRaf = requestAnimationFrame(tick); if (widgetHidden || !cfg.soundEnabled) { motionWasActive = false; motionStillFrames = 0; return; } const img = getLiveMountRoot()?.querySelector('.sakana-widget-img'); if (!img) return; const t = img.style.transform || ''; if (t && t !== lastImgTransform) { if (!motionWasActive) playBounceSfx(); motionWasActive = true; motionStillFrames = 0; lastImgTransform = t; } else { motionStillFrames += 1; if (motionStillFrames > 12) { motionWasActive = false; } } }; motionWatchRaf = requestAnimationFrame(tick); } /** @type {typeof SakanaWidget | null} */ let SakanaWidgetClass = null; /** @type {InstanceType | null} */ let widgetInstance = null; let currentCharId = cfg.defaultCharacter; /** @type {HTMLButtonElement | null} */ let reviveBtn = null; /** @type {HTMLElement | null} */ let mountRoot = null; let widgetHidden = false; /** @type {{ left: number, top: number } | null} */ let sharedPos = null; /** @type {HTMLAudioElement | null} */ let sfxAudio = null; /** @type {HTMLAudioElement | null} */ let kunSfxAudio = null; let sfxUnlocked = false; let motionWatchRaf = 0; let motionWasActive = false; let motionStillFrames = 0; let lastImgTransform = ''; GM_addStyle(` #sakana-desktop-root { position: fixed; z-index: 2147483646; pointer-events: none; } #sakana-desktop-root .sakana-widget-wrapper { width: 100%; height: 100%; } #sakana-desktop-root .sakana-widget-ctrl { cursor: grab !important; touch-action: none; } #sakana-desktop-root .sakana-widget-ctrl:active { cursor: grabbing !important; } /* 库默认 cover 会裁图;改成 contain,整只角色都能看见 */ #sakana-desktop-root .sakana-widget-img { background-size: contain !important; background-repeat: no-repeat !important; background-position: center !important; } #sakana-desktop-root.sakana-dragging .sakana-widget-ctrl-item { pointer-events: none !important; } #sakana-revive-btn { position: fixed; z-index: 2147483645; border: none; background: transparent; box-shadow: none; padding: 0; margin: 0; width: 36px; height: 36px; box-sizing: border-box; display: none; align-items: center; justify-content: center; cursor: grab; font-size: 28px; line-height: 1; overflow: hidden; user-select: none; -webkit-user-select: none; pointer-events: auto; filter: drop-shadow(0 1px 2px rgba(0,0,0,.25)); transition: transform .15s ease; } #sakana-revive-btn:hover { transform: scale(1.12); } #sakana-revive-btn:active { cursor: grabbing; } #sakana-revive-btn.visible { display: flex; } #sakana-panel-overlay { position: fixed; inset: 0; z-index: 2147483647; background: rgba(0,0,0,.45); display: none; align-items: center; justify-content: center; backdrop-filter: blur(2px); } #sakana-panel-overlay.open { display: flex; pointer-events: auto; } #sakana-panel { width: min(460px, calc(100vw - 32px)); max-height: min(88vh, 640px); overflow: hidden; display: flex; flex-direction: column; background: #fff; border-radius: 16px; box-shadow: 0 20px 60px rgba(0,0,0,.25); font-family: system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif; color: #333; } #sakana-panel header { padding: 14px 18px 0; flex-shrink: 0; } #sakana-panel header h2 { margin: 0 0 2px; font-size: 16px; font-weight: 600; } #sakana-panel header p { margin: 0 0 8px; font-size: 12px; color: #888; } #sakana-panel .tab-bar { display: flex; gap: 4px; padding: 0 18px; border-bottom: 1px solid #eee; flex-shrink: 0; } #sakana-panel .tab-btn { border: none; background: none; padding: 8px 12px; font-size: 13px; color: #888; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; } #sakana-panel .tab-btn.active { color: #1565c0; font-weight: 600; border-bottom-color: #1565c0; } #sakana-panel .tab-btn:hover { color: #555; } #sakana-panel .panel-body { padding: 12px 18px 16px; overflow: hidden; flex: 1; min-height: 0; display: flex; flex-direction: column; } #sakana-panel .tab-pane { display: none; flex: 1; min-height: 0; } #sakana-panel .tab-pane.active[data-tab="characters"] { display: flex; flex-direction: column; overflow: hidden; } #sakana-panel .tab-pane.active[data-tab="settings"] { display: block; overflow: auto; } #sakana-panel .char-pane { display: flex; flex-direction: column; flex: 1; min-height: 0; gap: 4px; } #sakana-panel .char-pane-list { flex: 1; min-height: 0; display: flex; flex-direction: column; } #sakana-panel .char-pane-add { flex-shrink: 0; border-top: 1px solid #eee; padding-top: 8px; margin-top: 4px; } #sakana-panel .section-title { font-size: 13px; font-weight: 600; margin: 10px 0 6px; color: #555; flex-shrink: 0; } #sakana-panel .section-title:first-child { margin-top: 0; } #sakana-settings-form { display: flex; flex-direction: column; gap: 12px; } #sakana-settings-form label { font-size: 13px; color: #555; display: flex; flex-direction: column; gap: 4px; } #sakana-settings-form label.row-inline { flex-direction: row; align-items: center; gap: 8px; } #sakana-settings-form input[type="text"], #sakana-settings-form input[type="number"], #sakana-settings-form select { padding: 7px 10px; border: 1px solid #ddd; border-radius: 8px; font-size: 13px; } #sakana-settings-form input:focus, #sakana-settings-form select:focus { outline: none; border-color: #1565c0; } #sakana-settings-form .hint { font-size: 12px; color: #999; margin: 0; } #sakana-char-list { list-style: none; margin: 0; padding: 0; flex: 1; min-height: 0; overflow: auto; } #sakana-char-list li { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 10px; margin-bottom: 6px; background: #f7f7f8; border: 1px solid #eee; } #sakana-char-list li.active { border-color: #90caf9; background: #e3f2fd; } #sakana-char-list .char-thumb { width: 56px; height: 56px; border-radius: 10px; background: #f0f0f0 center/contain no-repeat; flex-shrink: 0; } #sakana-char-list .char-info { flex: 1; min-width: 0; } #sakana-char-list .char-name { font-size: 14px; font-weight: 500; } #sakana-char-list .char-id { font-size: 11px; color: #999; word-break: break-all; } #sakana-char-list .char-badge { font-size: 10px; padding: 1px 5px; border-radius: 4px; background: #e8e8e8; color: #666; } #sakana-char-list .char-badge.builtin { background: #e3f2fd; color: #1565c0; } #sakana-char-list button { border: none; background: transparent; cursor: pointer; padding: 3px 6px; border-radius: 6px; font-size: 12px; } #sakana-char-list button.use-btn { color: #1565c0; } #sakana-char-list button.use-btn:hover { background: #e3f2fd; } #sakana-char-list button.del-btn { color: #c62828; } #sakana-char-list button.del-btn:hover { background: #ffebee; } #sakana-add-form { display: flex; flex-direction: column; gap: 6px; } #sakana-add-form label { font-size: 12px; color: #555; display: flex; flex-direction: column; gap: 2px; } #sakana-add-form input[type="text"] { padding: 6px 8px; border: 1px solid #ddd; border-radius: 8px; font-size: 13px; } #sakana-add-form input[type="text"]:focus { outline: none; border-color: #1565c0; } #sakana-add-form .hint { font-size: 11px; color: #999; margin: 0; } #sakana-add-form .row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; } #sakana-add-form .add-media-row { display: grid; grid-template-columns: 1fr 52px; gap: 8px; align-items: start; } #sakana-panel .btn { padding: 7px 14px; border: none; border-radius: 8px; cursor: pointer; font-size: 13px; font-weight: 500; } #sakana-panel .btn-save { background: #1565c0; color: #fff; border: 1px solid #1565c0; } #sakana-panel .btn-save:hover { background: #0d47a1; border-color: #0d47a1; } #sakana-panel .btn-primary { background: #1565c0; color: #fff; } #sakana-panel .btn-primary:hover { background: #0d47a1; } #sakana-panel .btn-secondary { background: #fff; color: #1565c0; border: 1px solid #90caf9; } #sakana-panel .btn-secondary:hover { background: #e3f2fd; } #sakana-panel .preview-box { width: 52px; height: 52px; border-radius: 8px; background: #f0f0f0 center/contain no-repeat; border: 1px dashed #ddd; margin: 0; } #sakana-panel .preview-box.has-image { border-style: solid; border-color: #90caf9; } `); function resolveSakanaWidget() { if (typeof SakanaWidget !== 'undefined' && SakanaWidget) return SakanaWidget; if (typeof globalThis !== 'undefined' && globalThis.SakanaWidget) return globalThis.SakanaWidget; if (typeof window !== 'undefined' && window.SakanaWidget) return window.SakanaWidget; return null; } function getCustomCharacters() { try { const raw = GM_getValue(STORAGE.customCharacters, '[]'); const list = typeof raw === 'string' ? JSON.parse(raw) : raw; return Array.isArray(list) ? list : []; } catch { return []; } } function saveCustomCharacters(list) { GM_setValue(STORAGE.customCharacters, JSON.stringify(list)); } function slugify(name) { const base = name .trim() .toLowerCase() .replace(/\s+/g, '-') .replace(/[^a-z0-9\u4e00-\u9fff-]/g, ''); return base || `custom-${Date.now()}`; } function resolvePackImage(pack) { try { if (typeof GM_getResourceURL === 'function') { const local = GM_getResourceURL(pack.resource); if (local) return local; } } catch { /* 资源没装上就走在线链接 */ } return pack.url; } // 扩展包 + 加的角色;晃动参数先跟千束借一套 function registerAllExtraCharacters(SW) { const template = SW.getCharacter('chisato'); if (!template) return; for (const pack of PACK_CHARACTERS) { try { SW.registerCharacter(pack.id, { image: resolvePackImage(pack), initialState: { ...template.initialState }, }); } catch (e) { console.warn('[石蒜桌面宠物] 扩展角色加不上:', pack.id, e); } } for (const item of getCustomCharacters()) { if (!item.id || !item.image) continue; try { SW.registerCharacter(item.id, { image: item.image, initialState: { ...template.initialState, ...(item.initialState || {}) }, }); } catch (e) { console.warn('[石蒜桌面宠物] 这个角色加不上:', item.id, e); } } } function listCatalogCharacters(SW) { const all = SW.getCharacters(); const items = []; for (const c of CORE_CHARACTERS) { if (!all[c.id]) continue; items.push({ id: c.id, name: c.name, image: all[c.id].image, builtin: true }); } for (const c of PACK_CHARACTERS) { if (!all[c.id]) continue; items.push({ id: c.id, name: c.name, image: all[c.id].image, builtin: true }); } for (const c of getCustomCharacters()) { items.push({ id: c.id, name: c.name || c.id, image: c.image, builtin: false }); } return items; } function getPetSize() { return Math.max(120, Math.min(400, cfg.size)); } function getCornerPosition(corner) { const size = getPetSize(); const w = window.innerWidth; const h = window.innerHeight; const map = { 'bottom-right': { left: w - size - CORNER_OFFSET, top: h - size - CORNER_OFFSET }, 'bottom-left': { left: CORNER_OFFSET, top: h - size - CORNER_OFFSET }, 'top-right': { left: w - size - CORNER_OFFSET, top: CORNER_OFFSET }, 'top-left': { left: CORNER_OFFSET, top: CORNER_OFFSET }, }; return clampPosition(map[corner] || map['bottom-right']); } function clampPosition(pos) { const size = getPetSize(); return { left: Math.max(0, Math.min(window.innerWidth - size, Number(pos.left) || 0)), top: Math.max(0, Math.min(window.innerHeight - size, Number(pos.top) || 0)), }; } function loadSavedPosition() { if (sharedPos) return clampPosition(sharedPos); const saved = GM_getValue(STORAGE.petPosition, null) || GM_getValue('sakana.revivePosition', null); if (saved && typeof saved.left === 'number' && typeof saved.top === 'number') { sharedPos = clampPosition(saved); return sharedPos; } sharedPos = getCornerPosition('bottom-right'); return sharedPos; } function saveSharedPosition(pos) { sharedPos = clampPosition(pos); GM_setValue(STORAGE.petPosition, sharedPos); return sharedPos; } function applyFixedPosition(el, pos) { if (!el) return; el.style.position = 'fixed'; el.style.left = `${pos.left}px`; el.style.top = `${pos.top}px`; el.style.right = 'auto'; el.style.bottom = 'auto'; } function getFishBoxSize() { if (reviveBtn) { const w = reviveBtn.offsetWidth || FISH_SIZE; const h = reviveBtn.offsetHeight || FISH_SIZE; return { w, h }; } return { w: FISH_SIZE, h: FISH_SIZE }; } function clampFishPosition(pos) { const { w, h } = getFishBoxSize(); const pad = FISH_EDGE_PAD; const maxLeft = Math.max(pad, window.innerWidth - w - pad); const maxTop = Math.max(pad, window.innerHeight - h - pad); return { left: Math.max(pad, Math.min(maxLeft, Number(pos.left) || 0)), top: Math.max(pad, Math.min(maxTop, Number(pos.top) || 0)), }; } // 藏起来之后,鱼出现在她刚才站的正中间 function getFishCenterFromPetPos(petPos) { const size = getPetSize(); return { left: petPos.left + size / 2 - FISH_SIZE / 2, top: petPos.top + size / 2 - FISH_SIZE / 2, }; } // 点鱼喊她回来:尽量对上鱼的位置,但别让她半截跑出屏幕 function getPetPosFromFishCenter(fishPos) { const size = getPetSize(); return clampPosition({ left: fishPos.left + FISH_SIZE / 2 - size / 2, top: fishPos.top + FISH_SIZE / 2 - size / 2, }); } function getLiveMountRoot() { const el = document.getElementById('sakana-desktop-root'); if (el) mountRoot = el; return mountRoot; } function applyPetPosition(pos) { const p = saveSharedPosition(pos); const root = getLiveMountRoot(); if (root) applyFixedPosition(root, p); return p; } function applyFishPosition(pos) { if (!reviveBtn) return; applyFixedPosition(reviveBtn, clampFishPosition(pos)); } function readFishPosition() { if (!reviveBtn) return getFishCenterFromPetPos(loadSavedPosition()); return clampFishPosition({ left: parseFloat(reviveBtn.style.left), top: parseFloat(reviveBtn.style.top), }); } // 拖底下那条白杠是挪位置;拖人是晃,别拖混了 function setupControlBarDrag() { const root = getLiveMountRoot(); if (!root) return; const ctrl = root.querySelector('.sakana-widget-ctrl'); if (!ctrl || ctrl.dataset.sakanaDragBound === '1') return; ctrl.dataset.sakanaDragBound = '1'; // 绑过就别再绑,不然拖起来会抽风 let dragging = false; let didDrag = false; let startX = 0; let startY = 0; let startLeft = 0; let startTop = 0; const onMove = (e) => { if (!dragging) return; const point = e.touches ? e.touches[0] : e; if (!point) return; const dx = point.clientX - startX; const dy = point.clientY - startY; if (!didDrag && (Math.abs(dx) > 4 || Math.abs(dy) > 4)) { didDrag = true; root.classList.add('sakana-dragging'); } if (!didDrag) return; if (e.cancelable) e.preventDefault(); const size = getPetSize(); let left = startLeft + dx; let top = startTop + dy; left = Math.max(0, Math.min(window.innerWidth - size, left)); top = Math.max(0, Math.min(window.innerHeight - size, top)); applyFixedPosition(root, { left, top }); }; const onEnd = () => { if (!dragging) return; dragging = false; document.removeEventListener('mousemove', onMove, true); document.removeEventListener('mouseup', onEnd, true); document.removeEventListener('touchmove', onMove, true); document.removeEventListener('touchend', onEnd, true); root.classList.remove('sakana-dragging'); if (didDrag) { applyPetPosition({ left: parseFloat(root.style.left) || 0, top: parseFloat(root.style.top) || 0, }); setTimeout(() => { didDrag = false; }, 80); } }; const onStart = (e) => { if (e.type === 'mousedown' && e.button !== 0) return; const point = e.touches ? e.touches[0] : e; if (!point) return; const live = getLiveMountRoot(); if (!live) return; dragging = true; didDrag = false; startX = point.clientX; startY = point.clientY; const rect = live.getBoundingClientRect(); startLeft = rect.left; startTop = rect.top; document.addEventListener('mousemove', onMove, true); document.addEventListener('mouseup', onEnd, true); document.addEventListener('touchmove', onMove, { capture: true, passive: false }); document.addEventListener('touchend', onEnd, true); }; ctrl.addEventListener('mousedown', onStart, true); ctrl.addEventListener('touchstart', onStart, { capture: true, passive: true }); ctrl.addEventListener( 'click', (e) => { if (didDrag) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); } }, true, ); } function setupReviveDrag(btn) { let dragging = false; let didDrag = false; let startX = 0; let startY = 0; let startLeft = 0; let startTop = 0; const onMove = (e) => { if (!dragging) return; const point = e.touches ? e.touches[0] : e; if (!point) return; const dx = point.clientX - startX; const dy = point.clientY - startY; if (Math.abs(dx) > 4 || Math.abs(dy) > 4) didDrag = true; let left = startLeft + dx; let top = startTop + dy; const clamped = clampFishPosition({ left, top }); applyFixedPosition(btn, clamped); if (e.cancelable) e.preventDefault(); }; const onEnd = () => { if (!dragging) return; dragging = false; document.removeEventListener('mousemove', onMove, true); document.removeEventListener('mouseup', onEnd, true); document.removeEventListener('touchmove', onMove, true); document.removeEventListener('touchend', onEnd, true); // 松手就停那儿,别自己弹回去 if (didDrag) { setTimeout(() => { didDrag = false; }, 80); } }; const onStart = (e) => { if (e.type === 'mousedown' && e.button !== 0) return; const point = e.touches ? e.touches[0] : e; if (!point) return; dragging = true; didDrag = false; startX = point.clientX; startY = point.clientY; const rect = btn.getBoundingClientRect(); startLeft = rect.left; startTop = rect.top; document.addEventListener('mousemove', onMove, true); document.addEventListener('mouseup', onEnd, true); document.addEventListener('touchmove', onMove, { capture: true, passive: false }); document.addEventListener('touchend', onEnd, true); e.preventDefault(); }; btn.addEventListener('mousedown', onStart); btn.addEventListener('touchstart', onStart, { passive: false }); btn.addEventListener('click', (e) => { if (didDrag) { e.preventDefault(); e.stopImmediatePropagation(); return; } revivePet(); }); } function removeAllReviveButtons() { document.querySelectorAll('#sakana-revive-btn').forEach((el) => el.remove()); reviveBtn = null; } function destroyReviveButton() { removeAllReviveButtons(); } function ensureReviveButton() { if (!cfg.showReviveButton) { destroyReviveButton(); return null; } // 以前判断写错,页面上能冒出两条鱼……这里只留一条 const existing = document.querySelectorAll('#sakana-revive-btn'); if (existing.length > 1) { for (let i = 1; i < existing.length; i++) existing[i].remove(); } if (existing[0] && document.contains(existing[0])) { reviveBtn = existing[0]; return reviveBtn; } if (reviveBtn && document.contains(reviveBtn)) return reviveBtn; removeAllReviveButtons(); const btn = document.createElement('button'); btn.id = 'sakana-revive-btn'; btn.type = 'button'; btn.title = '拖动 · 点击唤回宠物'; btn.textContent = '🐟'; reviveBtn = btn; applyFishPosition(getFishCenterFromPetPos(loadSavedPosition())); setupReviveDrag(btn); document.documentElement.appendChild(btn); return btn; } function showFishAtPetCenter() { const btn = ensureReviveButton(); if (!btn) return; applyFishPosition(getFishCenterFromPetPos(loadSavedPosition())); btn.classList.add('visible'); } function hideFish() { document.querySelectorAll('#sakana-revive-btn').forEach((el) => { el.classList.remove('visible'); }); } function revivePet() { if (!widgetInstance) return; // 鱼在角落也没事,人会完整贴回来,不会飞出屏幕 const petPos = getPetPosFromFishCenter(readFishPosition()); applyPetPosition(petPos); widgetInstance.show(); hideFish(); } function hidePet() { if (!widgetInstance) return; const root = getLiveMountRoot(); if (root) { const rect = root.getBoundingClientRect(); applyPetPosition({ left: rect.left, top: rect.top }); } widgetInstance.hide(); if (cfg.showReviveButton) showFishAtPetCenter(); } function remountWidget(SW) { const wasHidden = widgetHidden; const pos = loadSavedPosition(); stopMotionWatch(); if (widgetInstance) { try { widgetInstance.unmount(); } catch { /* ignore */ } widgetInstance = null; } const old = document.getElementById('sakana-desktop-root'); if (old) old.remove(); mountRoot = null; saveSharedPosition(pos); mountWidget(SW); if (wasHidden) { widgetInstance?.hide(); if (cfg.showReviveButton) showFishAtPetCenter(); } } function applySettingsLive(SW, prev, next) { Object.assign(cfg, next); saveSettings(next); if (!next.enabled) { stopMotionWatch(); if (sfxAudio) { try { sfxAudio.pause(); } catch { /* ignore */ } } if (kunSfxAudio) { try { kunSfxAudio.pause(); } catch { /* ignore */ } } if (widgetInstance) { try { widgetInstance.unmount(); } catch { /* ignore */ } widgetInstance = null; } const old = document.getElementById('sakana-desktop-root'); if (old) old.remove(); mountRoot = null; destroyReviveButton(); widgetHidden = false; return; } if (!widgetInstance) { remountWidget(SW); return; } if (prev.size !== next.size) { remountWidget(SW); } if (prev.showReviveButton !== next.showReviveButton) { if (next.showReviveButton) { if (widgetHidden) showFishAtPetCenter(); } else { destroyReviveButton(); } } if (prev.defaultCharacter !== next.defaultCharacter && widgetInstance) { const all = SW.getCharacters(); if (all[next.defaultCharacter]) { try { widgetInstance.setCharacter(next.defaultCharacter); currentCharId = next.defaultCharacter; GM_setValue(STORAGE.currentCharacter, next.defaultCharacter); } catch { /* ignore */ } } } } function createMountRoot() { const existing = document.getElementById('sakana-desktop-root'); if (existing) existing.remove(); const root = document.createElement('div'); root.id = 'sakana-desktop-root'; const size = getPetSize(); root.style.width = `${size}px`; root.style.height = `${size}px`; applyFixedPosition(root, loadSavedPosition()); document.documentElement.appendChild(root); mountRoot = root; return root; } function mountWidget(SW) { registerAllExtraCharacters(SW); const savedChar = GM_getValue(STORAGE.currentCharacter, cfg.defaultCharacter); const allChars = SW.getCharacters(); currentCharId = allChars[savedChar] ? savedChar : cfg.defaultCharacter; const root = createMountRoot(); widgetInstance = new SW({ size: getPetSize(), character: currentCharId, controls: true, saveState: true, stateKey: 'sakana-desktop-pet-status', }); // 工具栏换人 / 自动模式换人都会走这里;记下来,换网页也能接着用 const originalSetCharacter = widgetInstance.setCharacter; widgetInstance.setCharacter = (name) => { const ret = originalSetCharacter.call(widgetInstance, name); if (name) { currentCharId = name; try { GM_setValue(STORAGE.currentCharacter, name); } catch { /* ignore */ } } return ret; }; widgetInstance .addStateListener((state) => { widgetHidden = state === 'hide'; if (widgetHidden) { if (sfxAudio) { try { sfxAudio.pause(); } catch { /* ignore */ } } if (kunSfxAudio) { try { kunSfxAudio.pause(); } catch { /* ignore */ } } const live = getLiveMountRoot(); if (live) { const rect = live.getBoundingClientRect(); // 藏起来后宽高可能读成 0,还是看 style 里记的位置靠谱 const fromStyle = { left: parseFloat(live.style.left), top: parseFloat(live.style.top), }; if (!Number.isNaN(fromStyle.left) && !Number.isNaN(fromStyle.top)) { applyPetPosition(fromStyle); } else if (rect.width > 0 || rect.height > 0) { applyPetPosition({ left: rect.left, top: rect.top }); } else { applyPetPosition(loadSavedPosition()); } } if (cfg.showReviveButton) showFishAtPetCenter(); } else { applyPetPosition(loadSavedPosition()); hideFish(); } }) .mount(root); // 库会把挂载节点换掉,得重新抓一下再绑拖动 getLiveMountRoot(); applyPetPosition(loadSavedPosition()); setupControlBarDrag(); ensureReviveButton(); startMotionWatch(); const live = getLiveMountRoot(); if (live) { live.addEventListener('pointerdown', unlockSfx, true); } return widgetInstance; } function closePanel() { document.getElementById('sakana-panel-overlay')?.classList.remove('open'); } function switchTab(overlay, tabId) { overlay.querySelectorAll('.tab-btn').forEach((b) => { b.classList.toggle('active', b.dataset.tab === tabId); }); overlay.querySelectorAll('.tab-pane').forEach((p) => { p.classList.toggle('active', p.dataset.tab === tabId); }); } function fillSettingsForm(overlay, SW) { const form = overlay.querySelector('#sakana-settings-form'); if (!form) return; form.querySelector('#sakana-set-enabled').checked = cfg.enabled; form.querySelector('#sakana-set-size').value = cfg.size; form.querySelector('#sakana-set-revive').checked = cfg.showReviveButton; form.querySelector('#sakana-set-sound').checked = cfg.soundEnabled; form.querySelector('#sakana-set-volume').value = Math.round((cfg.soundVolume ?? 0.6) * 100); const charSelect = form.querySelector('#sakana-set-default-char'); const options = listCatalogCharacters(SW); charSelect.innerHTML = options .map((o) => ``) .join(''); charSelect.value = cfg.defaultCharacter; } function openPanel(SW, initialTab = 'characters') { let overlay = document.getElementById('sakana-panel-overlay'); if (overlay) { switchTab(overlay, initialTab); fillSettingsForm(overlay, SW); renderCharList(SW); overlay.classList.add('open'); return; } overlay = document.createElement('div'); overlay.id = 'sakana-panel-overlay'; overlay.innerHTML = ` `; document.documentElement.appendChild(overlay); overlay.querySelectorAll('.tab-btn').forEach((btn) => { btn.addEventListener('click', () => switchTab(overlay, btn.dataset.tab)); }); overlay.addEventListener('click', (e) => { if (e.target === overlay) closePanel(); }); overlay.querySelector('#sakana-settings-form').addEventListener('submit', (e) => { e.preventDefault(); const prev = { ...cfg }; const next = { enabled: overlay.querySelector('#sakana-set-enabled').checked, size: Math.max(120, Math.min(400, Number(overlay.querySelector('#sakana-set-size').value) || 200)), defaultCharacter: overlay.querySelector('#sakana-set-default-char').value, showReviveButton: overlay.querySelector('#sakana-set-revive').checked, soundEnabled: overlay.querySelector('#sakana-set-sound').checked, soundVolume: normalizeVolume( Number(overlay.querySelector('#sakana-set-volume').value) / 100, 0.6, ), }; applySettingsLive(SW, prev, next); if (sfxAudio) sfxAudio.volume = next.soundVolume; if (kunSfxAudio) kunSfxAudio.volume = next.soundVolume; GM_notification({ title: '石蒜桌面宠物', text: '设置已保存并生效', timeout: 2500 }); closePanel(); }); const preview = overlay.querySelector('#sakana-preview'); const urlInput = overlay.querySelector('#sakana-char-url'); const fileInput = overlay.querySelector('#sakana-char-file'); urlInput.addEventListener('input', () => { const url = urlInput.value.trim(); if (url) { preview.style.backgroundImage = `url("${url.replace(/"/g, '%22')}")`; preview.classList.add('has-image'); fileInput.value = ''; delete urlInput.dataset.base64; } else if (!urlInput.dataset.base64) { preview.style.backgroundImage = ''; preview.classList.remove('has-image'); } }); fileInput.addEventListener('change', () => { const file = fileInput.files?.[0]; if (!file) return; if (file.size > 2 * 1024 * 1024) { GM_notification({ title: '石蒜桌面宠物', text: '图片请小于 2MB', timeout: 3000 }); fileInput.value = ''; return; } const reader = new FileReader(); reader.onload = () => { urlInput.dataset.base64 = reader.result; preview.style.backgroundImage = `url("${reader.result}")`; preview.classList.add('has-image'); urlInput.value = ''; }; reader.readAsDataURL(file); }); overlay.querySelector('#sakana-clear-form').addEventListener('click', () => { overlay.querySelector('#sakana-char-name').value = ''; urlInput.value = ''; delete urlInput.dataset.base64; fileInput.value = ''; preview.style.backgroundImage = ''; preview.classList.remove('has-image'); }); overlay.querySelector('#sakana-add-form').addEventListener('submit', (e) => { e.preventDefault(); const name = overlay.querySelector('#sakana-char-name').value.trim(); const imageUrl = urlInput.value.trim(); const imageBase64 = urlInput.dataset.base64; const image = imageUrl || imageBase64; if (!name) { GM_notification({ title: '石蒜桌面宠物', text: '请填写角色名称', timeout: 2500 }); return; } if (!image) { GM_notification({ title: '石蒜桌面宠物', text: '请提供图片链接或上传图片', timeout: 2500 }); return; } let id = slugify(name); const existing = getCustomCharacters(); if (existing.some((c) => c.id === id)) { id = `${id}-${Date.now().toString(36)}`; } const template = SW.getCharacter('chisato'); const entry = { id, name, image, initialState: template?.initialState }; existing.push(entry); saveCustomCharacters(existing); try { SW.registerCharacter(id, { image, initialState: template.initialState, }); widgetInstance?.setCharacter(id); currentCharId = id; GM_setValue(STORAGE.currentCharacter, id); GM_notification({ title: '石蒜桌面宠物', text: `已添加并切换到「${name}」`, timeout: 2500 }); } catch (err) { GM_notification({ title: '石蒜桌面宠物', text: `添加失败: ${err.message}`, timeout: 4000 }); } overlay.querySelector('#sakana-clear-form').click(); renderCharList(SW); fillSettingsForm(overlay, SW); }); fillSettingsForm(overlay, SW); renderCharList(SW); switchTab(overlay, initialTab); overlay.classList.add('open'); } function renderCharList(SW) { const listEl = document.getElementById('sakana-char-list'); if (!listEl) return; const current = currentCharId || GM_getValue(STORAGE.currentCharacter, cfg.defaultCharacter); const items = listCatalogCharacters(SW); listEl.innerHTML = items .map( (item) => `
  • ${escapeHtml(item.name)}
    ${escapeHtml(item.id)}
    ${item.builtin ? '内置' : '自定义'} ${item.builtin ? '' : ''}
  • `, ) .join(''); listEl.querySelectorAll('button').forEach((btn) => { btn.addEventListener('click', () => { const li = btn.closest('li'); const id = li?.dataset.id; if (!id) return; if (btn.dataset.action === 'use') { try { widgetInstance?.setCharacter(id); currentCharId = id; GM_setValue(STORAGE.currentCharacter, id); renderCharList(SW); } catch (err) { GM_notification({ title: '石蒜桌面宠物', text: err.message, timeout: 3000 }); } } else if (btn.dataset.action === 'delete') { if (!confirm(`确定删除自定义角色「${id}」?删除后需刷新页面完全生效。`)) return; const next = getCustomCharacters().filter((c) => c.id !== id); saveCustomCharacters(next); if (currentCharId === id) { GM_setValue(STORAGE.currentCharacter, 'chisato'); } GM_notification({ title: '石蒜桌面宠物', text: '已删除,正在刷新页面…', timeout: 2000, }); setTimeout(() => location.reload(), 400); } }); }); } function escapeHtml(str) { return String(str) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"'); } function registerMenus(SW) { GM_registerMenuCommand('⚙️ 设置和角色管理', () => openPanel(SW, 'characters')); GM_registerMenuCommand('唤回宠物', () => { if (!widgetInstance) { GM_notification({ title: '石蒜桌面宠物', text: '宠物未启用或未加载', timeout: 2500 }); return; } revivePet(); }); GM_registerMenuCommand('隐藏宠物', () => { if (!widgetInstance) { GM_notification({ title: '石蒜桌面宠物', text: '宠物未启用或未加载', timeout: 2500 }); return; } hidePet(); }); } SakanaWidgetClass = resolveSakanaWidget(); if (!SakanaWidgetClass) { console.error('[石蒜桌面宠物] @require 未提供 SakanaWidget'); GM_notification({ title: '石蒜桌面宠物', text: '库未加载,请检查网络后重新安装/更新脚本', timeout: 5000, }); return; } if (cfg.enabled) { mountWidget(SakanaWidgetClass); } registerMenus(SakanaWidgetClass); const scriptVersion = (typeof GM_info !== 'undefined' && GM_info?.script?.version) || '?.?.?'; console.info(`[石蒜桌面宠物] 好了好了,人来了 v${scriptVersion}`); })();