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

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

  • Автор темы Автор темы Kuiresu
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2021
Сообщения
29
Реакции
1
Скажите как найти свою позицию, позицию врага и расстояние до него.
У меня почему-то всегда при расчёте выдаёт 0. Думаю я неправильно ищу позиции своего игрока или врага. Помогите кто-нибудь.
 
Скажите как найти свою позицию, позицию врага и расстояние до него.
У меня почему-то всегда при расчёте выдаёт 0. Думаю я неправильно ищу позиции своего игрока или врага. Помогите кто-нибудь.

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Самое простое это расстояние до определенной кости можешь найти через dwbonematrix, вычитая из координатов цели свои
 
Самое простое это расстояние до определенной кости можешь найти через dwbonematrix, вычитая из координатов цели свои
C++:
Expand Collapse Copy
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;
}
Вот так?
 
C++:
Expand Collapse Copy
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. Что не так?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
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. Что не так?
Так тут обнуление переменных и все в цикле каждый раз при вызове функции, с чего ты взял,что у первого ентити будет всегда так?
 
Последнее редактирование:
Да все верно

Так тут обнуление переменных и все в цикле каждый раз при вызове функции, с чего ты взял,что у первого ентити будет всегда так?
я сделал счётчик, который показывает ближайшего entity, он всегда показывает ближайшего, но как только появляется ещё 1 entity который по i меньше, то отобразит его, даже если тот дальше нынешнего. Пока меньшего по i не убить и он не воскреснет будет следующий entity по i а не по дистанции.
biz2.png
biz3.png
biz4.png
 
Последнее редактирование:
Да все верно

Так тут обнуление переменных и все в цикле каждый раз при вызове функции, с чего ты взял,что у первого ентити будет всегда так?
я прикрепил скрины с счётчиком. На 1ом скрине видно что я стою у entity 1, далее убиваю его, счётчик показывает ближайшего, это entity 2, но когда возрождается entity 1, даже когда я ближе к второму, счётчик показывает на entity 1.
C++:
Expand Collapse Copy
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++:
Expand Collapse Copy
if (checkBox_auto) {
                    value = Smth();
                }
 
Назад
Сверху Снизу