跳到正文
本頁目錄

驅動遊戲

PowerShell 模塊 BeDD.psm1 就放在模塊旁邊,通過遊戲的控制管道與它通信(默認 \\.\pipe\BeDD,配置裡可以另起名字):

powershell
Import-Module .\mods\BeDD\BeDD.psm1
Connect-BeDD                               # 等游戏启动好
Send-BeDDKey E                             # 打开背包
Send-BeDDMouse click -RX 0.5 -RY 0.474     # 按窗口比例位置点击
Send-BeDDKey T; Send-BeDDText '/give @s apple 3'; Send-BeDDKey ENTER
Save-BeDDScreenshot C:\temp\shot.png       # 窗口被挡住也能截

每個輸入調用都等遊戲線程處理完輸入才返回(或拋出異常)。這些調用都不會移動真實光標、按下真實按鍵或改變前臺窗口。

指哪兒懸停,指哪兒點:虛擬光標能觸發物品提示、點擊格子

命令

命令作用
Connect-BeDD [-PipeName p]等遊戲就緒,並選定之後的調用發給哪個遊戲
Send-BeDDKey E按一下鍵;-Action down/up 按住或鬆開,-Vk 0x10 指定任意虛擬鍵碼
Send-BeDDText '...'輸入文字(不產生按鍵,所以 t 不會打開聊天欄);-DelayMs 設定每個字的間隔
Send-BeDDMouse click -RX 0.5 -RY 0.5move、down、up、click、wheel,位置用 -X -Y 像素或 -RX -RY 比例;-Button right 右鍵
Send-BeDDRaw move -Dx 200在世界裡轉視角;click -Button right 使用物品
Clear-BeDDInput鬆開所有還按著的鍵和鼠標按鈕
Save-BeDDScreenshot path.png / Get-BeDDBitmap遊戲畫面,被擋住也照樣截
Set-BeDDWindow 1600 900調整遊戲窗口大小,不會把它提到前面
Get-BeDDState遊戲是否在線、收到了多少輸入、是否搶過前臺
Get-BeDDWorld是否在世界中、當前界面、鼠標是否鎖定、是否打開菜單、玩家位置與朝向(gameHooks)
Set-BeDDLook 90 -30把玩家轉到指定的偏航角和俯仰角(度,gameHooks)
Set-BeDDInput -Z 1 -Sprint -TtlMs 2000通過遊戲自己的輸入系統讓玩家行走、跳躍、潛行或疾跑一段時間,與按鍵綁定無關(gameHooks)
Set-BeDDSlot 3 / Invoke-BeDDAction inventory選擇快捷欄格子;丟棄、全部丟棄、打開背包、切換視角、暫停(gameHooks)
Set-BeDDButton attack -Action down -ReleaseOnBlockChange按遊戲刻或直到目標方塊破壞為止按住攻擊/使用/選取,不阻塞管道(gameHooks)
Send-BeDDPacket -Base64 ...讓玩家發送腳本序列化好的聊天或命令數據包(allowSend)
Send-BeDDStack -Buffer ... / -View讓玩家發送腳本序列化好的物品堆請求;-View 顯示客戶端看到的背包(allowStack)

標著 gameHooks、allowSend 或 allowStack 的命令需要打開對應的配置項;它們是為 bedboo 的 bedd 傳輸準備的。Invoke-BeDD @{ op = '...' } 可以原樣發送 控制管道協議裡的任意請求。

按鍵名

字母、數字、ESC、ENTER、BACK、TAB、SPACE、SHIFT、CTRL、ALT、方向鍵(LEFT、UP、RIGHT、DOWN)、 HOME、END、PGUP、PGDN、INSERT、DELETE、F1..F24、SLASH、GRAVE、MINUS、EQUALS。其他鍵用 -Vk 傳虛擬鍵碼。

位置

Send-BeDDMouse 的座標在遊戲窗口客戶區內:-X -Y 是像素,-RX -RY 是寬高的比例。固定好窗口大小(配置 clientWidth/clientHeight,或 Set-BeDDWindow),每次運行點擊位置才一樣。

鼠標按鈕和滾輪發給一個虛擬鼠標,遊戲讀它而不讀你的鼠標。Send-BeDDRaw 按原始計數移動這個鼠標,遊戲鎖定鼠標時 (在世界裡、沒打開界面)就是轉視角。

聊天和命令

Send-BeDDText 在聊天欄裡輸入 /summon sheep 和 /summon cow

Send-BeDDText 以字符形式輸入文字,不產生按鍵,所以先用 Send-BeDDKey T(或 SLASH)打開聊天欄,再用 Send-BeDDKey ENTER 發送。這樣輸入的命令,遊戲就像玩家親手輸入一樣執行。

截圖

Save-BeDDScreenshot 和 Get-BeDDBitmap 能截到遊戲畫面,儘管遊戲窗口在屏幕外,管理窗口被其他窗口擋住時也一樣。

選哪個遊戲

Connect-BeDD -PipeName <名字> 選定之後的調用發給哪個遊戲;BEDD_PIPE 設定默認值。同時運行多個遊戲時,每個實例要有自己的管道名: 見多開。

其他腳本也可以同時使用同一個遊戲的管道(配置 pipeInstances)。某個腳本斷開或進程退出時,它還按著的鍵和按鈕會被鬆開。