- 1,710
- 1,608
В чем смысл вопроса?Как проверить, что сообщение пришло от именно от сервера а не от игрока?
Для сервера есть конкретный RPC, так же как и от игрока.
И в чем смысл писать в две темы одновременно?
В чем смысл вопроса?Как проверить, что сообщение пришло от именно от сервера а не от игрока?
CVector pos(crds[0], crds[1], crds[2]);
CMarker *mapMarker = GAME->GetRadar()->CreateMarker(&pos);
mapMarker->SetSprite(eMarkerSprite::MARKER_SPRITE_WAYPOINT);
команды pfree <filename>, pload <filename> в консоль.Как выгружать/подгружать плагин?
нужно писать расширение файла?команды pfree <filename>, pload <filename> в консоль.
пофигнужно писать расширение файла?
для sf плагинов - нет, для .asi'шников - данужно писать расширение файла?
04E4: refresh_game_renderer_at 0.0 0.0
03CB: set_rendering_origin_at 0.0 0.0 0.0
Так и не нашёл ответа. Может кто подскажетПриветствую, вопрос такой. Как реализовать такую функцию.
При нажатии на клавишу, вызывается чат окно в нём вводится команда, например /sms id
И чтобы оно не закрывалось. Пробовал использовать:
SF->getSAMP()->getChat()->SetChatInputText();
SF->getSAMP()->getInput()->EnableInput();
Но если используешь их, то они вызываются только со второго нажатия клавиши
Хуйню тебе выше посоветовали, есть функции для прямой выгрузки/загрузки без всяких там консолей.Как выгружать/подгружать плагин?
SF->loadPlugin("путь к плагину");
SF->unloadPlugin("имя плагина");
Нет разницы, но я бы предпочёл длл детач потому что до SAMPFUNCS v5.4.0 другие плагины которые установили свой деструктор позже могли затереть твой и он бы не сработал.Где правильней удалять данные плагине при выгрузке
Тут
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;
Полный код покажи, я думаю у тебя проблема в проверке нажатия этой самой клавиши.Так и не нашёл ответа. Может кто подскажет
![]()
как сделать такой текст?
SF->getCLEO()->callOpcode("0ACD: show_text_highpriority \"~w~Business & House Catcher by ~b~Romelo ~g~activated ~w~Mode: ~b~houses ~w~Distance: ~b~60.0\" time 1000");
Как можно поставить вооот такой маркер на карте
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);
Аналогично рекомендуется все это красиво оформитькак этот код клео будет выглядить на SF API
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);
как сделать такой текст?
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);