Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос JNI || C++ || 1.21.8 Vanila || Проблема с isFalling

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
25 Ноя 2024
Сообщения
94
Реакции
0
Функция isFalling всегда возвращает true + Проверка на 179 строке
Код:
Expand Collapse Copy
if (isFalling(env, LocalPlayer))
не когда не срабатывает, когда вроде даже isFalling возвращает true


isFalling():
Expand Collapse Copy
jboolean isFalling(JNIEnv* env, jobject LocalPlayer) {
    jclass Class = env->FindClass("gwi");
    cout << "Class at 0x" << Class << endl;
    jfieldID IDisFalling = env->GetFieldID(Class, "dz", "Z");
    env->DeleteLocalRef(Class);
    cout << "IDisFalling at 0x" << IDisFalling << endl;
    jboolean isFalling = env->GetBooleanField(LocalPlayer, IDisFalling);
    return isFalling;
}

Полный код dllmain.cpp (щиткод) Вызов функции находится на 179 строке

dllmain:
Expand Collapse Copy
#include "pch.h"
#include <jni/jni.hpp>
#include <iostream>
#include <Windows.h>
#include <cstdlib>
#include <ctime>   
#include "Utils/RenderUtils.h"
#include "Util.h"

long long GetTimeCurrent() {
    return GetTickCount64();
}

using namespace std;

typedef BOOL(WINAPI* tWglSwapBuffers)(HDC hDc);
tWglSwapBuffers oWglSwapBuffers = nullptr;

bool showMenu = false;
bool triggerBot = false;
HWND g_MinecraftWindow;
BOOL WINAPI HookRender(HDC hdc) {
    return oWglSwapBuffers(hdc);
}

