Другое С/С++ Вопрос - Ответ

|| NN - NoName ||

Известный
1,049
629
Сорри я тупой и не понимаю схуяли игра зависает из за этого блока.
1603461451657.png
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,635
2,485
Сорри я тупой и не понимаю схуяли игра зависает из за этого блока.
Посмотреть вложение 72761
Ты в основной поток пихаешь цикл, и игра ждёт, пока этот цикл завершится, чтобы продолжить работу остальных функций
Игра не зависает, а ждёт исполнение этого цикла.
Чтобы не зависало, нужно отдельный поток создавать, детачить и в него уже цикл пихать
 
  • Нравится
Реакции: || NN - NoName ||

kin4stat

mq-team
Всефорумный модератор
2,730
4,712
Ты в основной поток пихаешь цикл, и игра ждёт, пока этот цикл завершится, чтобы продолжить работу остальных функций
Игра не зависает, а ждёт исполнение этого цикла.
Чтобы не зависало, нужно отдельный поток создавать, детачить и в него уже цикл пихать
Или не использовать потоки, а использовать хуки обновления игры, которые выполняются раз в кадр
 

Musaigen

abobusnik
Проверенный
1,583
1,302
Как можно перезаписать входящий пакет, без использования SF?
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,712
Как можно перезаписать входящий пакет, без использования SF?
R1:
C++:
typedef Packet* (__fastcall* RakPeer_Receive)(void*);
RakPeer_Receive fpReceive = NULL;

Packet* __fastcall HOOK_RakPeer_Receive(void* pRakPeer) {
    Packet* packet = fpReceive(pRakPeer);
    if (packet != nullptr && packet->data) {
        // your code
    }
    return packet;
}

MH_CreateAndEnableHook(dwSampModule + 0x31180, &HOOK_RakPeer_Receive, reinterpret_cast<LPVOID*>(&fpReceive))
 

Musaigen

abobusnik
Проверенный
1,583
1,302
R1:
C++:
typedef Packet* (__fastcall* RakPeer_Receive)(void*);
RakPeer_Receive fpReceive = NULL;

Packet* __fastcall HOOK_RakPeer_Receive(void* pRakPeer) {
    Packet* packet = fpReceive(pRakPeer);
    if (packet != nullptr && packet->data) {
        // your code
    }
    return packet;
}

MH_CreateAndEnableHook(dwSampModule + 0x31180, &HOOK_RakPeer_Receive, reinterpret_cast<LPVOID*>(&fpReceive))
А это тут при чём, меня интересует как перезаписать входящий пакет, а не как хукнуть его.
 

Joni Scripts

Известный
535
374
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
1604787736711.png

1604788008277.png
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,712
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
Посмотреть вложение 74865
Посмотреть вложение 74867
C++:
if (strcmp(info, "Ник пригласившего игрока бла-бла") == 0) {

}

// тоже самое, но в c++ стиле

if (std::string{info} == "Ник пригласившго бла-бла") {
   
}
 
  • Нравится
Реакции: Joni Scripts

Romelo

dev.
Проверенный
540
624
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
Посмотреть вложение 74865
Посмотреть вложение 74867
C++:
if(strstr(cInfo, "Введите ник игрока, пригласившего вас на сервер или промокод") && 
strstr(cCaption, "{FFFFFF}Приглашение | {ae433d}Регистрация")) {
//
}
 
  • Нравится
Реакции: Joni Scripts

Vintik

Мечтатель
Проверенный
1,471
920
For example:
C++:
auto sendPacketHandler(BitStream *const bitStream, const uint32_t packetPriority,
    const uint32_t packetReliability, const char orderingChannel) const
{   
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wattributes"

    using sendPacket_t = bool(__thiscall *)(const RakClient *const, BitStream *const,
        const uint32_t, const uint32_t, const char);

    #pragma GCC diagnostic pop
          
    uint8_t packetId{};
    bitStream->Read(packetId);
  
    if (packetId == ID_PLAYER_SYNC)
    {
        stOnFootData onFootData{};

        bitStream->Read(reinterpret_cast<__int8 *>(&onFootData), sizeof(stOnFootData));
        bitStream->ResetWritePointer();
      
        onFootData.fPosition[2] += 5.f;

        bitStream->Write(packetId);
        bitStream->Write(reinterpret_cast<__int8 *>(&onFootData), sizeof(stOnFootData));
    }
      
    auto sendPacket{sendPacket_t(originalVirtualTable[6])};
    return sendPacket(rakClientInterface, bitStream, packetPriority, packetReliability, orderingChannel);       
}
without SF