问题标题: MC外挂之自动设计与搭路

5
0
被禁言 马博闻
马博闻
初级守护
初级守护

先看介绍!!!!

代码:

#include <windows.h>
#include <iostream>
#define key1(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)

// 函数1:模拟鼠标左键/右键按下
void mo_d(bool isLeftButton) {
    INPUT input = {0};
    input.type = INPUT_MOUSE;

    if (isLeftButton) {
        input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
    } else {
        input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
    }

    SendInput(1, &input, sizeof(INPUT));
}

// 函数2:模拟鼠标左键/右键松开
void mo_u(bool isLeftButton) {
    INPUT input = {0};
    input.type = INPUT_MOUSE;

    if (isLeftButton) {
        input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
    } else {
        input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
    }

    SendInput(1, &input, sizeof(INPUT));
}

// 函数3:模拟键盘按键按下
void k_d(WORD keyCode) {
    INPUT input = {0};
    input.type = INPUT_KEYBOARD;
    input.ki.wVk = keyCode;  // 虚拟键码
    input.ki.dwFlags = 0;    // 按下

    SendInput(1, &input, sizeof(INPUT));
}

// 函数4:模拟键盘按键松开
void k_u(WORD keyCode) {
    INPUT input = {0};
    input.type = INPUT_KEYBOARD;
    input.ki.wVk = keyCode;  // 虚拟键码
    input.ki.dwFlags = KEYEVENTF_KEYUP;  // 松开

    SendInput(1, &input, sizeof(INPUT));
}
void move_mouse(int x,int y) {//移动鼠标 
    int screenWidth = GetSystemMetrics(SM_CXSCREEN);
    int screenHeight = GetSystemMetrics(SM_CYSCREEN);
    if (x >= screenWidth) x = screenWidth - 1;
    if (y >= screenHeight) y = screenHeight - 1;
    SetCursorPos(x, y);
}
int m2() {
    if (GetAsyncKeyState(VK_LBUTTON) & 0x8000) {// 检查左键是否按下
        return 1;
    }
    if (GetAsyncKeyState(VK_RBUTTON) & 0x8000) {// 检查右键是否按下
        return 2;
    }
    if (GetAsyncKeyState(VK_MBUTTON) & 0x8000) {// 检查中键是否按下
        return 3;
    }
    return false;
}
void m1(int& x, int& y) {
    POINT cursorPos;
    if (GetCursorPos(&cursorPos)) {
        x = cursorPos.x;
        y = cursorPos.y;
    } else {
        // 如果获取失败,可以设置默认值或抛出异常
        x = -1;
        y = -1;
    }
}
// **确保是 main 函数(控制台入口点)**
using namespace std; 
void w1(){//水平挖矿 
    int cnt;//时间 
    Sleep(3000);
    while(true){
        if(key1('P'))break;
        mo_d(1);
        k_d('W');
        Sleep(3000);
        mo_u(1);
        k_u('W');
        cnt++;
        if(cnt%3==0){
            k_d('S');
            Sleep(1000);
            k_u('S');
            Sleep(100);
            k_d('2');
            Sleep(100);
            mo_d(0);
            Sleep(100);
            k_u('2');
            Sleep(100);
            mo_u(0);
            k_d('W');
            Sleep(1000);
            k_u('W');
            k_d('1');
            k_u('1');
        }
    }
}
void w2(){//倾斜挖矿 
    int cnt;//时间 
    Sleep(3000);
    while(true){
        if(key1('P'))break;
        k_d('W');
        mo_d(1);
        Sleep(3000);
        mo_u(1);
        k_u('W');
        k_d('S');
        Sleep(500);
        k_u('S');
        mo_d(1);
        Sleep(1500);
        mo_u(1);
        k_d('W');
        Sleep(500);
        k_u('W');

        if(cnt%3==0){
            k_d(' ');
            k_d('S');
            Sleep(1500);
            k_u(' ');
            k_u('S');
            Sleep(100);
            k_d('2');
            Sleep(100);
            mo_d(0);
            Sleep(100);
            k_u('2');
            Sleep(100);
            mo_u(0);
            k_d('W');
            Sleep(1500);
            k_u('W');
            k_d('1');
            k_u('1');
        }

        cnt++;
    }
}
void gun(){//快速射击 
    for(int i=1;i<=9;i++){
        if(key1('P'))break;
        k_d(char('0'+i));
        Sleep(130);
        mo_d(0);
        Sleep(50);
        k_u(char('0'+i));
    }
    for(int i=1;i<=9;i++){
        if(key1('P'))break;
        k_d(char('0'+i));
        Sleep(150);
        mo_d(0);
        Sleep(1600);
        k_u(char('0'+i));
    }
    mo_u(0);
}
void dl(){//搭路 
    k_d('W');
    while(1){
        if(key1('P'))break;
        Sleep(120);
        mo_d(0);
        Sleep(40);
        mo_u(0);
    }
    k_u('W');
}
// 函数:弹出一个名为S的提示框
void ShowMessageBox(const char* S) {
    MessageBox(NULL, S, "MC辅助操作软件提醒您", MB_ICONINFORMATION);
}

int main() {
    while(1){
        Sleep(10);
        if(key1('I')){  //水平挖矿 
            ShowMessageBox("开启水平挖矿!");
            w1(); 
        } 
        if(key1('O')){  //水平挖矿 
            ShowMessageBox("开启倾斜挖矿!");
            w2(); 
        } 
        if(m2()==3){    //快速射击 
            gun(); 
        }
        if(key1('Z')){  //自动搭路 
            dl(); 
        }
    }
    return 0;
}

介绍:

快速射击: 
1.按中键进行快速射击 
2.快速射击时请确保你的物品栏的每一格都有一把上膛的弩(射击完成后会自动装填)
3.按'p'键停止 
自动搭路:
1.保证你的物品栏第一格有足够的方块
2.按'z'键开始搭路
3.开始搭路前请确保你的视线中心处在方块边缘往外一点(这是如果直接放置会得到一个放置在方块外的方块)(自己搭过路的都知道我在说什么)
4.三中的特性在某些JAVA版中可能没有,目前仅限基岩版
5.不要在搭路时改变视线方向!!!
6.按'p'键停止 


0
0
0
0
我要回答