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

Musaigen

abobusnik
Проверенный
1,583
1,302
Из-за чего raknet хук может выдавать значение 0 при чтении структуры stOnFootData(также при чтении вообще любых структур)
RakNetHook:
bool OnReceivePacket(Packet *p)
{
    if (p->data == nullptr || p->length == 0)
        return true;

    if (p->data[0] == ID_PLAYER_SYNC) {
        BitStream    bs(p->data, p->length, false);
        uint16_t    playerID = uint16_t(-1);
        stOnFootData data{ 0 };

        bs.ResetReadPointer();
        bs.IgnoreBits(8);
        bs.Read(playerID);
        bs.Read((PCHAR)&data, sizeof(stOnFootData));
      
        // Дальше происходит форматирование и вывод.
    }
}
Пытаюсь вывести айди(playerID) и позицию игрока(data.fPosition)
ID - высвечивается нормально, как положено.
Позиция игрока - выводится как 0

Конфликтов между собейтом или другими плагинами/скриптами нет.
 
Последнее редактирование:

CleanLegend

Известный
Всефорумный модератор
476
929
Из-за чего raknet хук может выдавать значение 0 при чтении структуры stOnFootData(также при чтении вообще любых структур)
RakNetHook:
bool OnReceivePacket(Packet *p)
{
    if (p->data == nullptr || p->length == 0)
        return true;

    if (p->data[0] == ID_PLAYER_SYNC) {
        BitStream    bs(p->data, p->length, false);
        uint16_t    playerID = uint16_t(-1);
        stOnFootData data{ 0 };

        bs.ResetReadPointer();
        bs.IgnoreBits(8);
        bs.Read(playerID);
        bs.Read((PCHAR)&data, sizeof(stOnFootData));
  
        // Дальше происходит форматирование и вывод.
    }
}
Пытаюсь вывести айди(playerID) и позицию игрока(data.fPosition)
ID - высвечивается нормально, как положено.
Позиция игрока - выводится как 0

Конфликтов между собейтом или другими плагинами/скриптами нет.
Чтение получаемого пакета PlayerSync и VehicleSync происходит по другому. Вроде в ракботе есть полный пример, вот не полный - https://gitlab.com/RcKoid/mod-s0beit-overlight/blob/master/src/Hooked RakNet/HookedRakClient.cpp#L98
 
  • Нравится
Реакции: Cake_, Musaigen и Stiopko

Stiopko

Известный
Проверенный
307
218
Как можно точно конвертировать координаты текстдрава которые приходят с сервер на расширение моего монитора
Я делаю вот так но на мониторе отображается не точно(+- 5 пикс) с текстдравом который принял самп

C++:
    x = (dMaxX / 640.) * SF->getSAMP()->getInfo()->pPools->pTextdraw->playerTextdraw[i]->fX;
    y = (dMaxY / 448.) * SF->getSAMP()->getInfo()->pPools->pTextdraw->playerTextdraw[i]->fY;
    SF->getRender()->DrawBox(x, y, 5, 5, SF->getSAMP()->getInfo()->pPools->pTextdraw->playerTextdraw[i]->dwBoxColor);
 

Stiopko

Известный
Проверенный
307
218
C++:
POINT get_screen_resolution()
{
    POINT pos;
    pos.x = *(int*)0xC9C040;
    pos.y = *(int*)0xC9C044;
    return pos;
}
Расширение екрана я знаю, просто с сервера приходит размещение текстдрава в float для расширения 640x448
я конвертирую для своего расширения, но выходит не точное значение
 

Cake_

Известный
Проверенный
263
313
Расширение екрана я знаю, просто с сервера приходит размещение текстдрава в float для расширения 640x448
я конвертирую для своего расширения, но выходит не точное значение
Проще самому прибавить допустим 5 пикселей, похожий баг был с получением координат радара
 

Stiopko

Известный
Проверенный
307
218
Проще самому прибавить допустим 5 пикселей, похожий баг был с получением координат радара
Как можно узнать высоту текстдрава textdraw->fBoxSizeY не подходит по причине того что данные не корректные

textdraw->fBoxSizeX вертает большее значение за textdraw->fX // корректно

