Другое SAMPFUNCS | API C++

QGate

Новичок
78
0
SF->getRakNet()->DecodeString(sampDialog.szInfo, 256, &bsData);
Такая строчка получилась, но ругается на &bsData, требует BitStream *input, где взять можно?
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Що ти такий безпомічний, тебе аж подсказывает тип что BitStream
 

Vadim.dll

Известный
168
80
как воспроизвести нажатие кнопок с клавиатуры
Должно быть так: SF->getGame()->emulateGTAKey(GTA_KEY_1,true)
Но оно не работает лично у меня например если нужно в машину залезть то не сработает нензнаю крч какаято фигня оно наверно с чатом и диалогами работать будет может из-за того что в игре все кнопки обрабатываются через DirectKey помоему и там задержка нужна после нажатия
 

QGate

Новичок
78
0
Никак не получается успеть выловить информацию о диалоге, не подскажете, что можно сделать?
 

Vadim.dll

Известный
168
80
А что конкретно выловить надо?
Там я баловался с диалогами всю инфу можно взять когда ты например ввел чтото и нажал ок а чтобы узнать когда диалог закрылся нужно хук на него поставить
 

QGate

Новичок
78
0
Диалог серверный? Если да, то хуком РПЦ.
Диалог серверный, Хук конечно ловит, но мне нужна проверка id диалога, я в теле хука добавил:

C++:
---- code----
if (showDialog.szDialogid == 27)
{
действие
}
Но ведь мне нужно вытаскивать информацию только в определенный момент, когда использована команда к примеру /test. Поэтому я объявил переменную к примеру int test = 0. В теле команды сделал
C++:
SF->...->Say("/mn");
test = 1;
ну а в хуке сделал так
C++:
---- code----
if (showDialog.szDialogid == 27 && test == 1)
{
test = 0;
SF->...->AddMessage(color, showDialog.szInfo);
}
Но он мне выводил пустое сообщение.
 
Последнее редактирование:

Vadim.dll

Известный
168
80
Это наверно из-за того что вот ты допустим открыл диалог 27 и проверка у тебя оказалась true и он выводит сообщение но она выводит пустоту потомучто ты не ввел ничего сейчас попробую попроще объяснить
первый диалог 27 test = 0 ты ввел в диалог test и хочешь чтобы при следуещем открытии диалога вывело тест
Второй раз открыл диалог 27 test = 1 проверка сбылась, но ты не ввел пока тут ничего

Какаято хрень но вроде по логике так
 

QGate

Новичок
78
0
Это наверно из-за того что вот ты допустим открыл диалог 27 и проверка у тебя оказалась true и он выводит сообщение но она выводит пустоту потомучто ты не ввел ничего сейчас попробую попроще объяснить
первый диалог 27 test = 0 ты ввел в диалог test и хочешь чтобы при следуещем открытии диалога вывело тест
Второй раз открыл диалог 27 test = 1 проверка сбылась, но ты не ввел пока тут ничего

Какаято хрень но вроде по логике так
Мне кажется нет, вот полный код моего изобретения...

Код:
if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog)
    {
        stSAMPDialog sampDialog;
        BitStream bsData;
        params->bitStream->Read(sampDialog.wDialogID);
        params->bitStream->Read(sampDialog.bDialogStyle);

        params->bitStream->Read(sampDialog.bTitleLength);
        params->bitStream->Read(sampDialog.szTitle, sampDialog.bTitleLength);
        sampDialog.szTitle[sampDialog.bTitleLength] = 0;

        params->bitStream->Read(sampDialog.bButton1Len);
        params->bitStream->Read(sampDialog.szButton1, sampDialog.bButton1Len);
        sampDialog.szButton1[sampDialog.bButton1Len] = 0;

        params->bitStream->Read(sampDialog.bButton2Len);
        params->bitStream->Read(sampDialog.szButton2, sampDialog.bButton2Len);
        sampDialog.szButton2[sampDialog.bButton2Len] = 0;

        SF->getRakNet()->DecodeString(sampDialog.szInfo, 256, params->bitStream);

        char buff[64];
        sprintf(buff, "%d", sampDialog.wDialogID);
        if ((statusinfo == 1) && (sampDialog.wDialogID == 74))
        {
            statusinfo = 0;
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "%s", buff);
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), sampDialog.szInfo);
        }
    };

void CALLBACK getdialogtext(std::string param)
{
    statusinfo = 1;
    SF->getSAMP()->getPlayers()->pLocalPlayer->Say("/mn");
}