Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос External predict

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Ноя 2022
Сообщения
146
Реакции
3
что не так с моим предиктом он не попадает в цель с с 100 метров, скажите как его можно улучшить в external чтобы он попадал в цель. вот код
predict:
Expand Collapse Copy
inline Vector3 PredictTargetPosition(Process& process, Vector3& localPos, const Vector3& targetPos, Vector3 Velocity, const std::string& weaponName) {
    //printf("PredictTargetPosition called: localPos=(%.2f, %.2f, %.2f), targetPos=(%.2f, %.2f, %.2f), weaponName=%s\n",localPos.x, localPos.y, localPos.z, targetPos.x, targetPos.y, targetPos.z, weaponName.c_str());
    const float distance = localPos.distance(targetPos);
    Vector3 prediction = targetPos;
    float timestep = 1 / 60;

    if (distance > 0) {
        const float BulletTime = distance / ProjectileSpeed_Normal(distance, weaponName, process);
        const Vector3 vel = Velocity;
        Vector3 PredictVel;
        PredictVel.x = vel.x * BulletTime * 0.75f;
        PredictVel.y = vel.y * BulletTime * 0.75f;
        PredictVel.z = vel.z * BulletTime * 0.75f;

        prediction.x += PredictVel.x;
        prediction.y += PredictVel.y;
        prediction.z += PredictVel.z;
        prediction.y += (4.905f * powf(BulletTime, 2));
    } return prediction;
}
get_speed:
Expand Collapse Copy
inline float ProjectileSpeed_Normal(float dist, std::string currentweapon, Process& process)
{
    const float default_speed = 500.0f;

    float bullet_multiplier = 0;

    uint64_t clActiveItem = process.read<uint64_t>(local_datas.clActiveItem);
    uint64_t activeItem = decryption::decrypt_cl_active_item(clActiveItem);

    uint64_t localActiveItem = process.read<uint64_t>(globals->object_local + offsets::BasePlayer::clActiveItem);
    uint64_t localInventoryItem = process.read<uint64_t>(globals->object_local + offsets::BasePlayer::inventoryValue);
    uint64_t active_item = decryption::decrypt_cl_active_item(localActiveItem);
    uint64_t object_inventory = decryption::decrypt_player_inventory(localInventoryItem, process);
    uint64_t current_item = 0;

    if (object_inventory && active_item) {
        uint64_t inventory_belt = process.read<uint64_t>(object_inventory + offsets::PlayerInventory::invBelt);
        if (inventory_belt) {
            uint64_t belt_list = process.read<uint64_t>(inventory_belt + offsets::ItemContainer::itemList);
            if (belt_list) {
                uint64_t belt_array = process.read<uint64_t>(belt_list + 0x10);
                if (belt_array) {
                    for (int idx = 0; idx < 6; idx++) {
                        current_item = process.read<uint64_t>(belt_array + 0x20 + (idx * 0x8));
                        //  //printf("0x%llX\n", current_item);
                        if (!current_item) continue;
                        bullet_multiplier += GetAmmoMultiplier(process, current_item);;
                    }
                }
            }
        }
    }

    auto HandWeapon = currentweapon.c_str();

    if (HandWeapon == std::string("rifle.ak") || HandWeapon == std::string("rifle.ak.ice") || HandWeapon == std::string("rifle.ak.diver"))
    {
        if (dist <= 0.f) return 375.9f * bullet_multiplier;
        else if (dist <= 150.f) return 386.f * bullet_multiplier;
        else if (dist <= 200.f) return 390.f * bullet_multiplier;
        else if (dist <= 250.f) return 400.f * bullet_multiplier;
        else if (dist <= 300.0f) return 410.f * bullet_multiplier;
    }

    if (HandWeapon == std::string("hmlmg")) return 500.f * bullet_multiplier;
    if (HandWeapon == std::string("rifle.lr300")) return 300.f * bullet_multiplier;
    if (HandWeapon == std::string("rifle.bolt")) return 579.f * bullet_multiplier;
    if (HandWeapon == std::string("rifle.l96")) return 1126.0f * bullet_multiplier;
    if (HandWeapon == std::string("rifle.m39")) return 445.f * bullet_multiplier;
    if (HandWeapon == std::string("rifle.semiauto") || HandWeapon == std::string("rifle.sks")) return 358.0f * bullet_multiplier;
    if (HandWeapon == std::string("lmg.m249")) return 450.f * bullet_multiplier;

    if (HandWeapon == std::string("smg.thompson"))
    {
        if (dist <= 180.f) return 270.f * bullet_multiplier;
        else if (dist <= 204.f) return 250.f * bullet_multiplier;
        else if (dist <= 250.f) return 245.f * bullet_multiplier;
        else if (dist <= 350.f) return 230.f * bullet_multiplier;
    }

    if (HandWeapon == std::string("smg.2"))
    {
        if (dist <= 160.f) return 220.f * bullet_multiplier;
        else if (dist <= 200.f) return 195.f * bullet_multiplier;
    }

    if (HandWeapon == std::string("smg.mp5")) return 240.f * bullet_multiplier;

    if (HandWeapon == std::string("pistol.prototype17"))
    {
        if (dist <= 110.f) return 300.f * bullet_multiplier;
        else if (dist <= 169.f) return 290.f * bullet_multiplier;
        else if (dist <= 170.f) return 280.f * bullet_multiplier;
        else if (dist <= 180.f) return 275.f * bullet_multiplier;
        else if (dist <= 190.f) return 270.f * bullet_multiplier;
        else if (dist <= 200.f) return 265.f * bullet_multiplier;
    }

    if (HandWeapon == std::string("pistol.python")) return 300.f * bullet_multiplier;
    if (HandWeapon == std::string("pistol.semiauto")) return 300.f * bullet_multiplier;
    if (HandWeapon == std::string("pistol.revolver")) return 270.f * bullet_multiplier;
    if (HandWeapon == std::string("pistol.m92")) return 300.f * bullet_multiplier;
    if (HandWeapon == std::string("pistol.eoka")) return 90.f * bullet_multiplier;

    if (HandWeapon == std::string("pistol.nailgun"))
    {
        if (dist <= 60.f) return 59.f * bullet_multiplier;
        else if (dist <= 85.f) return 58.3f * bullet_multiplier;
        else return 57.8f * bullet_multiplier;
    }

    if (HandWeapon == std::string("crossbow"))
    {
        if (dist <= 83.f) return 90.f * bullet_multiplier;
        else if (dist <= 100.f) return 88.f * bullet_multiplier;
        else if (dist <= 150.f) return 86.f * bullet_multiplier;
        else return 86.f * bullet_multiplier;
    }

    if (HandWeapon == std::string("bow.compound"))
    {
        if (dist <= 90.f) return 120.f * bullet_multiplier;
        else if (dist <= 150.f) return 115.76f * bullet_multiplier;
        else return 115.5f * bullet_multiplier;
    }

    if (HandWeapon == std::string("bow.hunting") || HandWeapon == std::string("legacy bow"))
    {
        if (dist <= 41.f) return 60.f * bullet_multiplier;
        else if (dist <= 82.f) return 58.f * bullet_multiplier;
        else if (dist <= 102.f) return 57.5f * bullet_multiplier;
        else if (dist <= 112.f) return 57.3f * bullet_multiplier;
        else if (dist <= 127.f) return 57.f * bullet_multiplier;
        else if (dist <= 146.f) return 56.5f * bullet_multiplier;
        else if (dist <= 153.f) return 56.3f * bullet_multiplier;
        else if (dist <= 163.f) return 56.f * bullet_multiplier;
        else if (dist <= 172.f) return 55.7f * bullet_multiplier;
        else if (dist <= 178.f) return 55.5f * bullet_multiplier;
        else if (dist <= 184.f) return 55.3f * bullet_multiplier;
        else if (dist <= 189.f) return 55.1f * bullet_multiplier;
        else if (dist <= 196.f) return 54.9f * bullet_multiplier;
        else if (dist <= 201.f) return 54.7f * bullet_multiplier;
        else if (dist <= 206.f) return 54.5f * bullet_multiplier;
        else if (dist <= 210.f) return 54.3f * bullet_multiplier;
        else if (dist <= 215.f) return 54.1f * bullet_multiplier;
        else if (dist <= 220.f) return 53.9f * bullet_multiplier;
        else if (dist <= 225.1f) return 53.7f * bullet_multiplier;
        else if (dist <= 230.1f) return 53.5f * bullet_multiplier;
        else if (dist <= 233.1f) return 53.3f * bullet_multiplier;
        else if (dist <= 237.1f) return 53.1f * bullet_multiplier;
        else if (dist <= 241.1f) return 52.9f * bullet_multiplier;
        else if (dist <= 244.1f) return 52.7f * bullet_multiplier;
        else if (dist <= 248.1f) return 52.5f * bullet_multiplier;
        else if (dist <= 252.1f) return 52.3f * bullet_multiplier;
        else if (dist <= 255.1f) return 52.1f * bullet_multiplier;
        else if (dist <= 500.f) return 50.f * bullet_multiplier;
    }

    if (HandWeapon == std::string("shotgun.pump")) return 100.0f * bullet_multiplier;
    if (HandWeapon == std::string("shotgun.spas12")) return 100.0f * bullet_multiplier;
    if (HandWeapon == std::string("shotgun.waterpipe")) return 100.0f * bullet_multiplier;
    if (HandWeapon == std::string("shotgun.double")) return 100.0f * bullet_multiplier;

    return default_speed * bullet_multiplier;
}
inline float GetAmmoMultiplier(Process& process, uintptr_t activeItem) {
    //printf("GetAmmoMultiplier called: activeItem=0x%llX\n", activeItem);
    const uintptr_t baseProjectile = process.read<uintptr_t>(activeItem + 0x58);
    if (!baseProjectile) {
        //printf("GetAmmoMultiplier returning 1.0 (no baseProjectile)\n");
        return 1.0f;
    }

    const uintptr_t primaryMagazine = process.read<uintptr_t>(baseProjectile + offsets::BaseProjectile::primaryMagazine);
    if (!primaryMagazine) {
        //printf("GetAmmoMultiplier returning 1.0 (no primaryMagazine)\n");
        return 1.0f;
    }

    const uintptr_t ammoType = process.read<uintptr_t>(primaryMagazine + 0x20);
    if (!ammoType) {
        //printf("GetAmmoMultiplier returning 1.0 (no ammoType)\n");
        return 1.0f;
    }

    const uintptr_t ammoInfo = process.read<uintptr_t>(ammoType + 0x28);
    if (!ammoInfo) {
        //printf("GetAmmoMultiplier returning 1.0 (no ammoInfo)\n");
        return 1.0f;
    }

    std::string ammoName = GameUtils::ReadWeaponName(process, ammoInfo);
    auto it = BULLET_VELOCITIES.find(ammoName);
    float result = it != BULLET_VELOCITIES.end() ? it->second : 1.0f;
    //printf("GetAmmoMultiplier returning: %.2f\n", result);
    return result;
}
const std::map<std::string, float> BULLET_VELOCITIES = {
    { "ammo.rifle", 1.0f }, { "ammo.rifle.hv", 1.2f }, { "ammo.rifle.explosive", 0.49f },
    { "ammo.rifle.incendiary", 0.55f }, { "ammo.pistol", 1.0f }, { "ammo.pistol.hv", 1.33333f },
    { "ammo.pistol.fire", 0.75f }, { "arrow.wooden", 1.0f }, { "arrow.hv", 1.6f },
    { "arrow.fire", 0.8f }, { "arrow.bone", 0.9f }, { "ammo.handmade.shell", 1.0f },
    { "ammo.shotgun.slug", 2.25f }, { "ammo.shotgun.fire", 1.0f }, { "ammo.shotgun", 2.25f },
    { "ammo.nailgun.nails", 1.0f }
};
 
У тебя гет скорости пули это пизда
В игре же есть функция вроде которая скорость даст
для этого надо найти пулю на сколько я знаю и из неё взять характеристики velocityscale и drag, но я не знаю как в external получить пулю
 
для этого надо найти пулю на сколько я знаю и из неё взять характеристики velocityscale и drag, но я не знаю как в external получить пулю
руками, ЧЕКНИ БЛЯТЬ как в других сурсах сделано
 
Назад
Сверху Снизу