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

Roger571

Известный
58
31
@Adder, для использования stringCompressor'а его нужно инициализировать, ну и ессна читать длину строки, как сказал тим

C++:
// при первом запуске или при инициализации RakClient
StringCompressor::AddReference();
StringTable::AddReference();
 
  • Нравится
Реакции: Adder

BASS_DEVSOFTWARE

Известный 🇺🇦
Друг
264
568
При компиляции плагина получаю следующую строку:
1>e:\samp\sampfuncs sdk\sf plugin template\sfplugin\sfapi\SFRender.h(5): fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or
Где взять d3dx9.h?
 

Cake_

Известный
Проверенный
263
313
  • Нравится
Реакции: BASS_DEVSOFTWARE

BASS_DEVSOFTWARE

Известный 🇺🇦
Друг
264
568
Решение:
36695
 

Stiopko

Известный
Проверенный
307
218
есть ли что похожее ImGui::BeginPopupModal но без залежности к окну имгуи?
 

Cake_

Известный
Проверенный
263
313
как реализована эта функция?
C++:
bool SFSAMP::registerChatCommand(std::string command, CommandProc callback)
 

CatKnight

Известный
148
54
Кто-нибудь сталкивался с подобным? В какой-то момент перестал полностью выгружаться плагин. Не важно, как я его заполню, он всё равно полностью не выгружается. DLL_PROCESS_DETACH не вызывается при выгрузке (но вызывается, когда полностью из игры выходишь :unsure:), при этом все команды освобождаются, но сам плагин как бы подключён, но SF его уже не видит, и когда снова пытаешься выгрузить плагин, в консоли пишет, что такой плагин не найден. Есть решение?
Вот обычный пример:
main.cpp:
#include <Windows.h>
#include "main.h"
SAMPFUNCS *SF = new SAMPFUNCS();

void __stdcall mainloop()
{
    static bool initialized = false;
    if (!initialized)
    {
        if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized())
        {
            initialized = true;
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(104, 255, 192), "@@@");
        }
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
    {
        SF->initPlugin(mainloop, hModule);
        // ...
   
    }
       
    if (dwReasonForCall == DLL_PROCESS_DETACH)
    {
        // ...
    }
    return TRUE;
}
 

Cake_

Известный
Проверенный
263
313
Кто-нибудь сталкивался с подобным? В какой-то момент перестал полностью выгружаться плагин. Не важно, как я его заполню, он всё равно полностью не выгружается. DLL_PROCESS_DETACH не вызывается при выгрузке (но вызывается, когда полностью из игры выходишь :unsure:), при этом все команды освобождаются, но сам плагин как бы подключён, но SF его уже не видит, и когда снова пытаешься выгрузить плагин, в консоли пишет, что такой плагин не найден. Есть решение?
Вот обычный пример:
main.cpp:
#include <Windows.h>
#include "main.h"
SAMPFUNCS *SF = new SAMPFUNCS();

void __stdcall mainloop()
{
    static bool initialized = false;
    if (!initialized)
    {
        if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized())
        {
            initialized = true;
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(104, 255, 192), "@@@");
        }
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
    {
        SF->initPlugin(mainloop, hModule);
        // ...
  
    }
      
    if (dwReasonForCall == DLL_PROCESS_DETACH)
    {
        // ...
    }
    return TRUE;
}
Привет, сталкивался с похожей проблемой и мне помогало лишь полная замена проекта на стандартный сфовский от urshadow
 
  • Грустно
Реакции: CatKnight

CatKnight

Известный
148
54
Привет, сталкивался с похожей проблемой и мне помогало лишь полная замена проекта на стандартный сфовский от urshadow
Это звучит смешно, но просто переименовав плагин с "SFPlugin" на любое другое название, он стал нормально выгружается/загружается :unsure::unsure::unsure::unsure::unsure::unsure:. Пробовал как проект из 5.3.3, так и 5.4.1, и везде не выгружался полностью с дефолтным названием. Ладно, спасибо.
 
  • Нравится
Реакции: Cake_ и Stiopko

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,192
Как получить данную иконку и использовать ее?

36827
 

Adder

Известный
22
0
В сампфунксе для изменения текстдрава, можно использовать данные две функции:
Код:
SF->getSAMP()->getInfo()->pPools->pTextdraw->Delete();
SF->getSAMP()->getInfo()->pPools->pTextdraw->Create();
А как можно перезаписать текстдрав в собейте. Если можно пример. Спасибо
 

Adder

Известный
22
0
Как по мне это гавно метод. Лучше в хуке на рпк менять
Пробовал в хуке вот так:
Код:
if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
{
    stTextDrawTransmit txd;
    WORD txdID, cTextLen; char cText[800];
    params->bitStream->ResetReadPointer();
    params->bitStream->Read(txdID);
    params->bitStream->Read((PCHAR)&txd, sizeof(stTextDrawTransmit));
    params->bitStream->Read(cTextLen);
    params->bitStream->Read(cText, cTextLen);
    params->bitStream->ResetReadPointer();
    cText[cTextLen] = '\0';

    if (txdID == 6) {
        params->bitStream->ResetWritePointer();
        params->bitStream->Write(txdID);
        params->bitStream->Write((PCHAR)&txd, sizeof(stTextDrawTransmit));
        strcpy_s(cText, "Test");
        params->bitStream->Write(cText, strlen(cText));
    }
    return true;
}
Видно я не правильно перезаписываю, потому что в чат выбивает вот это: Warning: ignoring large TextDraw size=25940