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

    @@ -4,44 +4,36 @@ * @private */ javascript:(function(){ - /* 二重適用防止 */ - if (window._keyboardPerfectStraightPatch) { + if (window._directKeyboardPatch) { alert('パッチはすでに適用されています。'); return; } - if (typeof updateArrowInput === 'function') { - const originalUpdateArrowInput = window.updateArrowInput; + /* ブラウザ全体のキーボード入力を監視 */ + window.addEventListener('keydown', function(e) { + if (!socket || socket.readyState !== WebSocket.OPEN) return; + + /* チャット入力中(もしあれば)などは誤発動を防ぐ */ + if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') return; - window.updateArrowInput = function() { - /* 1. まずゲーム本来のキーボード判定を行わせる(inputStateに値が入る) */ - originalUpdateArrowInput(); + let angleByte = null; - /* 2. その直後、sendInputが実行される前に、縦移動のズレを「魔法の比率」で上書きする */ - if (typeof inputState !== 'undefined') { - const dx = inputState.dx; - const dy = inputState.dy; + /* 押されたキーが「上」か「下」のときだけ、完璧な整数を直接指定 */ + 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の切り上げ) */ + } - /* 左右が押されておらず、縦移動だけのとき */ - if (dx === 0 && dy !== 0) { - if (dy < 0) { - /* 【真上移動の補正】 */ - /* atan2(dy, dx) が、1バイト変換時にピッタリ「63」になる魔法の比率 */ - inputState.dy = -1; - inputState.dx = 0.01238; /* あえてごくわずかに右に傾けることで、四捨五入を63にハメ込む */ - } else if (dy > 0) { - /* 【真下移動の補正】 */ - /* atan2(dy, dx) が、1バイト変換時にピッタリ「191」になる魔法の比率 */ - inputState.dy = 1; - inputState.dx = -0.01238; /* あえてごくわずかに左に傾けることで、四捨五入を191にハメ込む */ - } - } - } - }; + if (angleByte !== null) { + /* ゲーム本来の送信処理を完全にバイパスして、直接サーバーへ1バイト送信 */ + socket.send(new Uint8Array([angleByte])); + + /* ゲーム側に「キーが押されたイベント」を伝えないようにして、元のズレる計算をストップさせる */ + e.stopPropagation(); + } + }, true); /* trueにすることで、ゲームの処理より「絶対に先」に実行させます */ - window._keyboardPerfectStraightPatch = true; - alert('【入力軸・直進補正パッチ】\nキーボードの縦入力を検知し、サーバーの四捨五入バグを相殺する魔法の数値を注入しました!'); - } else { - alert('エラー: updateArrowInput 関数が見つかりません。ゲーム画面で実行してください。'); - } + window._directKeyboardPatch = true; + alert('【キーボード直撃パッチ】\n隠し関数を無視し、ブラウザのキー入力を直接ハックしました!上・下移動が完全直進化します。'); })();
  • /*
     * @title キーボード縦移動修正
     * @description キーボード縦移動時にちゃんとまっすぐになるぞ!
     * @private
     */
    javascript:(function(){
        if (window._directKeyboardPatch) {
            alert('パッチはすでに適用されています。');
            return;
        }
    
        /* ブラウザ全体のキーボード入力を監視 */
        window.addEventListener('keydown', function(e) {
            if (!socket || socket.readyState !== WebSocket.OPEN) return;
            
            /* チャット入力中(もしあれば)などは誤発動を防ぐ */
            if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') return;
    
            let angleByte = null;
    
            /* 押されたキーが「上」か「下」のときだけ、完璧な整数を直接指定 */
            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の切り上げ) */
            }
    
            if (angleByte !== null) {
                /* ゲーム本来の送信処理を完全にバイパスして、直接サーバーへ1バイト送信 */
                socket.send(new Uint8Array([angleByte]));
                
                /* ゲーム側に「キーが押されたイベント」を伝えないようにして、元のズレる計算をストップさせる */
                e.stopPropagation();
            }
        }, true); /* trueにすることで、ゲームの処理より「絶対に先」に実行させます */
    
        window._directKeyboardPatch = true;
        alert('【キーボード直撃パッチ】\n隠し関数を無視し、ブラウザのキー入力を直接ハックしました!上・下移動が完全直進化します。');
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。