float getRandomFloat(float min, float max) {
    float random_zero_to_one = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);
    return min + random_zero_to_one * (max - min);
}
void ClickLeftButtonMouse(HWND hwnd) {

    POINT pt;
    GetCursorPos(&pt);
    ScreenToClient(hwnd, &pt);
    LPARAM lParam = (pt.y << 16) | (pt.x & 0xFFFF);

    PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, lParam);
    Sleep(10);
    PostMessage(hwnd, WM_LBUTTONUP, 0, lParam);
}
jfloat GetAttackCooldownProgress(JNIEnv* env, jobject LocalPlayer) {
    jclass PlayerEntClass = env->FindClass("cut");
    jmethodID IDProgress = env->GetMethodID(PlayerEntClass, "G", "(F)F");
    env->DeleteLocalRef(PlayerEntClass);
    jfloat Progress = env->CallFloatMethod(LocalPlayer, IDProgress);
    return Progress;
}
void AttackPlayer(JNIEnv* env, jobject entity, jobject LocalPlayer) {
    jclass PlayerEntClass = env->FindClass("cut");
    jmethodID IDAttack = env->GetMethodID(PlayerEntClass, "e", "(Lbzm;)V");
    env->DeleteLocalRef(PlayerEntClass);
    env->CallVoidMethod(LocalPlayer, IDAttack, entity);
    cout << "Attacked" << endl;
}
bool isPlayer(JNIEnv* env, jobject entity) {
    if (entity == nullptr) {
        cout << "!entity" << endl;
        return false;
    }
    jclass entClass = env->GetObjectClass(entity);
    jmethodID IDisPlayer = env->GetMethodID(entClass, "dY", "()Z");
    env->DeleteLocalRef(entClass);
    if (IDisPlayer == nullptr) {
        cout << "!IDisPlayer" << endl;
        return false;
    }
    jboolean result = env->CallBooleanMethod(entity, IDisPlayer);

    return result == JNI_TRUE;
}
jboolean isFalling(JNIEnv* env, jobject LocalPlayer) {
    jclass Class = env->FindClass("gwi");
    cout << "Class at 0x" << Class << endl;
    jfieldID IDisFalling = env->GetFieldID(Class, "dz", "Z");
    env->DeleteLocalRef(Class);
    cout << "IDisFalling at 0x" << IDisFalling << endl;
    jboolean isFalling = env->GetBooleanField(LocalPlayer, IDisFalling);
    return isFalling;
}
void Main(HMODULE hModule) {
    AllocConsole();
    FILE* f;
    freopen_s(&f, "CONOUT$", "w", stdout);

    JavaVM* rawjvm = nullptr;
    jsize vmCount = 0;
    JNI_GetCreatedJavaVMs(&rawjvm, 1, &vmCount);

    if (rawjvm == nullptr) {
        cout << "!rawjvm" << endl;
        return;
    }

    cout << "JVM at: 0x" << rawjvm << endl;

    JNIEnv* env = nullptr;
    jint attachResult = rawjvm->AttachCurrentThread((void**)&env, nullptr);

    if (attachResult != JNI_OK || env == nullptr) {
        cout << "!JVM ERR: " << attachResult << endl;
        return;
    }
    srand(static_cast<unsigned int>(time(nullptr)));
    cout << "JVM connected" << endl;
    cout << "env at 0x" << env << endl;

    jclass MCClass = env->FindClass("fue");
    cout << "MCClass at 0x" << MCClass << endl;

    jmethodID IDGetInstance = env->GetStaticMethodID(MCClass, "R", "()Lfue;");
    cout << "IDGetInstance at 0x" << IDGetInstance << endl;

    jobject Instance = env->CallStaticObjectMethod(MCClass, IDGetInstance);
    cout << "Instance at 0x" << Instance << endl;

    jfieldID IDCurrentScreen = env->GetFieldID(MCClass, "z", "Lget;");
    cout << "IDCurrentScreen at 0x" << IDCurrentScreen << endl;

    void* targetAddress = GetProcAddress(GetModuleHandleA("opengl32.dll"), "wglSwapBuffers");
    cout << "targetAdress at 0x" << targetAddress << endl;

    MH_Initialize();
    MH_CreateHook(targetAddress, HookRender, reinterpret_cast<void**>(&oWglSwapBuffers));
    MH_EnableHook(targetAddress);
    //TriggerBot
    jfieldID IDCrosshairTarget = env->GetFieldID(MCClass, "w", "Lfiq;");
    cout << "IDCrosshairTarget is 0x" << IDCrosshairTarget << endl;
    jmethodID IDgetTypeHR = env->GetMethodID(env->FindClass("fiq"), "d", "()Lfiq$a;");
    cout << "IDgetTypeHR - HitResult at 0x" << IDgetTypeHR << endl;

    jfieldID IDTypeEntity = env->GetStaticFieldID(env->FindClass("fiq$a"), "c", "Lfiq$a;");
    cout << "IDTypeEntity at 0x" << IDTypeEntity << endl;

    jobject rawTypeEntity = env->GetStaticObjectField(env->FindClass("fiq$a"), IDTypeEntity);
    cout << "rawTypeEntity at 0x" << rawTypeEntity << endl;

    jobject TypeEntity = env->NewGlobalRef(rawTypeEntity);
    cout << "TypeEntity is " << TypeEntity << endl;
    jfieldID IDplayer = env->GetFieldID(MCClass, "t", "Lgwi;");
    cout << "IDplayer at 0x" << IDplayer << endl;
    while (true) {
        Sleep(10);
        //LocalPlayer
        jobject rawLocalPlayer = env->GetObjectField(Instance, IDplayer);
        jobject LocalPlayer = env->NewGlobalRef(rawLocalPlayer);
        env->DeleteLocalRef(rawLocalPlayer);
        jobject CurrentScreen = env->GetObjectField(Instance, IDCurrentScreen);

        if (GetAsyncKeyState(VK_RSHIFT) & 1 && CurrentScreen == nullptr) {
            if (!showMenu) {
                cout << "Gui Open" << endl;
                showMenu = true;
            }
            else {
                showMenu = false;
                cout << "Gui Close" << endl;
            }
        }
        env->DeleteLocalRef(CurrentScreen);


        //triggerbot
        jobject HitResult = env->GetObjectField(Instance, IDCrosshairTarget);

        if (HitResult != nullptr) {
            jobject HitResultType = env->CallObjectMethod(HitResult, IDgetTypeHR);
            if (env->IsSameObject(HitResultType, TypeEntity)) {
                jmethodID IDGetEnt = env->GetMethodID(env->FindClass("fip"), "a", "()Lbzm;");
                jobject Entity = env->CallObjectMethod(HitResult, IDGetEnt);

                if (isPlayer(env, Entity)) {
                    //cout << "Player" << endl;
                    jfloat progress = GetAttackCooldownProgress(env, LocalPlayer);
                    cout << progress << endl;
                    float RandomProgress = getRandomFloat(0.87f, 1.0f);

                    if (progress >= RandomProgress && CurrentScreen == nullptr) {
                        cout << isFalling(env, LocalPlayer) << endl; // <- вот эта функция возвращает 1 постоянно
                        if (isFalling(env, LocalPlayer)) {
                            cout << RandomProgress << endl;
                            HWND hwnd = GetForegroundWindow();
                            ClickLeftButtonMouse(hwnd);
                        }
                        Sleep(100);
                    }
                    env->DeleteLocalRef(Entity);
                    //AttackPlayer(env, Entity, LocalPlayer);
                }
                else {
                    cout << "notPlayer" << endl;
                    env->DeleteLocalRef(Entity);
                }
            }
            env->DeleteLocalRef(HitResultType);
        }

        env->DeleteLocalRef(HitResult);
        if (GetAsyncKeyState(VK_INSERT) & 1) {
            MH_DisableHook(GetProcAddress(GetModuleHandleA("opengl32.dll"), "wglSwapBuffers"));
            MH_Uninitialize();
            env->DeleteGlobalRef(LocalPlayer);
            rawjvm->DetachCurrentThread();
            if (f) fclose(f);
            FreeConsole();
            FreeLibraryAndExitThread(hModule, 0);
        }
    }
}

BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        CloseHandle(CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE(Main)), hModule, 0, 0));
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
Лог с консоли

Log:
Expand Collapse Copy
JVM at: 0x00007FF9C84C17C0
JVM connected
env at 0x000002C7622A1F10
MCClass at 0x000002C72622B050
IDGetInstance at 0x000002C724271DE0
Instance at 0x000002C72622B058
IDCurrentScreen at 0x0000000000000692
targetAdress at 0x00007FFA480F7F70
IDCrosshairTarget is 0x0000000000000682
IDgetTypeHR - HitResult at 0x000002C724271DE8
IDTypeEntity at 0x000002C761EF7CF0
rawTypeEntity at 0x000002C72622B078
TypeEntity is 000002C765B5A02A
IDplayer at 0x0000000000000632
1
Class at 0x000002C72622B080
IDisFalling at 0x0000000000000C96

Class at 0x000002C72622B148
IDisFalling at 0x0000000000000C96
1
 
1771851808804.png
 
Почему бы не использовать Entity.onGround
Попробую, но я думаю что будет так -> Условие !onGround Срабатывает и идет удар не критический, потому что игрок только прыгнул, а не падает, но если добавить Sleep то все гуд будет наверное
 
Мб можанге чет намудрили
Почему бы не использовать Entity.onGround
Работает, но оч часто мисает
Код:
Expand Collapse Copy
#include "pch.h"
#include <jni/jni.hpp>
#include <iostream>
#include <Windows.h>
#include <cstdlib>
#include <ctime>   
#include "Utils/RenderUtils.h"
#include "Render.h"
long long GetTimeCurrent() {
    return GetTickCount64();
}

using namespace std;

typedef BOOL(WINAPI* tWglSwapBuffers)(HDC hDc);
tWglSwapBuffers oWglSwapBuffers = nullptr;

bool showMenu = false;
bool triggerBot = false;
HWND g_MinecraftWindow;

BOOL WINAPI HookRender(HDC hdc) {
    return oWglSwapBuffers(hdc);
}


