非公開 キーボード縦移動修正

    @@ -4,36 +4,45 @@ * @private */ javascript:(function(){ - if (window._directKeyboardPatch) { + if (window._networkPerfectStraightPatch) { alert('パッチはすでに適用されています。'); return; } - /* ブラウザ全体のキーボード入力を監視 */ - window.addEventListener('keydown', function(e) { - if (!socket || socket.readyState !== WebSocket.OPEN) return; - - /* チャット入力中(もしあれば)などは誤発動を防ぐ */ - if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') return; + /* キーボードの押し状態をブラウザ全体で独自に監視(ゲームの設定に依存しない) */ + const myKeys = {}; + window.addEventListener('keydown', e => { myKeys[e.key.toLowerCase()] = true; }, true); + window.addEventListener('keyup', e => { myKeys[e.key.toLowerCase()] = false; }, true); - let angleByte = null; + /* WebSocketの送信機能そのものをハック */ + const originalSend = WebSocket.prototype.send; + WebSocket.prototype.send = function(data) { + + /* 送信データが1バイト(Uint8Array または ArrayBuffer)の移動パケットかチェック */ + if (data && (data.byteLength === 1 || data.length === 1)) { + const view = new Uint8Array(data.buffer || data); + let angleByte = view[0]; - /* 押されたキーが「上」か「下」のときだけ、完璧な整数を直接指定 */ - if (e.key === 'ArrowUp' || e.key === 'w' || e.key === 'W') { - angleByte = 63; /* 完璧な真上(63.5の切り捨て) */ - } else if (e.key === 'ArrowDown' || e.key === 's' || e.key === 'S') { - angleByte = 191; /* 完璧な真下(190.5の切り上げ) */ - } + const up = myKeys['arrowup'] || myKeys['w']; + const down = myKeys['arrowdown'] || myKeys['s']; + const left = myKeys['arrowleft'] || myKeys['a']; + const right = myKeys['arrowright'] || myKeys['gridscore' /* 誤発動防止 */] || myKeys['d']; - if (angleByte !== null) { - /* ゲーム本来の送信処理を完全にバイパスして、直接サーバーへ1バイト送信 */ - socket.send(new Uint8Array([angleByte])); - - /* ゲーム側に「キーが押されたイベント」を伝えないようにして、元のズレる計算をストップさせる */ - e.stopPropagation(); + /* 左右が押されておらず、縦移動だけのとき、パケットの数値を直接書き換える */ + if ((up || down) && !left && !right) { + if (up) { + /* 切り上げられて64になっていたのを、力技で完璧な垂直の「63」に固定! */ + view[0] = 63; + } else if (down) { + /* 切り上げられて191になっていたのを、力技で完璧な垂直の「190」に固定! */ + view[0] = 190; + } + } } - }, true); /* trueにすることで、ゲームの処理より「絶対に先」に実行させます */ + /* 本来の送信処理を実行 */ + return originalSend.apply(this, arguments); + }; - window._directKeyboardPatch = true; - alert('【キーボード直撃パッチ】\n隠し関数を無視し、ブラウザのキー入力を直接ハックしました!上・下移動が完全直進化します。'); + window._networkPerfectStraightPatch = true; + alert('【通信軸・ステルス直進パッチ】\nサーバーへ送信される直前のパケットを捕まえ、完璧な垂直(63 / 190)に修正しました。もう絶対にズレません!'); })();
  • /*
     * @title キーボード縦移動修正
     * @description キーボード縦移動時にちゃんとまっすぐになるぞ!
     * @private
     */
    javascript:(function(){
        if (window._networkPerfectStraightPatch) {
            alert('パッチはすでに適用されています。');
            return;
        }
    
        /* キーボードの押し状態をブラウザ全体で独自に監視(ゲームの設定に依存しない) */
        const myKeys = {};
        window.addEventListener('keydown', e => { myKeys[e.key.toLowerCase()] = true; }, true);
        window.addEventListener('keyup', e => { myKeys[e.key.toLowerCase()] = false; }, true);
    
        /* WebSocketの送信機能そのものをハック */
        const originalSend = WebSocket.prototype.send;
        WebSocket.prototype.send = function(data) {
            
            /* 送信データが1バイト(Uint8Array または ArrayBuffer)の移動パケットかチェック */
            if (data && (data.byteLength === 1 || data.length === 1)) {
                const view = new Uint8Array(data.buffer || data);
                let angleByte = view[0];
    
                const up = myKeys['arrowup'] || myKeys['w'];
                const down = myKeys['arrowdown'] || myKeys['s'];
                const left = myKeys['arrowleft'] || myKeys['a'];
                const right = myKeys['arrowright'] || myKeys['gridscore' /* 誤発動防止 */] || myKeys['d'];
    
                /* 左右が押されておらず、縦移動だけのとき、パケットの数値を直接書き換える */
                if ((up || down) && !left && !right) {
                    if (up) {
                        /* 切り上げられて64になっていたのを、力技で完璧な垂直の「63」に固定! */
                        view[0] = 63; 
                    } else if (down) {
                        /* 切り上げられて191になっていたのを、力技で完璧な垂直の「190」に固定! */
                        view[0] = 190;
                    }
                }
            }
            /* 本来の送信処理を実行 */
            return originalSend.apply(this, arguments);
        };
    
        window._networkPerfectStraightPatch = true;
        alert('【通信軸・ステルス直進パッチ】\nサーバーへ送信される直前のパケットを捕まえ、完璧な垂直(63 / 190)に修正しました。もう絶対にズレません!');
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。