Вопрос Как найти расстояние от себя до ближайшего врага?

Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2021
Сообщения
29
Реакции[?]
1
Поинты[?]
0
Скажите как найти свою позицию, позицию врага и расстояние до него.
У меня почему-то всегда при расчёте выдаёт 0. Думаю я неправильно ищу позиции своего игрока или врага. Помогите кто-нибудь.
 
Banned
Пользователь
Статус
Оффлайн
Регистрация
1 Окт 2016
Сообщения
141
Реакции[?]
45
Поинты[?]
2K
Скажите как найти свою позицию, позицию врага и расстояние до него.
У меня почему-то всегда при расчёте выдаёт 0. Думаю я неправильно ищу позиции своего игрока или врага. Помогите кто-нибудь.
Для просмотра содержимого вам необходимо авторизоваться.
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2020
Сообщения
24
Реакции[?]
2
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Самое простое это расстояние до определенной кости можешь найти через dwbonematrix, вычитая из координатов цели свои
 
Banned
Пользователь
Статус
Оффлайн
Регистрация
1 Окт 2016
Сообщения
141
Реакции[?]
45
Поинты[?]
2K
Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2021
Сообщения
29
Реакции[?]
1
Поинты[?]
0
Самое простое это расстояние до определенной кости можешь найти через dwbonematrix, вычитая из координатов цели свои
C++:
void aim() {
    static Vector3 bonePos;
    Vector3 myPos = *(Vector3*)(*(uintptr_t*)localPlayer + m_vecOrigin);
    float closestDistace = 999999;
    int closestDistaceIndex = -1;
    for (int i = 1; i < 32; i++) {
        uintptr_t entity = *(uintptr_t*)((moduleBase + dwEntityList) + i * 0x10);
        if (entity != NULL) {
            int entityTeam = *(int*)(entity + m_iTeamNum);
            int entityHealth = *(int*)(entity + m_iHealth);
            Vector3 entityPos = *(Vector3*)(*(uintptr_t*)entity + m_vecOrigin);
            if (!entity || entity == localPlayer) {
                continue;
            }
            if (entityTeam == localTeam) {
                continue;
            }
            if (entityHealth < 1 || entityHealth > 100) {
                continue;
            }
            uint32_t boneMatrix = *(uint32_t*)(*(uint32_t*)entity + m_dwBoneMatrix);
            bonePos.x = *(float*)(boneMatrix + 0x30 * 8 + 0xCC)+ entityPos.x;
            bonePos.y = *(float*)(boneMatrix + 0x30 * 8 + 0xDC) + entityPos.y;
            bonePos.z = *(float*)(boneMatrix + 0x30 * 8 + 0xEC) + entityPos.z;
            Vector3 delta = Vector3(bonePos.x - myPos.x, bonePos.y - myPos.y, bonePos.z - myPos.z);
            float currentDist = sqrt(delta.x * delta.x + delta.y * delta.y + delta.z * delta.z);
            if (currentDist < closestDistace) {
                closestDistace = currentDist;
                closestDistaceIndex = i;
            }
        }
    }
    value = closestDistaceIndex;
}
Вот так?
 
Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2021
Сообщения
29
Реакции[?]
1
Поинты[?]
0
C++:
void aim() {
    static Vector3 bonePos;
    Vector3 myPos = *(Vector3*)(*(uintptr_t*)localPlayer + m_vecOrigin);
    float closestDistace = 999999;
    int closestDistaceIndex = -1;
    for (int i = 1; i < 32; i++) {
        uintptr_t entity = *(uintptr_t*)((moduleBase + dwEntityList) + i * 0x10);
        if (entity != NULL) {
            int entityTeam = *(int*)(entity + m_iTeamNum);
            int entityHealth = *(int*)(entity + m_iHealth);
            Vector3 entityPos = *(Vector3*)(*(uintptr_t*)entity + m_vecOrigin);
            if (!entity || entity == localPlayer) {
                continue;
            }
            if (entityTeam == localTeam) {
                continue;
            }
            if (entityHealth < 1 || entityHealth > 100) {
                continue;
            }
            uint32_t boneMatrix = *(uint32_t*)(*(uint32_t*)entity + m_dwBoneMatrix);
            bonePos.x = *(float*)(boneMatrix + 0x30 * 8 + 0xCC)+ entityPos.x;
            bonePos.y = *(float*)(boneMatrix + 0x30 * 8 + 0xDC) + entityPos.y;
            bonePos.z = *(float*)(boneMatrix + 0x30 * 8 + 0xEC) + entityPos.z;
            Vector3 delta = Vector3(bonePos.x - myPos.x, bonePos.y - myPos.y, bonePos.z - myPos.z);
            float currentDist = sqrt(delta.x * delta.x + delta.y * delta.y + delta.z * delta.z);
            if (currentDist < closestDistace) {
                closestDistace = currentDist;
                closestDistaceIndex = i;
            }
        }
    }
    value = closestDistaceIndex;
}
Вот так?
если сделать как int и возвращать значение closestDistaceIndex, то будет всегда наименьший entity (1) пока жив. Далее второй если 1-ого убить, но когда он возрождается, то снова возвращает 1. Из этого следует что currentDist работает не так, т.к. у 1ого entity, при любых обстоятельствах currentDist будет всегда меньше closestDistace. Что не так?
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2020
Сообщения
24
Реакции[?]
2
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
void aim() {
    static Vector3 bonePos;
    Vector3 myPos = *(Vector3*)(*(uintptr_t*)localPlayer + m_vecOrigin);
    float closestDistace = 999999;
    int closestDistaceIndex = -1;
    for (int i = 1; i < 32; i++) {
        uintptr_t entity = *(uintptr_t*)((moduleBase + dwEntityList) + i * 0x10);
        if (entity != NULL) {
            int entityTeam = *(int*)(entity + m_iTeamNum);
            int entityHealth = *(int*)(entity + m_iHealth);
            Vector3 entityPos = *(Vector3*)(*(uintptr_t*)entity + m_vecOrigin);
            if (!entity || entity == localPlayer) {
                continue;
            }
            if (entityTeam == localTeam) {
                continue;
            }
            if (entityHealth < 1 || entityHealth > 100) {
                continue;
            }
            uint32_t boneMatrix = *(uint32_t*)(*(uint32_t*)entity + m_dwBoneMatrix);
            bonePos.x = *(float*)(boneMatrix + 0x30 * 8 + 0xCC)+ entityPos.x;
            bonePos.y = *(float*)(boneMatrix + 0x30 * 8 + 0xDC) + entityPos.y;
            bonePos.z = *(float*)(boneMatrix + 0x30 * 8 + 0xEC) + entityPos.z;
            Vector3 delta = Vector3(bonePos.x - myPos.x, bonePos.y - myPos.y, bonePos.z - myPos.z);
            float currentDist = sqrt(delta.x * delta.x + delta.y * delta.y + delta.z * delta.z);
            if (currentDist < closestDistace) {
                closestDistace = currentDist;
                closestDistaceIndex = i;
            }
        }
    }
    value = closestDistaceIndex;
}
Вот так?
Да все верно
если сделать как int и возвращать значение closestDistaceIndex, то будет всегда наименьший entity (1) пока жив. Далее второй если 1-ого убить, но когда он возрождается, то снова возвращает 1. Из этого следует что currentDist работает не так, т.к. у 1ого entity, при любых обстоятельствах currentDist будет всегда меньше closestDistace. Что не так?
Так тут обнуление переменных и все в цикле каждый раз при вызове функции, с чего ты взял,что у первого ентити будет всегда так?
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2021
Сообщения
29
Реакции[?]
1
Поинты[?]
0
Да все верно