float getRandomFloat(float min, float max) {
    float random_zero_to_one = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);
    return min + random_zero_to_one * (max - min);
}
void ClickLeftButtonMouse(HWND hwnd) {

    POINT pt;
    GetCursorPos(&pt);
    ScreenToClient(hwnd, &pt);
    LPARAM lParam = (pt.y << 16) | (pt.x & 0xFFFF);

    PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, lParam);
    Sleep(10);
    PostMessage(hwnd, WM_LBUTTONUP, 0, lParam);
}
jfloat GetAttackCooldownProgress(JNIEnv* env, jobject LocalPlayer) {
    jclass PlayerEntClass = env->FindClass("cut");
    jmethodID IDProgress = env->GetMethodID(PlayerEntClass, "G", "(F)F");
    env->DeleteLocalRef(PlayerEntClass);
    jfloat Progress = env->CallFloatMethod(LocalPlayer, IDProgress);
    return Progress;
}
void AttackPlayer(JNIEnv* env, jobject entity, jobject LocalPlayer) {
    jclass PlayerEntClass = env->FindClass("cut");
    jmethodID IDAttack = env->GetMethodID(PlayerEntClass, "e", "(Lbzm;)V");
    env->DeleteLocalRef(PlayerEntClass);
    env->CallVoidMethod(LocalPlayer, IDAttack, entity);
    cout << "Attacked" << endl;
}
bool isPlayer(JNIEnv* env, jobject entity) {
    if (entity == nullptr) {
        cout << "!entity" << endl;
        return false;
    }
    jclass entClass = env->GetObjectClass(entity);
    jmethodID IDisPlayer = env->GetMethodID(entClass, "dY", "()Z");
    env->DeleteLocalRef(entClass);
    if (IDisPlayer == nullptr) {
        cout << "!IDisPlayer" << endl;
        return false;
    }
    jboolean result = env->CallBooleanMethod(entity, IDisPlayer);

    return result == JNI_TRUE;
}
jboolean isOnGround(JNIEnv* env, jobject localPlayer) {
    jclass Class = env->FindClass("bzm");
    jboolean res = env->CallBooleanMethod(localPlayer, env->GetMethodID(Class, "aK", "()Z"));
    env->DeleteLocalRef(Class);
    return res;
}


