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

Enjoy

Новичок
Проверенный
164
11
короче не стал доебывать в чате со своими нубскими вопросами, вот один из них.
Благодаря Фипу получилось сделать, чтобы обрабатывались действия с anttweakbar.
Теперь хук не дает закрыть меню/двинуться с места, посмотрел в SFGAME че можно сделать, но не увидел нихера.
(mainloop)
Код:
void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        if (GAME == nullptr)
            return;
        if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
            return;

        if (!SF->getSAMP()->IsInitialized())
            return;

        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, present);
        SF->getGame()->registerWndProcCallback(SFGame::HIGH_CB_PRIORITY, hookmsg);

        init = true;
    }

    if (SF->getGame()->isKeyPressed(0x7A))
    {
        TwInit(TW_DIRECT3D9, SF->getRender()->getD3DDevice());
        MenuState ^= true;
        if (MenuState)
            SF->getSAMP()->getMisc()->ToggleCursor(3, true);
        else
        {
            SF->getSAMP()->getMisc()->ToggleCursor(false);
            TwTerminate();
        }
    }

}
(hookmsg и MessageProc)
Код:
LRESULT CALLBACK MessageProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if (TwEventWin(wnd, msg, wParam, lParam))
        return 0;

    switch (msg)
    {
    case WM_CHAR:
        if (wParam == VK_ESCAPE)
            PostQuitMessage(0);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    default:
        return DefWindowProc(wnd, msg, wParam, lParam);
    }
}

bool __stdcall hookmsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    return MessageProc(hwnd, uMsg, wParam, lParam);
}
 

FYP

Известный
Администратор
1,758
5,722
bool __stdcall hookmsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return !TwEventWin(hwnd, uMsg, wParam, lParam);
}
этого достаточно.
 

Harch

Новичок
40
0
Как эмулировать нажатие клавиши? Функция emulateGTAKey не работает, как я понял. Через callOpcode не получилось (я никогда не работал с опкодами). Может, есть какое-то решение?
 

Harch

Новичок
40
0
Ещё вопрос. Можно ли как-то "поставить на паузу", не выходя в меню, из скрипта? Чтобы сервер думал, что игрок на паузе, но скрипт всё равно работал?
 

Harch

Новичок
40
0
Написал такую функцию для отправки сообщений в чат. Но отправляет не то. В чат выводится пустое сообщение. Как правильно отправлять данный пакет?

Код:
void sendTextToChat( string text )
{
    BitStream bsClass; // объявляем объект класса BitStream, в котором хранятся пакетные данные.
    bsClass.Write( text.size() );
    bsClass.Write( text.c_str() );
    SF->getRakNet()->SendRPC( RPC_Chat, &bsClass );    // отправляем RPC
};
 

urShadow

Потрачен
Автор темы
21
27
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
void sendTextToChat( string text )
{
BitStream bsClass; // объявляем объект класса BitStream, в котором хранятся пакетные данные.
bsClass.Write( (byte)text.length() );
bsClass.Write( text.c_str(), text.length() );
SF->getRakNet()->SendRPC( RPC_Chat, &bsClass ); // отправляем RPC
};
 

Harch

Новичок
40
0
Спасибо огромное! А остальные вопросы не подскажешь?
Ещё дополнительно вопрос - как понять, что персонаж находится именно в поезде? Не просто в машине.
 

Enjoy

Новичок
Проверенный
164
11
Код:
void sendTextToChat( string text )
{
BitStream bsClass; // объявляем объект класса BitStream, в котором хранятся пакетные данные.
bsClass.Write( (byte)text.length() );
bsClass.Write( text.c_str(), text.length() );
SF->getRakNet()->SendRPC( RPC_Chat, &bsClass ); // отправляем RPC
};
Можно так кстати
Код:
SF->getSAMP()->getInput()->pszDefaultCMD("text");
Но я не нашел как сендить серверные команды.
 

Harch

Новичок
40
0
Структурирую вопросы:
1) Эмуляция игровых клавиш?
2) Выйти на паузу, "не выходя на паузу"
3) Координаты чекпоинта более адекватно:D
4) Как определить, что персонаж находится именно в поезде?
 
Последнее редактирование:

Dimoz

Новичок
98
16
3) Координаты чекпоинта более адекватно:D
Код:
struct checkpoint *cp = (struct checkpoint *)0x00C7F158;
        if (cp->counter > 0) // проверка на то, что чекпоинт активен
        {
            cp->position[0]; // x
            cp->position[1]; // y
            cp->position[2]; // z
        }

Кто-нибудь промышлял рендером изображений из ресурсов? В связи с моей криворукостью при любых попытках осуществить затеянное игра просто-напросто вылетает.
Если кто-то умеет, то, пожалуйста, подскажите

Получилось. Просто я очень невнимателен.
Совет: D3DColorKey при загрузке текстуры не должен быть чисто черным (т.е. при использовании D3DCOLOR_ARGB хотя бы один параметр, за исключением прозрачности, не должен быть равным нулю)
 
Последнее редактирование:

Username

Потрачен
6
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как сделать проверку на открытость чата?