|
2025-11-06 21:39
조회: 49,933
추천: 66
메모리 게임 카드 기억해주는 스크립트 (v4.2) 한 번이라도 뒤집은 카드를 보여줍니다. 정답을 찾았다면 해당 카드를 흔들어줍니다. !!!!인게임에서는 안 됩니다!!!! !!!!크롬으로 이벤트 페이지를 접속했을 때만 가능합니다!!!! ps. 로그인 미세팁: 로그인된 스토브 런처에서 아무 이벤트 페이지나 누르고 이동하면 해당 웹브라우저가 로그인된 상태가 됩니다 원리 사용자가 카드를 클릭하면 카드를 뒤집는 요청을 서버로 보내게 됩니다. 서버는 방금 클릭한 카드의 이미지가 무엇인지 결과를 보내주는데, 프로그램이 이 요청과 응답을 보고 기록하여 보여줍니다. 등록 방법 1. 아무 북마크를 생성합니다. (크롬 기준 단축키 ctrl+D) 2. 해당 북마크를 우클릭 - 수정... 3. URL에 아래 글상자 내용을 복사하여 붙여넣기 (글상자를 2-3번 좌클릭하면 내용이 모두 선택됨) ![]() 사용 방법 이벤트 페이지로 이동한 이후, 방금 생성한 북마크를 눌러서 실행하면 우측 하단에 UI가 생성되고 기록을 시작합니다. (북마크 바가 보이지 않는다면 ctrl+shift+B로 북마크를 보이게 할 수 있음) 북마크 방식이 싫다면 해당 스크립트를 복사해서 개발자 도구 - 콘솔에 붙여넣어도 됩니다. 수정 사항 v2 - 전체적인 UI 크기 확대 - 한 쌍을 찾은 경우 회색 처리 - 모든 판을 완료한 경우 자동 리셋 v2.1 - 회색 처리된 이미지가 초기화되지 않는 문제 수정 v3.0 - 패널 위치 및 크기 조절 기능 추가 (브라우저에 저장됩니다) v4.0 - 마지막에 클릭한 카드와 동일한 이미지의 카드가 있다면 흔들림으로 알려줍니다. v4.1 - 흔들림 기능이 일부 브라우저에서 동작하지 않는 문제 수정 - 패널 위치 저장 기능이 동작하지 않던 문제 수정 - 카드 게임 진행 사항이 저장되도록 기능 추가 v4.2 - 흔들림 기능이 동작하지 않는 문제 수정 javascript:(function(){!function(){if(window.__cardMemoInstalled)return void alert("카드 미리보기 스크립트가 이미 설치되어 있습니다.");window.__cardMemoInstalled=!0,window.__cardMemo=window.__cardMemo||{},window.__cardDone=[];const e=localStorage.getItem("__cardMemoResult");if(e)try{const t=JSON.parse(e);window.__cardMemo=t.cardMemo,window.__cardDone=t.cardDone}catch{}const t=document.createElement("div");t.id="card-memo-container",Object.assign(t.style,{position:"fixed",right:"12px",bottom:"12px",zIndex:2147483647,background:"rgba(255,255,255,0.95)",border:"1px solid rgba(0,0,0,0.2)",padding:"8px",borderRadius:"8px",boxShadow:"0 6px 18px rgba(0,0,0,0.15)",fontFamily:"Segoe UI, Roboto, Arial, sans-serif",fontSize:"12px",color:"#111",userSelect:"none"});const n=localStorage.getItem("__cardMemoPanel");let o={left:null,top:null,scale:1};if(n)try{o=JSON.parse(n)}catch{}null!==o.left&&null!==o.top&&(t.style.left=o.left+"px",t.style.top=o.top+"px",t.style.right="auto",t.style.bottom="auto"),1!==o.scale&&(t.style.transform=`scale(${o.scale})`);const a=document.createElement("div");a.style.display="flex",a.style.alignItems="center",a.style.justifyContent="space-between",a.style.marginBottom="6px",a.style.cursor="move";const s=document.createElement("div");s.textContent="카드 메모리 게임",s.style.fontWeight="600",s.style.marginRight="8px";const r=document.createElement("div"),l=document.createElement("button");l.textContent="초기화",l.title="기억한 카드 초기화",Object.assign(l.style,{padding:"4px 6px",fontSize:"11px",cursor:"pointer",marginLeft:"6px"});const d=document.createElement("button");d.textContent="×",d.title="닫기 (UI만 숨김)",Object.assign(d.style,{padding:"2px 6px",fontSize:"14px",cursor:"pointer",marginLeft:"6px"}),r.appendChild(l),r.appendChild(d),a.appendChild(s),a.appendChild(r),t.appendChild(a);const i=document.createElement("div");Object.assign(i.style,{position:"absolute",left:"0",top:"0",width:"12px",height:"12px",cursor:"nwse-resize",background:"rgba(0,0,0,0.2)",borderTopLeftRadius:"8px"}),t.appendChild(i);const c=document.createElement("div");c.id="card-memo-grid",Object.assign(c.style,{display:"grid",gridTemplateColumns:"repeat(6, 63px)",gridTemplateRows:"repeat(3, 84px)",gap:"6px",transition:"transform 0.1s",transformOrigin:"top left"});const m=[];for(let e=0;e<18;e++){const t=document.createElement("div");t.className="card-memo-slot",t.dataset.index=String(e),Object.assign(t.style,{width:"63px",height:"84px",border:"1px dashed rgba(0,0,0,0.15)",borderRadius:"4px",overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center",background:"#fafafa",position:"relative",cursor:"default"});const n=document.createElement("img");n.style.maxWidth="100%",n.style.maxHeight="100%",n.style.display="none",n.alt="",t.appendChild(n),c.appendChild(t),m.push(t)}t.appendChild(c);const p=document.createElement("div");p.textContent="클릭한 카드가 열리면 해당 칸에 이미지가 저장됩니다.",Object.assign(p.style,{marginTop:"6px",fontSize:"11px",color:"rgba(0,0,0,0.6)"}),t.appendChild(p),document.body.appendChild(t),function(){let e=!1,n=0,s=0;a.addEventListener("mousedown",(o=>{e=!0,n=o.clientX-t.offsetLeft,s=o.clientY-t.offsetTop,document.body.style.userSelect="none"})),window.addEventListener("mouseup",(()=>{e&&(e=!1,localStorage.setItem("__cardMemoPanel",JSON.stringify({left:t.offsetLeft,top:t.offsetTop,scale:o.scale}))),document.body.style.userSelect=""})),window.addEventListener("mousemove",(o=>{if(!e)return;const a=o.clientX-n,r=o.clientY-s;t.style.left=a+"px",t.style.top=r+"px",t.style.right="auto",t.style.bottom="auto"}))}(),function(){let e=!1,n=0,a=0,s=o.scale;i.addEventListener("mousedown",(t=>{t.preventDefault(),e=!0,n=t.clientX,a=t.clientY,s=o.scale})),window.addEventListener("mouseup",(()=>{e&&(e=!1,localStorage.setItem("__cardMemoPanel",JSON.stringify({left:t.offsetLeft,top:t.offsetTop,scale:o.scale})))})),window.addEventListener("mousemove",(r=>{if(!e)return;const l=(n-r.clientX+(a-r.clientY))/400;let d=Math.min(Math.max(.5,s+l),3);o.scale=d,t.style.transform=`scale(${d})`}))}(),d.addEventListener("click",(()=>{t.style.display="none"})),l.addEventListener("click",(()=>{confirm("저장된 카드 정보를 모두 삭제하시겠습니까?")&&(window.__cardMemo={},u())}));const f=document.createElement("style");function u(e=void 0){for(let t=0;t<18;t++){const n=window.__cardMemo[t],o=m[t],a=o.querySelector("img");n?(a.src=n,a.style.display="block",o.style.background="#fff",o.style.borderStyle="solid"):(a.src="",a.style.display="none",o.style.background="#fafafa",o.style.borderStyle="dashed");const s=window.__cardDone.includes(t);s?(a.style.filter="grayscale(100%)",a.style.opacity="0.2"):(a.style.removeProperty("filter"),a.style.removeProperty("opacity")),n&&t!=e&&n===window.__cardMemo[e]&&!s?o.classList.add("card-memo-game-shake"):o.classList.remove("card-memo-game-shake")}localStorage.setItem("__cardMemoResult",JSON.stringify({cardMemo:window.__cardMemo,cardDone:window.__cardDone}))}f.textContent=" @keyframes card-memo-game-shake { 0%, 100% { transform: translateX(0); } 20%, 60% { transform: translateX(-5px); } 40%, 80% { transform: translateX(5px); } } .card-memo-game-shake { animation: card-memo-game-shake 0.4s ease-in-out infinite; } ",document.head.appendChild(f),function(){const e=window.XMLHttpRequest;window.XMLHttpRequest=function t(){const n=new e;let o=null,a=null,s=null;const r=n.open;n.open=function(e,t){return a=e,o=t,r.apply(n,arguments)};const l=n.send;return n.send=function(e){return s=e,n.addEventListener("load",(function(){try{if(!o)return;if(new URL(o,location.href).pathname.endsWith("/Promotion/Card/GetCard251105")&&a&&"POST"===a.toUpperCase()){let e=null;if("string"==typeof s){const t=s.match(/(?:^|&)index=([^&]+)/);t&&(e=decodeURIComponent(t[1]))}else(s instanceof FormData||s instanceof URLSearchParams)&&(e=s.get("index"));const t=n.responseText;if(!t)return;const o=JSON.parse(t);if(o){if(null!=o.img){const t=null!=e?Number(e):null;null!==t&&!Number.isNaN(t)&&t>=0&&t<18&&(window.__cardMemo[t]=new URL(o.img,"https://cdn-lostark.game.onstove.com").href)}o.isMatch&&(window.__cardDone=[...window.__cardDone,...o.index]),o.complete&&(window.__cardDone=[],window.__cardMemo={}),u(e)}}}catch(e){console.error(e)}})),l.apply(n,arguments)},t.prototype=e.prototype,n}}(),u(),console.log("Card Memo installed with drag & resize.")}();}());
|






