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

Начинающий
Статус
Оффлайн
Регистрация
30 Янв 2018
Сообщения
79
Реакции[?]
6
Поинты[?]
0
Здравствуйте!
Я использую драйвер для работы с памятью игры, экстернал чит и оверлей для рисования гуи и есп поверх игры.
Проблема в что любое обращение к драйверу занимает много времени, и если в цикле с 1000 повторений выполнять по 4 обращения к драйверу - рисование гуи будет занимать 150 мс, и есп будет обновляться каждые 150 мс, что для него очень долго.
Я хотел бысделать спросить, как можноты ускорить время коммуникации приложения с драйвером, любыми способами?
Я пробовал сделать с помощью ивентов, но пока что это не получилось. И вообще, общение с помощью ивентов будет выполняться быстрее?
Спасибо!
 
Забаненный
Статус
Оффлайн
Регистрация
21 Авг 2018
Сообщения
157
Реакции[?]
71
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
делать чтение в отдельном потоке, а в рисовке использовать прочитанные данные
 
Начинающий
Статус
Оффлайн
Регистрация
30 Янв 2018
Сообщения
79
Реакции[?]
6
Поинты[?]
0
делать чтение в отдельном потоке, а в рисовке использовать прочитанные данные
Как вариант, можно. Но скорость обновления данных тоже важна.
Есть еще варианты?
 
Забаненный
Статус
Оффлайн
Регистрация
21 Авг 2018
Сообщения
157
Реакции[?]
71
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как вариант, можно. Но скорость обновления данных тоже важна.
Есть еще варианты?
можно создать 4 потока:
1) читаешь лист объектов
2) читаешь информацию о объекте (имена где находится и тд)
3) читаешь кости игроков
4) обновление матриц для W2S и прочее гавно
для этого можно создать свою структуру (думаю лучше будет типа такого)
Код:
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());
    }
}
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
В ВФ лист игроков после иницализации имеет статичные данные, поэтому тебе достаточно знать количество игроков для более менее оптимизированной работы перебора:
Код:
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++)
    {
    
    }
 
Забаненный
Статус
Оффлайн
Регистрация
21 Авг 2018
Сообщения
157
Реакции[?]
71
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В ВФ лист игроков после иницализации имеет статичные данные, поэтому тебе достаточно знать количество игроков для более менее оптимизированной работы перебора:
Код:
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++)
    {
   
    }
в рисовке не хотелось бы и читать и рисовать ибо чтение займет много времени
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Забаненный
Статус
Оффлайн
Регистрация
21 Авг 2018
Сообщения
157
Реакции[?]
71
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу