소녀전선2 보이마스티나 스태커 상자 1863개 1위의 비결

이게 이론상 최고기록이며 이 이상으로 최대 +1개까지 가능하다고 봅니다.

미스없이 플레이하게되면 약 1시간 32분 플레이타임으로 측정하고있습니다.

심지어 이 이벤트는 중국서버는 안하고 글로벌 서버 에서만 열리는 전세계 에서 1등입니다.

https://youtu.be/5pQYujZk2rI

사실 친구 부탁으로 이것좀 해'줘" 해서 했는데 너무나도 고맙게도 인터넷 웹브라우저이며, 웹브라우저가 플래시 게임으로 되어있어서 간단하게 자바스크립트도 쉽게 작성도 할수있었습니다.

대충 코드는 아래와 같습니다.

사용법은 인터넷 도구인(F12)로 콘솔에 치면됩니다.

(() => {

'use strict';

function findGameVm(el) {

if (el.__vue__) {

const vm = el.__vue__;

const dataKeys = Object.keys(vm.$data || {});

// movingBox, stackedBoxes 등 게임 데이터가 있는 Vue 컴포넌트를 찾는다

if (dataKeys.includes('movingBox') && dataKeys.includes('stackedBoxes')) {

return vm;

}

}

for (const child of el.children) {

const found = findGameVm(child);

if (found) return found;

}

return null;

}

const gameVm = findGameVm(document.body);

if (!gameVm) {

console.error('❌ 게임 인스턴스를 찾을 수 없습니다!');

console.error(' → 게임이 시작된 상태에서 이 스크립트를 실행하세요.');

return;

}

console.log('✅ 게임 인스턴스 발견!');

console.log(' 게임 영역:', gameVm.gameWidth, 'x', gameVm.gameHeight);

console.log(' 블록 크기:', gameVm.boxWidth, 'x', gameVm.boxHeight);

console.log(' 블록 속도:', gameVm.boxSpeed);

if (window._autoStackerInterval) {

clearInterval(window._autoStackerInterval);

console.log('🔄 기존 봇을 정리했습니다.');

}

if (window._autoStackerRAF) {

cancelAnimationFrame(window._autoStackerRAF);

}

let dropCount = 0;

let perfectCount = 0;

function autoDrop() {

if (gameVm.gameOver) {

console.log('🏁 게임 종료!');

console.log(` 총 드롭: ${dropCount}회 | Perfect: ${perfectCount}회`);

console.log(` 최종 높이: ${gameVm.currentHeight?.toFixed(2) || '측정 불가'}`);

cancelAnimationFrame(window._autoStackerRAF);

window._autoStackerRAF = null;

return;

}

if (gameVm.isDropping || !gameVm.movingBox || gameVm.movingBox.hasDropped) {

window._autoStackerRAF = requestAnimationFrame(autoDrop);

return;

}

const moving = gameVm.movingBox;

const stacked = gameVm.stackedBoxes;

if (!stacked || stacked.length === 0) {

window._autoStackerRAF = requestAnimationFrame(autoDrop);

return;

}

const targetX = stacked[stacked.length - 1].x;

const currentX = moving.x;

const speed = moving.speed;

const currentDist = Math.abs(currentX - targetX);

const nextX = currentX + speed;

const nextDist = Math.abs(nextX - targetX);

if (currentDist < Math.abs(speed) * 1.2 && currentDist <= nextDist) {

gameVm.dropBox();

dropCount++;

if (currentDist < 2) {

perfectCount++;

console.log(`🎯 Perfect #${perfectCount}! (오차: ${currentDist.toFixed(2)}px) [+5초]`);

} else {

console.log(`📦 드롭 #${dropCount} (오차: ${currentDist.toFixed(2)}px)`);

}

}

window._autoStackerRAF = requestAnimationFrame(autoDrop);

}

window._autoStackerRAF = requestAnimationFrame(autoDrop);

window.stopBot = function () {

if (window._autoStackerRAF) {

cancelAnimationFrame(window._autoStackerRAF);

window._autoStackerRAF = null;

}

console.log('🛑 봇이 중지되었습니다.');

console.log(` 총 드롭: ${dropCount}회 | Perfect: ${perfectCount}회`);

};

console.log('');

console.log('🚀 ===== 보이마스티나 스태커 오토봇 가동! =====');

console.log(' Perfect 판정 시 시간 +5초 → 이론상 무한 플레이 가능');

console.log(' 중지: stopBot() 입력');

console.log('================================================');

})();

콘솔 로직은 무엇인고?

[보고서] 웹 기반 스태커(Stacker) 게임 자동화 매크로 로직 분석

1. 분석 개요

본 로직은 Vue.js 프레임워크 기반으로 제작된 상자 쌓기(Stack) 게임을 완벽한 타이밍에 자동으로 플레이하도록 설계된 자동화 봇(Bot) 스크립트입니다. 화면의 이미지를 인식하는 일반적인 매크로 방식이 아니라, 게임이 구동되는 브라우저의 메모리(Vue 컴포넌트 인스턴스)에 직접 접근하여 데이터를 읽고 제어하는 '메모리 후킹(Memory Hooking)' 방식을 채택하여 압도적인 정확도를 보여줍니다.

2. 주요 작동 프로세스

가. 게임 내부 데이터(Instance) 탐색 및 후킹

* 브라우저의 DOM(문서 객체 모델) 트리를 순회하며 게임 엔진 역할을 하는 특정 Vue 인스턴스를 찾아냅니다.

* 인스턴스 내부의 데이터 값 중 '현재 움직이는 상자'와 '지금까지 쌓인 상자들'의 데이터가 존재하는지 검증하여, 메인 게임 환경을 정확히 식별하고 통제권을 확보합니다.

나. 중복 실행 방지 및 초기화

* 사용자가 스크립트를 여러 번 중복 실행할 경우 게임 로직이 꼬이는 것을 방지하기 위해 안전장치가 마련되어 있습니다.

* 기존에 작동 중이던 반복 루프(애니메이션 프레임 등)가 감지되면 이를 즉각 폐기하고 새로운 프로세스만 단일하게 실행되도록 초기화합니다.

다. 프레임 동기화 기반 실시간 모니터링

* 단순한 시간 단위 대기(Timer)가 아닌, 브라우저의 화면 갱신 주기(일반적으로 초당 60프레임)에 정확히 동기화되어 작동합니다.

* 매 프레임마다 게임의 상태(게임 종료 여부, 상자가 이미 떨어지고 있는지 여부 등)를 검사하여 불필요한 동작을 차단합니다.

3. 핵심 로직 : 자동 투하(Auto-Drop) 알고리즘

가장 핵심이 되는 자동 투하 기능은 수학적 거리 계산을 통해 오차를 최소화하도록 설계되었습니다.

* 목표 지점 설정: 쌓여있는 상자 그룹 중 최상단에 위치한 상자의 X 좌표를 목표(Target) 지점으로 설정합니다.

* 변곡점 포착 및 투하 판정:

* 현재 움직이는 상자의 위치와 속도를 바탕으로 **'현재 프레임에서의 목표까지의 거리'**와 **'다음 프레임에서의 예상 거리'**를 실시간으로 비교합니다.

* 움직이는 상자가 목표 중심점을 향해 다가오다가, 중심을 막 스쳐 지나가서 다시 멀어지려는 찰나(현재 거리가 다음 거리보다 작거나 같아지는 변곡점)를 정확히 포착합니다.

* 속도가 너무 빠르거나 프레임 지연이 발생할 경우를 대비해, 이동 속도에 비례한 '여유 오차 범위'를 설정하여 판정의 안정성을 높였습니다.

* 위 조건이 충족되는 완벽한 순간에 게임 내부의 '상자 떨어뜨리기' 함수를 강제 호출합니다.

4. 부가 기능 및 사용자 제어

* 정밀도 로깅(Logging): 투하가 이루어질 때마다 목표 지점과의 픽셀 오차를 계산합니다. 오차가 특정 수치 미만인 경우 'Perfect' 판정으로 분류하고, 이를 콘솔에 기록하여 매크로의 성능을 시각적으로 확인하게 해줍니다.

* 수동 종료(Kill Switch): 사용자가 원할 때 언제든 봇의 작동을 즉각 중지시킬 수 있는 제어 명령어를 전역에 할당하여 편의성을 높였습니다.

5. 총평

본 로직은 시각적 딜레이에 의존하는 이미지 서치 방식의 한계를 극복하고, 게임 코어 데이터에 직접 개입함으로써 픽셀 단위의 오차까지 통제하는 고도화된 스크립트입니다. 프레임 간의 이동 변화량을 예측하는 알고리즘을 적용하여 시스템 환경에 구애받지 않고 안정적으로 'Perfect' 판정을 유도할 수 있는 매우 효율적인 구조를 갖추고 있습니다.

3줄요약

1. 프레임보고 쌓는거임

2. 메모리에 접근이됨

3. 그래서 항상 만점이됨

그럼 인간이 실제로 쌓는것과 모가 다른가?

아래를보면 인간이쌓는거면 삐뚤빼둘합니다.

하지만 기계가 프레임단위를 분석해서 드랍할경우에는 그럴일이 거의 없이 1자입니다.

요약

1. 오늘 코드 해줘 해서 만듬

2. 미니게임잠깐할꺼라 우중이가 보안빼버림

3. 자동사냥 개꿀

4. 프로그래머를 양성시켜주는 게임


원본: 네이버 블로그

댓글