void Main(HMODULE hModule) {
    AllocConsole();
    FILE* f;
    freopen_s(&f, "CONOUT$", "w", stdout);

    JavaVM* rawjvm = nullptr;
    jsize vmCount = 0;
    JNI_GetCreatedJavaVMs(&rawjvm, 1, &vmCount);

    if (rawjvm == nullptr) {
        cout << "!rawjvm" << endl;
        return;
    }

    cout << "JVM at: 0x" << rawjvm << endl;

    JNIEnv* env = nullptr;
    jint attachResult = rawjvm->AttachCurrentThread((void**)&env, nullptr);

    if (attachResult != JNI_OK || env == nullptr) {
        cout << "!JVM ERR: " << attachResult << endl;
        return;
    }
    srand(static_cast<unsigned int>(time(nullptr)));
    cout << "JVM connected" << endl;
    cout << "env at 0x" << env << endl;

    jclass MCClass = env->FindClass("fue");
    cout << "MCClass at 0x" << MCClass << endl;

    jmethodID IDGetInstance = env->GetStaticMethodID(MCClass, "R", "()Lfue;");
    cout << "IDGetInstance at 0x" << IDGetInstance << endl;

    jobject Instance = env->CallStaticObjectMethod(MCClass, IDGetInstance);
    cout << "Instance at 0x" << Instance << endl;

    jfieldID IDCurrentScreen = env->GetFieldID(MCClass, "z", "Lget;");
    cout << "IDCurrentScreen at 0x" << IDCurrentScreen << endl;

    void* targetAddress = GetProcAddress(GetModuleHandleA("opengl32.dll"), "wglSwapBuffers");
    cout << "targetAdress at 0x" << targetAddress << endl;

    MH_Initialize();
    MH_CreateHook(targetAddress, HookRender, reinterpret_cast<void**>(&oWglSwapBuffers));
    MH_EnableHook(targetAddress);
    //TriggerBot
    jfieldID IDCrosshairTarget = env->GetFieldID(MCClass, "w", "Lfiq;");
    cout << "IDCrosshairTarget is 0x" << IDCrosshairTarget << endl;
    jmethodID IDgetTypeHR = env->GetMethodID(env->FindClass("fiq"), "d", "()Lfiq$a;");
    cout << "IDgetTypeHR - HitResult at 0x" << IDgetTypeHR << endl;

    jfieldID IDTypeEntity = env->GetStaticFieldID(env->FindClass("fiq$a"), "c", "Lfiq$a;");
    cout << "IDTypeEntity at 0x" << IDTypeEntity << endl;

    jobject rawTypeEntity = env->GetStaticObjectField(env->FindClass("fiq$a"), IDTypeEntity);
    cout << "rawTypeEntity at 0x" << rawTypeEntity << endl;

    jobject TypeEntity = env->NewGlobalRef(rawTypeEntity);
    cout << "TypeEntity is " << TypeEntity << endl;
    jfieldID IDplayer = env->GetFieldID(MCClass, "t", "Lgwi;");
    cout << "IDplayer at 0x" << IDplayer << endl;
    while (true) {
        Sleep(10);
        //LocalPlayer
        jobject rawLocalPlayer = env->GetObjectField(Instance, IDplayer);
        jobject LocalPlayer = env->NewGlobalRef(rawLocalPlayer);
        env->DeleteLocalRef(rawLocalPlayer);
        jobject CurrentScreen = env->GetObjectField(Instance, IDCurrentScreen);
        if (GetAsyncKeyState(VK_RSHIFT) & 1 && CurrentScreen == nullptr) {
            if (!showMenu) {
                cout << "Gui Open" << endl;
                showMenu = true;
            }
            else {
                showMenu = false;
                cout << "Gui Close" << endl;
            }
        }
        env->DeleteLocalRef(CurrentScreen);


        //triggerbot
        jobject HitResult = env->GetObjectField(Instance, IDCrosshairTarget);

        if (HitResult != nullptr) {
            jobject HitResultType = env->CallObjectMethod(HitResult, IDgetTypeHR);
            if (env->IsSameObject(HitResultType, TypeEntity)) {
                jmethodID IDGetEnt = env->GetMethodID(env->FindClass("fip"), "a", "()Lbzm;");
                jobject Entity = env->CallObjectMethod(HitResult, IDGetEnt);

                if (isPlayer(env, Entity)) {
                    //cout << "Player" << endl;
                    jfloat progress = GetAttackCooldownProgress(env, LocalPlayer);
                    cout << progress << endl;
                    float RandomProgress = getRandomFloat(0.87f, 1.0f);

                    if (progress >= RandomProgress && CurrentScreen == nullptr)
                    {
                        cout << RandomProgress << endl;
                        HWND hwnd = GetForegroundWindow();
                        if (isOnGround(env, LocalPlayer) == false) {
                            Sleep(38);
                            if (env->IsSameObject(HitResultType, TypeEntity)) {
                                ClickLeftButtonMouse(hwnd);
                            }

                        }
                        ClickLeftButtonMouse(hwnd);
                        Sleep(100);
                    }
                    env->DeleteLocalRef(Entity);
                    //AttackPlayer(env, Entity, LocalPlayer);
                }
                else {
                    cout << "notPlayer" << endl;
                    env->DeleteLocalRef(Entity);
                }
            }
            env->DeleteLocalRef(HitResultType);
        }

        env->DeleteLocalRef(HitResult);
        if (GetAsyncKeyState(VK_INSERT) & 1) {
            MH_DisableHook(GetProcAddress(GetModuleHandleA("opengl32.dll"), "wglSwapBuffers"));
            MH_Uninitialize();
            env->DeleteGlobalRef(LocalPlayer);
            rawjvm->DetachCurrentThread();
            if (f) fclose(f);
            FreeConsole();
            FreeLibraryAndExitThread(hModule, 0);
        }
    }
}

BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        CloseHandle(CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE(Main)), hModule, 0, 0));
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
 
Назад
Сверху Снизу