#(用済み)scriptのみでping計測...?

1 messages · Page 1 of 1 (latest)

gaunt anvil
#

精度はよくわかりませんが一人でやった時は悪くはなかったです
-# 低スペなので録画で多少重くなってるかも
フォームを閉じるスピードを計測してる感じです
擬似的に再現してるだけなのでどうしても遅延はあります
↓ サンプル

import { world, system, Player } from "@minecraft/server";
import { ActionFormData, MessageFormData, uiManager } from "@minecraft/server"; 

/**
 * 
 * @param { Player} player 
 * @author shouyu0902
 */
async function measurePing(player) {
    const startTime = Date.now();
    const form = new ActionFormData().title("").body("");

    await form.show(player)

    const endTime = Date.now();
    const ping = endTime - startTime;

    player.sendMessage(`Pong! ${ping-20}ms`); // だいたい20msくらいの遅延が生まれてしまう
}

world.beforeEvents.playerInteractWithBlock.subscribe(async ev => {
    const loc = ev.block.location
    const player = ev.player
    
    // ここは変えてね
    if(loc.x === 0 && loc.y === -60 && loc.z === 0) {
        ev.cancel = true;
        if (!ev.isFirstEvent) return;
        await system.waitTicks(1);

        new MessageFormData().title(" ").body("閉じないでください\n計測が終了したら自動で閉じます").show(player);

        system.runTimeout(()=>{
            measurePing(player)
            system.run(()=>{
                uiManager.closeAllForms(player)
            })
        }, 3) // 3tickくらい遅延させた方が安定するかも
    }
});```
gaunt anvil
#

26.30でplayer.getPing()が来るので用済みです