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

Roger571

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

C++:
void SendDialogResponse(WORD wDialogID, BYTE bButtonID, WORD wListBoxItem = 65535, char *szInputResp = "")
{
        BitStream bsSend;
        BYTE respLen = static_cast<BYTE>(strlen(szInputResp));

        bsSend.ResetWritePointer();
        bsSend.Write(wDialogID);
        bsSend.Write(bButtonID);
        bsSend.Write(wListBoxItem);
        bsSend.Write(respLen);
        bsSend.Write(szInputResp, respLen);

        SAMP->RPC(RPC_DialogResponse, &bsSend, HIGH_PRIORITY, RELIABLE_ORDERED, NULL, false);
}

SendDialogResponse(0, 0); // 0 - id диалога
 
  • Нравится
Реакции: Adder

Adder

Известный
22
0
Приветствую, при попытке декодить стринг с диалога всё время крашется игра. Если закоментить строку с компресором, не крашит

Код:
            case RPC_ShowDialog:
            {

                if (cheat_state->_generic.cheat_panic_enabled)
                    break;

                WORD DialogID;
                BYTE style, caplen, button1_len, button2_len, button = 1;
                char caption[255], button1[25], button2[25], info[256];
                BitStream        bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);

                bsData.ResetReadPointer();
                bsData.Read(DialogID);
                bsData.Read(style);
                bsData.Read(caplen);
                bsData.Read(caption, caplen);
                caption[caplen] = '\0';
                bsData.Read(button1_len);
                bsData.Read(button1, button1_len);
                button1[button1_len] = '\0';
                bsData.Read(button2_len);
                bsData.Read(button2, button2_len);
                button2[button2_len] = '\0';
                stringCompressor->DecodeString(info, 256, &bsData);


                break;

            }
 

Roger571

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

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

BASS_DEVSOFTWARE

Известный 🇺🇦
Друг
263
569
При компиляции плагина получаю следующую строку:
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

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

Stiopko

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

Cake_

Потрачен
Проверенный
263
313
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как реализована эта функция?
C++:
bool SFSAMP::registerChatCommand(std::string command, CommandProc callback)
 

CatKnight

Известный
148
55
Кто-нибудь сталкивался с подобным? В какой-то момент перестал полностью выгружаться плагин. Не важно, как я его заполню, он всё равно полностью не выгружается. 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