您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
방금 먹은 크래커 양을 🍪로 표시하며, 중복 감지를 방지하고 스타일을 강조합니다.
// ==UserScript== // @name 크래커 차감 팝업 표시기🍪 // @namespace http://tampermonkey.net/ // @version 1.4 // @description 방금 먹은 크래커 양을 🍪로 표시하며, 중복 감지를 방지하고 스타일을 강조합니다. // @match https://crack.wrtn.ai/* // @grant GM_addStyle // @license MIT // ==/UserScript== (function () { 'use strict'; console.log("[Cracker Delta Popup] 스크립트 시작됨"); const LAST_KEY = 'wrtnCrackerLastValue'; const POS_LEFT_KEY = 'wrtnCrackerDeltaPopup_left'; const POS_TOP_KEY = 'wrtnCrackerDeltaPopup_top'; const popup = document.createElement('div'); popup.id = 'crackerDeltaPopup'; popup.innerHTML = ` <div style="font-weight:bold; margin-bottom:4px;">[방금 먹은 🍪양]</div> <div id="crackerDeltaAmount">-</div> `; document.body.appendChild(popup); GM_addStyle(` #crackerDeltaPopup { position: fixed; background: #fff3e0; color: #bf360c; border: 1px solid #ffcc80; border-radius: 10px; padding: 10px 14px; font-size: 14px; z-index: 99999; font-weight: bold; cursor: move; box-shadow: 0 4px 8px rgba(0,0,0,0.2); user-select: none; max-width: 220px; } #crackerDeltaAmount { font-size: 21px; /* 1.5배 크기 */ color: red; } `); let isDragging = false; let offsetX = 0, offsetY = 0; let lastShown = 0; // ✅ 이전에 표시한 값 저장용 popup.addEventListener('mousedown', (e) => { if (e.button !== 0) return; isDragging = true; const rect = popup.getBoundingClientRect(); offsetX = e.clientX - rect.left; offsetY = e.clientY - rect.top; document.addEventListener('mousemove', onMouseMove); document.addEventListener('mouseup', onMouseUp); }); function onMouseMove(e) { if (!isDragging) return; let left = e.clientX - offsetX; let top = e.clientY - offsetY; const maxW = window.innerWidth - popup.offsetWidth; const maxH = window.innerHeight - popup.offsetHeight; popup.style.left = Math.min(Math.max(0, left), maxW) + 'px'; popup.style.top = Math.min(Math.max(0, top), maxH) + 'px'; } function onMouseUp() { if (!isDragging) return; isDragging = false; document.removeEventListener('mousemove', onMouseMove); document.removeEventListener('mouseup', onMouseUp); localStorage.setItem(POS_LEFT_KEY, popup.offsetLeft); localStorage.setItem(POS_TOP_KEY, popup.offsetTop); } function restorePopupPosition() { const savedLeft = localStorage.getItem(POS_LEFT_KEY); const savedTop = localStorage.getItem(POS_TOP_KEY); if (savedLeft && savedTop) { popup.style.left = savedLeft + 'px'; popup.style.top = savedTop + 'px'; } else { popup.style.left = '20px'; popup.style.top = '200px'; } } function getCrackerCount() { const allP = document.querySelectorAll('p[color="text_primary"]'); for (const p of allP) { const text = p.textContent?.trim(); if (text && /^\d+[,]?\d*$/.test(text)) { return parseInt(text.replace(/[^0-9]/g, ''), 10); } } return null; } function updateDelta() { const now = getCrackerCount(); if (now === null) return; const prev = parseInt(localStorage.getItem(LAST_KEY) || now.toString(), 10); const diff = prev - now; if (now < prev && diff !== lastShown) { document.getElementById('crackerDeltaAmount').textContent = `🍪${diff}개`; lastShown = diff; } if (now > prev) { // 크래커가 충전되었거나 복구된 경우 초기화 lastShown = 0; } localStorage.setItem(LAST_KEY, now.toString()); } restorePopupPosition(); setInterval(updateDelta, 1000); })();