textdraw->fBoxSizeY вертает меньшее значение за textdraw->fY // из под коня
// почему так?

эта зеленая черточка на скрине должна быть равна высоте текстдрава сытости, но это не так

35106

--------------------------------------------
Решено
 
Последнее редактирование:

Musaigen

abobusnik
Проверенный
1,583
1,302
Как получить свой CPed?
При вызове так pGameInterface->GetPools()->GetPed((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped); происходит краш.
При вызове так pGameInterface->GetPools()->GetPedFromRef(pGameInterface->GetPools()->GetPedRef((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped)) также краш.
pGTA_Ped валидный
 

zMViToS_

Новичок
3
0
Всем привет, это снова я по поводу SAMP Mobile. Научил клиент отсылать и принимать RPC пакеты. Теперь оружие видно локально в руках, у другого игрока и с пк. Теперь столкнулся с проблемой. Суть RPC_PlayerGiveTakeDamage заполнен, но урон по игроку не проходит. Как возможно решить данную ситуацию?
 

zMViToS_

Новичок
3
0
Как заполнил покажи
C++:
void PlayerGiveTakeDamage(RPCParameters *rpcParams)
{
    Log("RPC: PlayerGiveTakeDamage");
    unsigned char * Data = reinterpret_cast<unsigned char *>(rpcParams->input);
    int iBitLength = rpcParams->numberOfBitsOfData;

    RakNet::BitStream bsData((unsigned char*)Data,(iBitLength/8)+1,false);
    bool flag;
    uint16_t playerId;
    float Damage;
    uint32_t weaponid;
    uint32_t bodypart;

    bsData.Read(flag);
    bsData.Read(playerId);
    bsData.Read(Damage);
    bsData.Read(weaponid);
    bsData.Read(bodypart);

    if (flag) {
        Log("> PlayerGiveTakeDamage (%d, %f, %d, %d)", playerId, Damage, weaponid, bodypart);
    }
    else {
        Log("> PlayerGiveTakeDamage (%d, %f, %d, %d)", playerId, Damage, weaponid, bodypart);
    }

    pNetGame->GetRakClient()->RPC(&RPC_PlayerGiveTakeDamage, &bsData, HIGH_PRIORITY, RELIABLE_SEQUENCED, 0, false, UNASSIGNED_NETWORK_ID, NULL);
}
 

Stiopko

Известный
Проверенный
307
218
как можно конвертирать textdrawLetterHeight в пиксели
35278

Вот, sizex это пиксели от левого края, а LetterY что-то непонятное, не пиксели, как мне можно конвертировать LetterY(высоту) в пиксели?
 

checkdasound

Известный
Проверенный
963
406
Как получить свой CPed?
При вызове так pGameInterface->GetPools()->GetPed((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped); происходит краш.
При вызове так pGameInterface->GetPools()->GetPedFromRef(pGameInterface->GetPools()->GetPedRef((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped)) также краш.
pGTA_Ped валидный
Если в sf api, то PEDSELF, если нет, то по адресу 0xB6F5F0.
 

atizoff

приобретаю кашель за деньги
Проверенный
1,295
1,178
здрсте всем привет всем! у меня тут встал вопросик, как сделать окно подтверждения на имгуи?
пример: нажимаю на буттон "здарова" и выходит имгуи окошечко и там текст "вы уверены?" и 2 кнопки "да" и "нет"
 

Stiopko

Известный
Проверенный
307
218
здрсте всем привет всем! у меня тут встал вопросик, как сделать окно подтверждения на имгуи?
пример: нажимаю на буттон "здарова" и выходит имгуи окошечко и там текст "вы уверены?" и 2 кнопки "да" и "нет"
C++:
if (ImGui::Button("Modal"))
            ImGui::OpenPopup("Modal window");

        if (ImGui::BeginPopupModal("Modal window"))
        {
            ImGui::Text("Hello dsjfhds fhjs hfj dshfj hds");
            if (ImGui::Button("Close"))
                ImGui::CloseCurrentPopup();
            ImGui::EndPopup();
        }
 
  • Нравится
Реакции: atizoff