Ускорение работы чита

  • Автор темы Автор темы Vine
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
30 Янв 2018
Сообщения
79
Реакции
6
Здравствуйте!
Я использую драйвер для работы с памятью игры, экстернал чит и оверлей для рисования гуи и есп поверх игры.
Проблема в что любое обращение к драйверу занимает много времени, и если в цикле с 1000 повторений выполнять по 4 обращения к драйверу - рисование гуи будет занимать 150 мс, и есп будет обновляться каждые 150 мс, что для него очень долго.
Я хотел бысделать спросить, как можноты ускорить время коммуникации приложения с драйвером, любыми способами?
Я пробовал сделать с помощью ивентов, но пока что это не получилось. И вообще, общение с помощью ивентов будет выполняться быстрее?
Спасибо!
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
делать чтение в отдельном потоке, а в рисовке использовать прочитанные данные
 
делать чтение в отдельном потоке, а в рисовке использовать прочитанные данные
Как вариант, можно. Но скорость обновления данных тоже важна.
Есть еще варианты?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как вариант, можно. Но скорость обновления данных тоже важна.
Есть еще варианты?
можно создать 4 потока:
1) читаешь лист объектов
2) читаешь информацию о объекте (имена где находится и тд)
3) читаешь кости игроков
4) обновление матриц для W2S и прочее гавно
для этого можно создать свою структуру (думаю лучше будет типа такого)
Код:
Expand Collapse Copy
struct CPlayer
{
    bool IsDead() { return Health <= 0; }
    uint32 GetHealth() { return Health; }
    uint32 GetMaxHealth() { return MaxHealth; }
    int GetTeamId() { return TeamId; }
  
    EntityId EntId, WeaponId, TriggerId;
    float Health, MaxHealth;
    float Armor, MaxArmor;
    int TeamId, IsDead;
    ...
};
struct CEntity
{
    Vec3 GetBonePos(int szJointId)
    {
        return (szJointId < JointSize) ? Matrix * Bones[szJointId].t : ZERO;
    }

    const char* GetName() { return szName; }
    const char* GetClassName() { return szClassName; }
    EntityId EntId;
    char* Name, ClassName;
    Vec3 vPos, vScale, vRotation;
    Matrix34 vWorldTm;
    int szJointCount;
    QuatT Bones[120];
};
struct CEntityes
{
    CPlayer MyActor;

    CPlayer Players[255];
    int CountPlayers;
    CEntity EntityList[0xFFFF]
    int EntityCount;//0xFFFF = 65535;
    ...
};
struct CExWorldInfo
{
    bool ProjectToScreen(int32* v, FLOAT ptx, FLOAT pty, FLOAT ptz, FLOAT* sx, FLOAT* sy, FLOAT* sz)
    {
        Vec3 vOut, vIn;
        vIn.x = ptx;
        vIn.y = pty;
        vIn.z = ptz;
        Matrix44 mIdent;
        mIdent.SetIdentity();
        if (__mathVec3Project(&vOut, &vIn, v, &Projection, &View, &mIdent))
        {
            *sx = vOut.x * 100.0f / (f32)v[2];
            *sy = vOut.y * 100.0f / (f32)v[3];
            *sz = vOut.z;
            return true;
        }
        return false;
    }
    bool ProjectToScreen(Vec3 in, Vec3& out)
    {
        ProjectToScreen(v, in.x, in.y, in.z, &out.x, &out.y, &out.z);
        if (out.z < 0.0f || out.z > 1.0f) return false;
        out.x = out.x * (v[2] / 100.0f);
        out.y = out.y * (v[3] / 100.0f);
        return true;
    }
    Matrix44 View, Projection;
    CEntityes Entityes;
};
CExWorldInfo pGameWorld;
void Draw()
{
    CPlayer* MyActor = &pGameWorld.Entityes.MyActor;
    if (MyActor.IsDead()) return;
    CEntityes* Entityes = pGameWorld.Entityes;
  
    for (int i = 0; i < Entityes.CountPlayers; i++)
    {
        CPlayer* pActor = &Entityes.Players[i];
        CEntity* pEntity = &Entityes.EntityList[pActor ->GetId()];
        if (pEntity->GetId() != pActor->GetID()) continue;
        if (pActor->IsDead() || (pActor->GetTeamId() != MyActor->GetTeamId() || pActor->GetTeamId() == 0)) continue;
        Vec3 vScreen = ZERO;
        if (Entityes.ProjectToScreen(pEntity->GetPos(), vScreen))continue;
        DrawString(vScreen.x, vScreen.y, VCenter, pEntity->GetName());
    }
}
 
В ВФ лист игроков после иницализации имеет статичные данные, поэтому тебе достаточно знать количество игроков для более менее оптимизированной работы перебора:
Код:
Expand Collapse Copy
std::vector<СтруктураНужныхТебеДанных> vPlayerList;

static uint32_t iOldListCount = 0;
uint32_t iListCount = ПолучаешьКоличествоИгроковВсессии;

if (iOldListCount != iListCount)
    {
    vPlayerList.clear();
    СтруктураНужныхТебеДанных data;
     for (uint32_t i = 0; i < iListCount; i++)
        {
        //Перебор и получение всего что тебе нужно
        data.**** = ****;
        
        
        //помещаем все в наш лист
        vPlayerList.emplace_back(data);
        }
        iOldListCount = iListCount;
    }
    
    //Рисуешь по отобранным данным
    for (uint32_t i = 0; i < vPlayerList.size(); i++)
    {
    
    }
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В ВФ лист игроков после иницализации имеет статичные данные, поэтому тебе достаточно знать количество игроков для более менее оптимизированной работы перебора:
Код:
Expand Collapse Copy
std::vector<СтруктураНужныхТебеДанных> vPlayerList;

static uint32_t iOldListCount = 0;
uint32_t iListCount = ПолучаешьКоличествоИгроковВсессии;

if (iOldListCount != iListCount)
    {
    vPlayerList.clear();
    СтруктураНужныхТебеДанных data;
     for (uint32_t i = 0; i < iListCount; i++)
        {
        //Перебор и получение всего что тебе нужно
        data.**** = ****;
       
       
        //помещаем все в наш лист
        vPlayerList.emplace_back(data);
        }
        iOldListCount = iListCount;
    }
   
    //Рисуешь по отобранным данным
    for (uint32_t i = 0; i < vPlayerList.size(); i++)
    {
   
    }
в рисовке не хотелось бы и читать и рисовать ибо чтение займет много времени
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу