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

Stiopko

Известный
Проверенный
307
218
Как можно поставить вооот такой
upload_2019-2-11_21-17-40.png
маркер на карте (ну типа когда вы заходине через esc на карту и ставите там точку только мне ето все нужно сделать програмно)
Єто
C++:
CVector pos(crds[0], crds[1], crds[2]);
CMarker *mapMarker = GAME->GetRadar()->CreateMarker(&pos);
mapMarker->SetSprite(eMarkerSprite::MARKER_SPRITE_WAYPOINT);
не то, це фейковий маркер
 

Adder

Известный
22
0
Приветствую, вопрос такой. Как реализовать такую функцию.
При нажатии на клавишу, вызывается чат окно в нём вводится команда, например /sms id
И чтобы оно не закрывалось. Пробовал использовать:
SF->getSAMP()->getChat()->SetChatInputText();
SF->getSAMP()->getInput()->EnableInput();
Но если используешь их, то они вызываются только со второго нажатия клавиши
 

Vlad Horii

Известный
Проверенный
310
171
Здравствуйте, подскажите пожалуйста, как этот код клео будет выглядить на SF API
CLEO:
04E4: refresh_game_renderer_at 0.0 0.0
03CB: set_rendering_origin_at 0.0 0.0 0.0
 

Adder

Известный
22
0
Приветствую, вопрос такой. Как реализовать такую функцию.
При нажатии на клавишу, вызывается чат окно в нём вводится команда, например /sms id
И чтобы оно не закрывалось. Пробовал использовать:
SF->getSAMP()->getChat()->SetChatInputText();
SF->getSAMP()->getInput()->EnableInput();
Но если используешь их, то они вызываются только со второго нажатия клавиши
Так и не нашёл ответа. Может кто подскажет
 

ЯedЯuM

Malware Maker
244
304
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как выгружать/подгружать плагин?
Хуйню тебе выше посоветовали, есть функции для прямой выгрузки/загрузки без всяких там консолей.
C++:
SF->loadPlugin("путь к плагину");
SF->unloadPlugin("имя плагина");

Где правильней удалять данные плагине при выгрузке
Тут
C++:
void CALLBACK endProc() { // это типу сффовский деструктор
    if (activatePlugin != nullptr) {
        ActivatePlugin *s = activatePlugin;
        activatePlugin = nullptr;
        delete s;
    }
    //ImGui_ImplDX9_Shutdown();
    //ImGui_ImplWin32_Shutdown();
    //ImGui::DestroyContext();
}

или тут

C++:
case DLL_PROCESS_DETACH:
        ImGui_ImplDX9_Shutdown();
        ImGui_ImplWin32_Shutdown();
        ImGui::DestroyContext();
        break;
Нет разницы, но я бы предпочёл длл детач потому что до SAMPFUNCS v5.4.0 другие плагины которые установили свой деструктор позже могли затереть твой и он бы не сработал.

Так и не нашёл ответа. Может кто подскажет
Полный код покажи, я думаю у тебя проблема в проверке нажатия этой самой клавиши.
 
  • Нравится
Реакции: Stiopko

ЯedЯuM

Malware Maker
244
304
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

san0

Известный
Друг
411
267
Как можно поставить вооот такой маркер на карте
C++:
CVector vec = CVector();
int &m_nTargetBlipIndex = *reinterpret_cast<int*>(
    reinterpret_cast<unsigned char*>(GAME->GetMenuManager()->GetInterface()) + 0x2C);

if (!m_nTargetBlipIndex) {
    using CRadar__SetCoordBlip = auto (__cdecl*)(eMarkerType, CVector, unsigned int, eMarkerDisplay, char*) -> int;
    m_nTargetBlipIndex = reinterpret_cast<CRadar__SetCoordBlip>(0x583820)
        (eMarkerType::MARKER_TYPE_COORDS, vec, 0, eMarkerDisplay::MARKER_DISPLAY_BLIPONLY, nullptr);
}
auto CRadar__GetActualBlipArrayIndex = ((int(__cdecl *)(int))0x582870);
CMarker &m = *GAME->GetRadar()->GetMarker(CRadar__GetActualBlipArrayIndex(m_nTargetBlipIndex));
m.SetPosition(&vec);
m.SetSprite(eMarkerSprite::MARKER_SPRITE_WAYPOINT);
Надеюсь, это по большей степени самый простой из методов, да и тому же карманный. По хорошему нужно использовать вместо этих деклараций полные классы из plugin-sdk, например https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CRadar.h, ну и будет выглядеть явно лучше, нежели прямая работа с памятью и смещениями по типу 0x2C.
как этот код клео будет выглядить на SF API
Аналогично рекомендуется все это красиво оформить
C++:
CVector vec(100.0f, 150.0f, 200.0f);

// 04E4: refresh_game_renderer_at 0.0 0.0
((void*(__cdecl *)(CVector2D*, void*))0x410C00)(&CVector2D(vec), reinterpret_cast<void*>(0xB72914));
// 03CB: set_rendering_origin_at 0.0 0.0 0.0
GAME->GetWorld()->LoadMapAroundPoint(&vec, /* radius used for requesting objects */ 100.0f);

как сделать такой текст?
C++:
static void show_text_highpriority(const char* text, const unsigned int time) {
    ((void(__cdecl *)(const char *, unsigned int, unsigned short, bool))0x69F1E0)(text, time, 0, false);
}
// ...
show_text_highpriority("~r~H~g~E~w~Y", 4000U);