Так тут обнуление переменных и все в цикле каждый раз при вызове функции, с чего ты взял,что у первого ентити будет всегда так?
я сделал счётчик, который показывает ближайшего entity, он всегда показывает ближайшего, но как только появляется ещё 1 entity который по i меньше, то отобразит его, даже если тот дальше нынешнего. Пока меньшего по i не убить и он не воскреснет будет следующий entity по i а не по дистанции.biz2.pngbiz3.pngbiz4.png
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2021
Сообщения
29
Реакции[?]
1
Поинты[?]
0
Да все верно

Так тут обнуление переменных и все в цикле каждый раз при вызове функции, с чего ты взял,что у первого ентити будет всегда так?
я прикрепил скрины с счётчиком. На 1ом скрине видно что я стою у entity 1, далее убиваю его, счётчик показывает ближайшего, это entity 2, но когда возрождается entity 1, даже когда я ближе к второму, счётчик показывает на entity 1.
C++:
Vector3 bonePos;
int Smth() {
    Vector3 myPos = *(Vector3*)(*(uintptr_t*)localPlayer + m_vecOrigin);
    float closestDistace = 99999;
    int closestDistaceIndex = -1;
    for (int i = 1; i < 32; i++) {
        uintptr_t entity = *(uintptr_t*)((moduleBase + dwEntityList) + i * 0x10);
        if (entity != NULL) {
            int entityTeam = *(int*)(entity + m_iTeamNum);
            int entityHealth = *(int*)(entity + m_iHealth);
            Vector3 entityPos = *(Vector3*)(*(uintptr_t*)entity + m_vecOrigin);
            if (!entity || entity == localPlayer) {
                continue;
            }
            if (entityTeam == localTeam) {
                continue;
            }
            if (entityHealth < 1 || entityHealth > 100) {
                continue;
            }
            uint32_t boneMatrix = *(uint32_t*)(*(uint32_t*)entity + m_dwBoneMatrix);
            bonePos.x = *(float*)(boneMatrix + 0x30 * 8 + 0xCC)+ entityPos.x;
            bonePos.y = *(float*)(boneMatrix + 0x30 * 8 + 0xDC) + entityPos.y;
            bonePos.z = *(float*)(boneMatrix + 0x30 * 8 + 0xEC) + entityPos.z;
            Vector3 delta = Vector3(bonePos.x - myPos.x, bonePos.y - myPos.y, bonePos.z - myPos.z);
            float currentDist = sqrt(delta.x * delta.x + delta.y * delta.y + delta.z * delta.z);
            if (currentDist < closestDistace) {
                closestDistace = currentDist;
                closestDistaceIndex = i;
            }
        }
    }
    return closestDistaceIndex;
}
C++:
if (checkBox_auto) {
                    value = Smth();
                }
 
Похожие темы
Ответы
0
Просмотры
466
Сверху Снизу