팁과 노하우 게시판

전체보기

모바일 상단 메뉴

본문 페이지

[일반] 메모리 게임 카드 기억해주는 스크립트 (v4.1)

재련
댓글: 82 개
조회: 36405
추천: 56
2025-11-06 21:39:55



한 번이라도 뒤집은 카드를 보여줍니다.
정답을 찾았다면 해당 카드를 흔들어줍니다.


!!!!인게임에서는 안 됩니다!!!!
!!!!크롬으로 이벤트 페이지를 접속했을 때만 가능합니다!!!!

ps. 로그인 미세팁: 로그인된 스토브 런처에서 아무 이벤트 페이지나 누르고 이동하면 해당 웹브라우저가 로그인된 상태가 됩니다

*사용에 의한 불이익은 책임지지 않습니다.



원리
사용자가 카드를 클릭하면 카드를 뒤집는 요청을 서버로 보내게 됩니다.
서버는 방금 클릭한 카드의 이미지가 무엇인지 결과를 보내주는데,
프로그램이 이 요청과 응답을 보고 기록하여 보여줍니다.




등록 방법
1. 아무 북마크를 생성합니다.
(크롬 기준 단축키 ctrl+D)

2. 해당 북마크를 우클릭 - 수정...

3. URL에 아래 글상자 내용을 복사하여 붙여넣기 
(글상자를 2-3번 좌클릭하면 내용이 모두 선택됨)




사용 방법
이벤트 페이지로 이동한 이후, 방금 생성한 북마크를 눌러서 실행하면
우측 하단에 UI가 생성되고 기록을 시작합니다.
(북마크 바가 보이지 않는다면 ctrl+shift+B로 북마크를 보이게 할 수 있음)

북마크 방식이 싫다면 해당 스크립트를 복사해서 개발자 도구 - 콘솔에 붙여넣어도 됩니다.



수정 사항
v2
- 전체적인 UI 크기 확대
- 한 쌍을 찾은 경우 회색 처리
- 모든 판을 완료한 경우 자동 리셋
v2.1
- 회색 처리된 이미지가 초기화되지 않는 문제 수정
v3.0
- 패널 위치 및 크기 조절 기능 추가 (브라우저에 저장됩니다)
v4.0
- 마지막에 클릭한 카드와 동일한 이미지의 카드가 있다면 흔들림으로 알려줍니다.
v4.1
- 흔들림 기능이 일부 브라우저에서 동작하지 않는 문제 수정
- 패널 위치 저장 기능이 동작하지 않던 문제 수정
- 카드 게임 진행 사항이 저장되도록 기능 추가




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="n    @keyframes card-memo-game-shake {n      0%, 100% { transform: translateX(0); }n      20%, 60% { transform: translateX(-5px); }n      40%, 80% { transform: translateX(5px); }n    }n    .card-memo-game-shake {n      animation: card-memo-game-shake 0.4s ease-in-out infinite;n    }n  ",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.")}();}());

모바일 게시판 하단버튼

댓글

새로고침
새로고침

모바일 게시판 하단버튼

지금 뜨는 인벤

더보기+

모바일 게시판 리스트

모바일 게시판 하단버튼

글쓰기

모바일 게시판 페이징

최근 HOT한 콘텐츠

  • 로아
  • 게임
  • IT
  • 유머
  • 연예
AD