// ==UserScript==
// @name 🚫🔞 防沉迷终结者 🕺🎮
// @description [❤️支持全面] 支持 4399 (部分网页游戏到点不踢),7k7k,17yy,37,9377,游戏狗,u7u9,7724,07073,4366 [😱别怕大人] 大人来了就按"大人键" [🕶 手动破解] 防沉迷破解不成功? 对着防沉迷弹窗按快捷键 [😵💫万能规则] 误杀率高, 几乎没卵用的功能
// @namespace https://fcmsb250.github.io/
// @version 5.0.0
// @icon https://dsy4567.github.io/logo.svg
// @author dsy4567 https://greasyfork.org/zh-CN/users/822325 | https://github.com/dsy4567
// @run-at document-start
// @license GPL-3.0
// @compatible firefox firefox + tampermonkey 测试通过
// @compatible chrome chrome/360安全浏览器 + tampermonkey 测试通过
// @compatible edge edge + tampermonkey 测试通过
// @match *://*.17yy.com/*
// @match *://*.4399.com/*
// @match *://*.7k7k.com/*
// @match *://*.aiwan4399.com/*
// @match *://*.iwan4399.com/*
// @match *://*.zxwyouxi.com/*
// @match *://*.5054399.net/*
// @match *://*.5054399.com/*
// @match *://h5.07073.com/*
// @match *://*.7724.com/*
// @match *://*.u7u9.com/*
// @match *://*.9377.com/*
// @match *://*.37.com/*
// @match *://*.4366.com/*
// @grant GM_addStyle
// @grant GM_addValueChangeListener
// @grant GM_getValue
// @grant GM_info
// @grant GM_notification
// @grant GM_openInTab
// @grant GM_registerMenuCommand
// @grant GM_setValue
// @grant GM_unregisterMenuCommand
// @grant unsafeWindow
// @homepageURL https://fcmsb250.github.io/
// @supportURL https://github.com/dsy4567/Fucking-Anti-Indulgence/
// ==/UserScript==
"use strict";
let D = new Date();
function setValue(value, defaultValue, callback) {
if (GM_getValue(value, defaultValue) == "1") {
GM_setValue(value, "0");
} else if (GM_getValue(value, defaultValue) == "0") {
GM_setValue(value, "1");
} else {
GM_setValue(value, defaultValue);
}
if (callback) {
callback();
}
}
function initStorage(value, defaultValue, callback) {
if (GM_getValue(value, null) == null) {
GM_setValue(value, defaultValue);
}
if (callback) {
callback();
}
}
function checkValue(value) {
if (GM_getValue(value) == "1") {
return "✅已启用 ";
} else if (GM_getValue(value) == "0") {
return "❌已停用 ";
} else {
return "⚠️配置错误 ";
}
}
/** @returns {HTMLCanvasElement | HTMLScriptElement | HTMLIFrameElement} */
function qs(selector) {
return document.querySelector(selector);
}
/** @returns {(HTMLCanvasElement | HTMLScriptElement | HTMLIFrameElement)[]} */
function qsa(selector) {
return document.querySelectorAll(selector);
}
initStorage("安装日期", String(Math.floor(D.getTime() / 1000 / 60 / 60 / 24)));
initStorage("停用快捷键", "0");
initStorage("开发环境", "0");
var daysUsed =
Math.ceil(D.getTime() / 1000 / 60 / 60 / 24) -
Number(GM_getValue("安装日期"));
let pageLoaded = false;
let popupStyle = { remove: () => {} };
let lastMenuId = 0;
let realAddress_17yy = "";
/** @type {Function} */
let _playLoading;
let devConfig = {};
let succeeded = false;
let gamePlatform = "";
const locationHref = location.href;
const host = location.host;
const pathname = location.pathname;
const U = new URL(location.href);
if (GM_getValue("开发环境") == "1") {
devConfig.EnableConsoleOutput = 1;
devConfig.EnableDebugging = 1;
// devConfig.DisableAutomaticCracking = 1;
devConfig.exportVariables = 1;
} else {
devConfig.EnableConsoleOutput = 0;
devConfig.EnableDebugging = 0;
devConfig.DisableAutomaticCracking = 0;
devConfig.exportVariables = 0;
}
(() => {
const a = host.split(".");
for (let i = 0; i < a.length; i++) {
const ss = a[i];
if (ss === "com" || ss === "cn") {
gamePlatform = a[i - 1];
break;
}
}
})();
const /** @type {Record<string, (() => void)[]>} */ rules = {
4399: [
// 使防沉迷尝试读取某些全局变量时报错
// https://www.4399.com/flash/223745_2.htm
() => {
Object.defineProperty(unsafeWindow, "smevent", {
value: null,
writable: false,
});
Object.defineProperty(unsafeWindow, "PageWebApiSdk", {
value: null,
writable: false,
});
Object.defineProperty(unsafeWindow, "getBizid", {
value: null,
writable: false,
});
},
// https://h.4399.com/zzy/236117.htm
() => {
if (
host !== "h.4399.com" ||
(host === "h.4399.com" && !pathname.includes("/play/"))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["4399 手机端防沉迷"]);
const url = unsafeWindow.webServer + unsafeWindow.gameiframe;
if (url && unsafeWindow.webServer && unsafeWindow.gameiframe) {
succeeded = 1;
location.href = url;
}
},
// https://www.4399.com/flash/209443.htm
() => {
if (
host !== "h.api.4399.com" ||
(host === "h.api.4399.com" && pathname !== "/g.php")
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["4399 h5页游防沉迷(h.api.4399.com/g.php)"]);
const gameId = U.searchParams.get("gameId");
if (!gameId) return;
fetch("https://h.api.4399.com/intermodal/user/grant2", {
method: "POST",
body: `gameId=${gameId}&authType=cookie&cookieValue=${getMiddleString(
"Pauth=",
";",
document.cookie
)}`,
headers: {
"Content-Type":
"application/x-www-form-urlencoded; charset=UTF-8",
},
})
.then(res => res.json())
.then(resp => {
log([resp]);
if (resp.data.game.gameUrl)
location.href = resp.data.game.gameUrl;
else throw new Error("[防沉迷终结者] gameUrl 为空");
})
.catch(err => console.error(err));
succeeded = 1;
},
],
// 4399 在线玩
zxwyouxi: [
// https://www.zxwyouxi.com/g/100057159
() => {
if (
host !== "www.zxwyouxi.com" ||
(host === "www.zxwyouxi.com" && !pathname.startsWith("/g/"))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["4399 h5页游防沉迷(www.zxwyouxi.com/g/)"]);
fetch("https://h.api.4399.com/intermodal/user/grant2", {
method: "POST",
body: `gameId=${getMiddleString(
"/g/",
"",
locationHref,
"3"
)}&authType=token&userId=${getMiddleString(
"4399_HTML5_PREVIEW_USERID=",
";",
document.cookie
)}&accessToken=${getMiddleString(
"HTML5_ACCESS_TOKEN=",
";",
document.cookie
)}`,
headers: {
"Content-Type":
"application/x-www-form-urlencoded; charset=UTF-8",
},
})
.then(res => res.json())
.then(resp => {
log([resp]);
if (resp.data.game.gameUrl)
location.href = resp.data.game.gameUrl;
else throw new Error("[防沉迷终结者] gameUrl 为空");
})
.catch(err => console.error(err));
succeeded = 1;
},
],
"7k7k": [
// http://www.7k7k.com/swf/205652.htm
() => {
if (!unsafeWindow.play22) return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["7k7k防沉迷"]);
unsafeWindow.play22.playLoading();
if (!_playLoading) {
_playLoading = unsafeWindow.play22.playLoading;
}
unsafeWindow.play22.playLoading = () => {}; // 防止重复调用
succeeded = 1;
},
// http://m.7k7k.com/flash/205652.htm
() => {
if (
host !== "m.7k7k.com" ||
(host === "m.7k7k.com" &&
!pathname.includes("/flash/") &&
host === "m.7k7k.com" &&
!pathname.includes("/swf/"))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["7k7k手机端防沉迷"]);
unsafeWindow.open = null;
const f = () => {
removeListeners("div.gameInfo_begin.jsbegin");
qs("div.gameInfo_begin.jsbegin").addEventListener(
"click",
() =>
fetch(unsafeWindow.gameInfo.gameUrl)
.then(res => res.text())
.then(html => {
location.href = getMiddleString(
'gameUrl: "',
'",',
html,
"1"
);
})
);
};
pageLoaded ? f() : addEventListener("DOMContentLoaded", f);
succeeded = 1;
},
// http://h5.7k7k.com/mb/mb2/5b5dd7da8ad23b748f9ea32a7a3cedfa.html?gid=f5c4dbf7fb41d89d76a333332f33f853&tid=94606&qs=1
() => {
if (
host !== "m.7k7k.com" ||
(host === "m.7k7k.com" &&
!pathname.includes("/web/H5GAMES.html"))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["7k7k h5页游防沉迷"]);
fetch(
`//h5.7k7k.com/api_redirect/game/start/?client=0&account=${getMiddleString(
"userid=",
";",
document.cookie,
"2"
)}&appkey=${getMiddleString(
"gid=",
"&",
locationHref,
"2"
)}&uid=${getMiddleString(
"userid=",
";",
document.cookie,
"2"
)}&tid=${getMiddleString("tid=", "&", locationHref, "2")}`
)
.then(res => res.json())
.then(json => {
location.href = json.url;
});
succeeded = 1;
},
() => {
if (
!host.includes("h5.7k7k.com") ||
(host.includes("h5.7k7k.com") &&
!pathname.includes("/game/"))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["7k7k h5页游(手机端)防沉迷"]);
fetch(
`//h5.7k7k.com/api_redirect/game/start/?client=0&account=${getMiddleString(
"userid=",
";",
document.cookie,
"2"
)}&appkey=${unsafeWindow.gid[0]}&uid=${getMiddleString(
"userid=",
";",
document.cookie,
"2"
)}&tid=${unsafeWindow.tid}`
)
.then(res => res.json())
.then(json => {
location.href = json.url;
});
succeeded = 1;
},
],
"17yy": [
// https://www.17yy.com/f/play/246085.html
// https://www.17yy.com/f/play/246568.html
() => {
if (
host !== "www.17yy.com" ||
(host === "www.17yy.com" && !pathname.startsWith("/f/play"))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["17yy防沉迷"]);
try {
if (qs("#flashgame").src === realAddress_17yy) return;
} catch (e) {}
try {
if (qs("#flash_frame").src === realAddress_17yy) return;
} catch (e) {}
fetch("//www.17yy.com/e/payapi/vip_ajax.php", {
method: "POST",
body: `action=getStatus&id=${getMiddleString(
"/f/play/",
".html",
locationHref,
"3"
)}`,
headers: {
"Content-Type":
"application/x-www-form-urlencoded; charset=UTF-8",
},
})
.then(res => res.json())
.then(resp => {
try {
qs("#flashgame").src = realAddress_17yy =
"//" +
unsafeWindow.server +
"/" +
unsafeWindow.classes +
"/" +
unsafeWindow.date +
"/" +
resp.data.game_path;
} catch (e) {}
try {
qs("#flash_frame").src = realAddress_17yy =
"//" +
unsafeWindow.server +
"/" +
unsafeWindow.classes +
"/" +
unsafeWindow.date +
"/" +
resp.data.game_path;
} catch (e) {}
});
succeeded = 1;
},
],
7724: [
// https://www.7724.com/XuanCaiTuXing/
() => {
if (
host !== "i.7724.com" ||
(host === "i.7724.com" &&
!locationHref.includes("/user/danjilogin?url="))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["7724防沉迷"]);
let url = getMiddleString(
"danjilogin?url=",
undefined,
locationHref,
"1"
);
location.href = url;
succeeded = 1;
},
],
4366: [
// http://wvw.4366.com/game_login.php?game=bscq&server=new
() => {
if (
!host.includes("wvw.4366.com") ||
(host.includes("wvw.4366.com") &&
!pathname.includes("/game_login.php"))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["4366防沉迷"]);
fetch(locationHref)
.then(res => res.text())
.then(html => {
let url = getMiddleString(
'align="left" id="iframe" src="',
'" name="mainFrame" scrolling="auto"',
html,
"1"
);
location.href = url;
});
succeeded = 1;
},
],
37: [
// https://game.37.com/server_list_901.html
() => {
if (
!host.includes("game.37.com") ||
(host.includes("game.37.com") &&
!pathname.includes("/play.php"))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["37防沉迷"]);
fetch(locationHref)
.then(res => res.text())
.then(html => {
let url = getMiddleString(
'src="//gameapp.37.com/controller/enter_game.php',
'" id="mainFrame"',
html,
"1",
"//gameapp.37.com/controller/enter_game.php"
);
location.href = url;
});
succeeded = 1;
},
],
9377: [
// http://www.9377.com/bscq/
() => {
if (
!host.includes("wvw.9377.com") ||
(host.includes("wvw.9377.com") &&
!pathname.includes("/game_login.php"))
)
return;
if (devConfig.EnableDebugging) {
debugger;
}
log(["9377防沉迷"]);
fetch(locationHref)
.then(res => res.text())
.then(html => {
let url = getMiddleString(
'id="iframe" src="',
'" name="mainFrame" scrolling="auto"',
html,
"1"
);
location.href = url;
});
succeeded = 1;
},
],
};
const blackList = [
"#addiv",
"#anti-indulge",
"#anti-indulge-prompt",
"#Anti_mask",
"#Anti_open",
"#app > div > div.cover.splash",
"#chCoverDiv",
"#codepop6",
"#cover",
"#div_dialog",
"#easyDialogBox",
"#fcmIframe",
"#Guide",
"#loginCertify",
"#messageBox",
"#overlay",
"#page_wallpaper > div.xiaowei.xiaowei-orange > div.xw-left > div.xw-game > div.xw-top > div > div",
"#pop2",
"#pusher",
"#shadow",
"#swfdiv > div.box",
"#tc100",
"#yx_log",
".codegs",
".cmMask",
".fixedModal",
".mask",
".play_load",
".popup-c",
".realName",
".sdkDialog",
".toolDialog",
".ui-forbidden",
".webtipss",
"body > div.show_box.popup_bg",
"div[style*='z-index: 99999']",
];
/**
* 为某个字符串获取两个字符串中间的字符串(不包括那两个字符串)
* @param {String} begin
* @param {String} end (可以是空字符串)
* @param {String} target
* @param {String | undefined} type "1": 网址, "2": 字母 + 数字, "3": 数字 (可选)
* @param {String | undefined} append 在匹配到字符串, 判断字符串类型之前, 给匹配到的字符串前面追加指定的字符串 (可选)
* @returns {String}
*/
function getMiddleString(begin, end, target, type, append) {
target = target.substring(target.indexOf(begin) + begin.length);
if (end) {
target = decodeURI(target.substring(0, target.indexOf(end)));
}
if (append) {
target = append + target;
}
switch (type) {
case "1":
if (!(/^https?:\/\//gi.test(target) || target.startsWith("//"))) {
throw new Error("[防沉迷终结者] 不正确的字符串类型");
}
break;
case "2":
if (!/^[0-9a-zA-Z]*$/g.test(target)) {
throw new Error("[防沉迷终结者] 不正确的字符串类型");
}
break;
case "3":
if (isNaN(Number(target))) {
throw new Error("[防沉迷终结者] 不正确的字符串类型");
}
break;
default:
break;
}
return target;
}
function removeListeners(selector) {
qsa(selector).forEach(oldElement => {
const newElement = oldElement.cloneNode(true);
oldElement.parentNode.replaceChild(newElement, oldElement);
});
}
function capitalizeFirstLetter(str) {
str = str[0].toUpperCase() + str.substring(1, str.length);
return str;
}
/** @param {any[]} data */
function log(data) {
if (devConfig.EnableConsoleOutput)
console.log("[防沉迷终结者]", ...data, locationHref);
}
function useGeneralRules() {
const idOrClassNameOfGame = [
"flash",
"game",
"play",
"youxi",
"swf",
"flash",
];
const idOrClassNameOfAnti = [
"anti",
"fcm",
"verify",
"mask",
"certify",
"dialog",
"popup",
"login",
"cover",
];
let temp = [];
let style = "";
idOrClassNameOfGame.forEach(str => {
temp.push(
"iframe[id*='" + str + "'],",
"iframe[class*='" + str + "'],",
"iframe[id*='" + str.toUpperCase() + "'],",
"iframe[class*='" + str.toUpperCase() + "'],",
"iframe[id*='" + capitalizeFirstLetter(str) + "'],",
"iframe[class*='" + capitalizeFirstLetter(str) + "'],"
);
});
temp.forEach(str => {
style += str;
});
style += `#qwqawaqaq
{
display: block !important;
left: 0 !important;
top: 0 !important;
position: absolute !important;
z-index: 999999 !important;
}`;
temp = [];
idOrClassNameOfAnti.forEach(str => {
temp.push(
"[id*='" + str + "'],",
"[class*='" + str + "'],",
"[id*='" + str.toUpperCase() + "'],",
"[class*='" + str.toUpperCase() + "'],",
"[id*='" + capitalizeFirstLetter(str) + "'],",
"[class*='" + capitalizeFirstLetter(str) + "'],"
);
});
temp.forEach(str => {
style += str;
});
style += `#qwqawaqaq
{
display: none !important;
min-width: 0 !important;
width: 0 !important;
max-width: 0 !important;
min-height: 0 !important;
height: 0 !important;
max-height: 0 !important;
z-index: -999 !important;
font-size: 0 !important;
overflow: hidden !important;
}`;
temp = [];
GM_addStyle(style);
}
function registerMenuCommand() {
const menus = [
[
"⚠️沉迷于游戏不利于身心健康,请合理安排游戏时间,适度游戏⚠️",
undefined,
undefined,
],
["❤️您已尽情欢乐" + daysUsed + "天", undefined, undefined],
[
"👉再次破解(alt + 鼠标中键)",
() => {
succeeded = 0;
if (_playLoading) {
unsafeWindow.play22.playLoading = _playLoading;
}
crackAnti();
removeMask();
},
undefined,
],
[
"👉大人来了(shift + 鼠标中键)(解除请使用再次破解)",
() => {
hideGame();
},
undefined,
],
[
"👉手动破解(鼠标指向防沉迷弹窗, 然后按 shift + alt + 鼠标右键)",
() => {
alert("请将鼠标指向防沉迷弹窗, 然后按 shift + alt + 鼠标右键");
},
undefined,
],
[
"👉万能规则(不保证实用性)",
() => {
GM_setValue("使用万能规则", Math.random());
},
undefined,
],
[
checkValue("停用快捷键") + " 停用快捷键",
() => {
setValue("停用快捷键", "0", () => {
registerMenuCommand();
});
},
undefined,
],
[
"👍 给个好评/📝 反馈问题",
() => {
GM_openInTab(
"https://greasyfork.org/zh-CN/scripts/437233/feedback"
);
},
undefined,
],
[
"⛔解决访问错误",
() => {
location.href = location.href;
},
undefined,
],
[
"⛔7k7k强制登录",
() => {
location.href =
"http://www.7k7k.com/swf/204220.htm#fai-doLogin";
},
undefined,
],
];
lastMenuId = lastMenuId || 0;
// TM
for (
let menuId = lastMenuId - menus.length * 2;
menuId < lastMenuId + menus.length * 2;
menuId++
) {
GM_unregisterMenuCommand(menuId);
}
// VM
menus.forEach(menu => {
GM_unregisterMenuCommand(menu[0]);
});
GM_unregisterMenuCommand("✅已启用 停用快捷键");
GM_unregisterMenuCommand("❌已停用 停用快捷键");
GM_unregisterMenuCommand("⚠️配置错误 停用快捷键");
menus.forEach(menu => {
const displayName = menu[0];
const func = menu[1];
const accessKey = menu[2];
lastMenuId = GM_registerMenuCommand(displayName, func, accessKey);
});
}
function hideGame() {
log(["大人来了"]);
try {
popupStyle.remove();
log(["已去除样式"]);
} catch (err) {}
popupStyle = GM_addStyle(
'*{margin:0;padding:0}ul{list-style:none;}.fl{float:left;}.fr{float:right;}.mysdkDialog{position:absolute;left:50%;top:50vh;margin:-210px 0 0 -309px;width:618px;z-index:20020}.mysdkDialog .myfcmdialog{color:black;position:absolute;left:0;top:0;width:620px;padding-bottom:30px;font-family:"microsoft yahei";font-size:14px;background:#fff;border-radius:8px;}.mysdkDialog .myfcmdialog .close-btn{position:absolute;right:0;top:0;width:40px;height:40px;background-color:red;line-height:40px;cursor:pointer;display:none}.mysdkDialog .myfcmdialog .title{line-height:30px;text-align:center;font-size:22px;font-weight:700;padding:25px 0 0;margin:0 40px;color:#454545;border:0;height:auto;float:none;width:auto;text-indent:0;}.mysdkDialog .myfcmdialog .stitle{text-align:left;line-height:1.6;margin:15px 40px 0;font-size:16px;}.mysdkDialog .myfcmdialog .stitle span{color:#ffa92d;}.mysdkDialog .myfcmdialog .mod-tip{margin:20px 40px 0;background:#F0F0F0;padding:12px 15px;border-radius:4px;color:#333;text-align:left}.mysdkDialog .myfcmdialog .tip-title{font-size:16px;font-weight:400;}.mysdkDialog .myfcmdialog .tip-info{margin-top:5px;line-height:26px;font-size:14px;}.mysdkDialog .myfcmdialog .tip-info li{font-size:16px;line-height:26px}.mysdkDialog .myfcmdialog .tip-info a{color:#FAA61B;text-decoration:underline;margin:0 4px;cursor:pointer;}.mysdkDialog .myfcmdialog .mod-btn{text-align:center;font-size:0;line-height:0;margin:25px 40px 0;}.mysdkDialog .myfcmdialog .mod-btn .btn-fcmprimary{display:inline-block;width:140px;height:38px;line-height:38px;border:1px solid #69bb01;color:#69bb01;font-size:14px;margin:0 15px;border-radius:5px;cursor:pointer;}.mysdkDialog .myfcmdialog .mod-btn .fr,.mysdkDialog .myfcmdialog .mod-btn .fl{width:250px;margin:0;}.mysdkDialog .myfcmdialog .mod-btn .btn-fcmprimary:hover{-webkit-filter:brightness(1);filter:brightness(1)}.mysdkDialog .myfcmdialog .mod-btn .btn-identity{background-color:#69bb01;color:#f8ffef}.fcmIframe{position:absolute;left:50%;top:270px;margin:0 0 0 -309px;width:618px;height:354px;z-index:2019;border:0 none;background-color:#000}.countDown{background:#eee;border-radius:3px;padding:10px;text-align:center;margin:20px 40px 0;font-size:16px;color:#666}.countDown .txt1{font-size:16px;height:28px;line-height:28px;color:#717171;}.countDown .txt2{height:40px;line-height:40px;font-size:26px;font-weight:bold;color:#54ba3d;}.mycmMask{display:none;width:100%;position:absolute;left:0;top:0;background:rgb(0,0,0);}'
);
const popup = document.createElement("div");
popup.className = "mysdkDialog";
popup.innerHTML +=
'<div class="myfcmdialog"><span class="close-btn">关闭</span><h2 class="title">未成年限制登录提醒</h2><div class="stitle">您使用的是未成年账号,仅周五、周六、周日及法定节假日晚上8:00-9:00可以游戏!当前已被限制!</div><div class="countDown" style=""><p class="txt1">下次可玩游戏时段</p><p class="txt2">本周五晚上8:00-9:00</p></div><div class="countDown" style="display:none">当前已限制游戏</div><div class="mod-tip" style=""><h3 class="tip-title">温馨提示:</h3><ul class="tip-info">1.如果身份信息有误,请点击<a href="https://u.4399.com/profile/realname-bizId-1199006632.html" target="_blank">》》申请修改《《</a><br>2.如果您身份信息已经变动,可点击<a target="_self" href="#">》》刷新身份《《</a></ul></div><div class="mod-btn" style=""><span class="btn-fcmprimary">更换账号</span><span class="btn-fcmprimary">确定</span></div></div>';
document.body.appendChild(popup);
const mask = document.createElement("div");
mask.className = "mycmMask";
mask.style.cssText =
"height: " +
document.documentElement.offsetHeight +
"px; z-index: 9999; display: block";
mask.innerHTML = "";
document.body.appendChild(mask);
}
function crackAnti() {
let /** @type {(() => void)[]} */ rule;
Object.keys(rules).forEach(ruleName => {
if (gamePlatform.includes(ruleName)) rule = rules[ruleName];
});
if (succeeded || !rule) {
return log(["破解被取消或未匹配规则"]);
}
const begin = new Date().getTime();
for (const func of rule) {
try {
func();
if (succeeded) break;
} catch (e) {
console.error(e);
}
}
log(["破解结束, 用时" + (new Date().getTime() - begin) + "ms"]);
}
function removeMask() {
try {
for (let i = 0; i < blackList.length; i++) {
const element = blackList[i];
qsa(element)?.forEach(el => {
el.remove();
log(["-破解成功- " + element]);
});
}
[".mycmMask", ".myfcmdialog", ".mysdkDialog"].forEach(element => {
qsa(element)?.forEach(el => {
el.remove();
log(["-解除大人来了成功- " + element]);
});
});
try {
popupStyle.remove();
log(["已去除样式"]);
} catch (err) {}
} catch (err) {
console.error(err);
}
}
// 添加加样式表
if (!devConfig.DisableAutomaticCracking) {
let css = "";
for (let i = 0; i < blackList.length; i++) {
const element = blackList[i];
css += element + ",";
}
css += `#qwqawaqaq
{
display: none !important;
min-width: 0 !important;
width: 0 !important;
max-width: 0 !important;
min-height: 0 !important;
height: 0 !important;
max-height: 0 !important;
z-index: -999 !important;
font-size: 0 !important;
overflow: hidden !important;
}`;
GM_addStyle(css);
log(["添加样式表成功"]);
}
if (devConfig.exportVariables) {
unsafeWindow.exportVariables = () => {
// GM_*
unsafeWindow._GM_addStyle = GM_addStyle;
unsafeWindow._GM_getValue = GM_getValue;
unsafeWindow._GM_info = GM_info;
unsafeWindow._GM_notification = GM_notification;
unsafeWindow._GM_openInTab = GM_openInTab;
unsafeWindow._GM_registerMenuCommand = GM_registerMenuCommand;
unsafeWindow._GM_setValue = GM_setValue;
unsafeWindow._GM_unregisterMenuCommand = GM_unregisterMenuCommand;
// 普通变量
unsafeWindow._D = D;
unsafeWindow._lastMenuId = lastMenuId;
unsafeWindow._succeeded = succeeded;
unsafeWindow._devConfig = devConfig;
unsafeWindow._blackList = blackList;
// 自定函数
unsafeWindow._setValue = setValue;
unsafeWindow._initStorage = initStorage;
unsafeWindow._checkValue = checkValue;
unsafeWindow._registerMenuCommand = registerMenuCommand;
unsafeWindow._hideGame = hideGame;
unsafeWindow._crackAnti = crackAnti;
unsafeWindow._removeMask = removeMask;
unsafeWindow._popupStyle = popupStyle;
};
unsafeWindow.exportVariables();
}
// 一些不着急执行的代码
setTimeout(() => {
GM_addValueChangeListener("使用万能规则", () => {
useGeneralRules();
});
// 快捷键
document.addEventListener(
"mousedown",
e => {
if (GM_getValue("停用快捷键") == "0") {
if (e.button == 1 && e.shiftKey && !e.altKey) {
hideGame();
}
if (e.button == 2 && e.shiftKey && e.altKey) {
let el = document.elementFromPoint(e.x, e.y);
log([
"-手动破解成功- ." +
el.className +
" #" +
el.id +
" <" +
el.tagName +
">",
]);
el.style.display = "none";
}
if (e.button == 1 && e.altKey && !e.shiftKey) {
succeeded = 0;
crackAnti();
removeMask();
}
}
},
true
);
if (location.host === "www.7k7k.com") {
try {
document.querySelector("div.login_no").title =
"✨防沉迷终结者支持7k7k强制登录, 请移步至脚本菜单";
} catch (e) {}
if (location.href.includes("fai-doLogin"))
document
.querySelector("div.login_no > div.h_login.login_btn > span")
.click();
}
if (qs("script[src*='chpenmljpdpkebnohfbbdpfelabcnlnp']")) {
GM_registerMenuCommand(
"⚠️您已经安装了防沉迷终结者浏览器扩展, 不推荐二者同时使用"
);
}
registerMenuCommand();
});
addEventListener("DOMContentLoaded", () => {
pageLoaded = true;
setTimeout(() => {
qsa("canvas").forEach(element => {
element.addEventListener(
"mousedown",
e => {
if (GM_getValue("停用快捷键") == "0") {
if (e.button == 1 && e.shiftKey) {
hideGame();
}
if (e.button == 1 && e.altKey) {
succeeded = 0;
crackAnti();
removeMask();
}
}
},
true
);
});
}, 5000);
});
addEventListener("load", () => {
!devConfig.DisableAutomaticCracking && crackAnti();
});
!devConfig.DisableAutomaticCracking && crackAnti();
log(["脚本执行完毕, 用时" + (new Date().getTime() - D.getTime()) + "ms "]);