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

    @@ -4,46 +4,44 @@ * @private */ javascript:(function(){ - /* 1. client-network.js の本当の送信関数を上書き */ if (typeof sendInput === 'function') { window.sendInput = function() { if (!socket || socket.readyState !== WebSocket.OPEN) return; if (!isGameReady || myId === null) return; - /* 基本はゲームが持っている現在の角度を使う */ + /* 1. まずは基本の角度(マウスなど)から、普通に1バイトの整数を作る */ let angle = inputAngle; + let encodedAngle = Math.round(((angle + Math.PI) / (Math.PI * 2)) * 254); - /* キーボードの入力状態をチェック */ + /* 2. キーボードが押されているかチェック */ if (typeof keys !== 'undefined') { const up = keys['ArrowUp'] || keys['KeyW']; const down = keys['ArrowDown'] || keys['KeyS']; const left = keys['ArrowLeft'] || keys['KeyA']; const right = keys['ArrowRight'] || keys['KeyD']; - /* 左右が押されておらず、縦移動だけのとき */ + /* 左右が押されておらず、縦移動だけのとき、計算を上書き */ if (!left && !right) { if (up) { - /* 1バイト変換した時にピッタリ「63」(真上に一番近い整数)になる魔法の角度 */ - angle = ((63 / 254) * Math.PI * 2) - Math.PI; + encodedAngle = 63; /* 完璧な真上の整数(一切の小数を排除) */ } else if (down) { - /* 1バイト変換した時にピッタリ「191」(真下に一番近い整数)になる魔法の角度 */ - angle = ((191 / 254) * Math.PI * 2) - Math.PI; + encodedAngle = 191; /* 完璧な真下の整数(一切の小数を排除) */ } } } - /* ゲーム本来の「1バイト圧縮処理」を実行 */ - let encodedAngle = Math.round(((angle + Math.PI) / (Math.PI * 2)) * 254); + /* 3. 0〜254の範囲に絶対に収まるように安全装置をかける */ + encodedAngle = Math.max(0, Math.min(254, encodedAngle)); - /* 1バイトのバイナリデータを作成して送信 */ + /* 4. 1バイトのバイナリデータを作成して送信 */ const buffer = new ArrayBuffer(1); const view = new DataView(buffer); view.setUint8(0, encodedAngle); socket.send(buffer); }; - alert('【通信軸・完全直進パッチ】\n送信直前のデータを直接補正するようにしました!今度こそ一切ズレません!'); + alert('【最終兵器:ダイレクト直進パッチ】\n無駄な計算をすべて排除し、直接直進パケットを送信します。フリーズもズレも克服しました!'); } else { alert('エラー: sendInput関数が見つかりません。ゲーム画面で実行してください。'); }
  • /*
     * @title キーボード縦移動修正
     * @description キーボード縦移動時にちゃんとまっすぐになるぞ!
     * @private
     */
    javascript:(function(){
        if (typeof sendInput === 'function') {
            
            window.sendInput = function() {
                if (!socket || socket.readyState !== WebSocket.OPEN) return;
                if (!isGameReady || myId === null) return;
    
                /* 1. まずは基本の角度(マウスなど)から、普通に1バイトの整数を作る */
                let angle = inputAngle; 
                let encodedAngle = Math.round(((angle + Math.PI) / (Math.PI * 2)) * 254);
    
                /* 2. キーボードが押されているかチェック */
                if (typeof keys !== 'undefined') {
                    const up = keys['ArrowUp'] || keys['KeyW'];
                    const down = keys['ArrowDown'] || keys['KeyS'];
                    const left = keys['ArrowLeft'] || keys['KeyA'];
                    const right = keys['ArrowRight'] || keys['KeyD'];
    
                    /* 左右が押されておらず、縦移動だけのとき、計算を上書き */
                    if (!left && !right) {
                        if (up) {
                            encodedAngle = 63;  /* 完璧な真上の整数(一切の小数を排除) */
                        } else if (down) {
                            encodedAngle = 191; /* 完璧な真下の整数(一切の小数を排除) */
                        }
                    }
                }
    
                /* 3. 0〜254の範囲に絶対に収まるように安全装置をかける */
                encodedAngle = Math.max(0, Math.min(254, encodedAngle));
                
                /* 4. 1バイトのバイナリデータを作成して送信 */
                const buffer = new ArrayBuffer(1);
                const view = new DataView(buffer);
                view.setUint8(0, encodedAngle);
                socket.send(buffer);
            };
    
            alert('【最終兵器:ダイレクト直進パッチ】\n無駄な計算をすべて排除し、直接直進パケットを送信します。フリーズもズレも克服しました!');
        } else {
            alert('エラー: sendInput関数が見つかりません。ゲーム画面で実行してください。');
        }
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。