kawa operand
перерывпятьминут
- 602
- 333
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
он ток под мсвс вродькомпилирую в Code::Blocks
он ток под мсвс вродькомпилирую в Code::Blocks
SF->getSAMP()->getPlayers()->pLocalPlayer->Say("text");Как можно выполнить команду или послать сообщение серверу через sampfuncs?
В проекте есть пример вывода сообщения в чат, при входе в игру.1.Ваш вопрос: Как выдать сообщение при загрузке? Которые показываются перед "Connected. Joining the game..."
Можете все равно пожалуйста сюда кинуть код для примера, я нуб :СССВ проекте есть пример вывода сообщения в чат, при входе в игру.
1.Ваш вопрос: Как выдать сообщение при загрузке? Которые показываются перед "Connected. Joining the game..."
Можете все равно пожалуйста сюда кинуть код для примера, я нуб :ССС
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();
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->getSAMP()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "SAMPFUNCS Plugin loaded." );
init = true;
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
switch (dwReasonForCall)
{
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
WNDPROC hOrigProc = NULL;
hOrigProc = (WNDPROC)SetWindowLong(*(HWND*)0xC97C1C, GWL_WNDPROC, (LONG)(UINT_PTR)WndProc);
bool __stdcall WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_KEYDOWN)
{
pSAMP->addMessageToChat(-1, "%i", wParam);
if (wParam == 192) { // 192 - ®
pSAMP->say("/CMD");
return false;
}
}
return true;
}
return true;
CallWindowProc(hOrigProc, hWnd, uMsg, wParam, lParam);
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
И так и так пробовал , если сделать так , то клавиши работают , но всё равно чат открывается.C++:CallWindowProc(hOrigProc, hWnd, uMsg, wParam, lParam);
и ваще он вот так выглядит
C++:LRESULT CALLBACK WindowProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam );
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_KEYDOWN) {
if (wParam == 192) {
pSAMP->say("/CMD");
return false;
}
}
return CallWindowProcA((WNDPROC)hOrigProc, hWnd, uMsg, wParam, lParam);
}
bool __stdcall wndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_KEYDOWN)
{
if (wParam == 192) { // 192 - ®
SF->getSAMP()->getPlayers()->pLocalPlayer->Say("/CMD");
return false;
}
}
return true;
}
1) Попробуй SetWindowLong после того, как по адресу samp.dll + 0x119CB8 (4 байта) будет что-то больше 0. Это означает, что самп уже установил новый адрес процедуры диалогового окна для своих нужд. Это значение еще SF модифицирует, так для справки.И так и так пробовал , если сделать так , то клавиши работают , но всё равно чат открывается.
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_CHAR && wParam == '`') {
// .. //
return FALSE;
}
return CallWindowProc(hOrigProc, hWnd, uMsg, wParam, lParam);
}