C:\Users\USER\Desktop\SF\SFPlugin\SFPlugin\main.cpp|6|fatal error: SAMPFUNCS_API.h: No such file or directory|
#include "SAMPFUNCS_API.h"
#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 cmd_show_info_player( std::string param )
{
if(param.empty()) return 1;
int i = std:stoi(param);
char buf[128];
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];
if(!pPlayer) return;
sprintf( buf, "Name: %s | Ping - %d ms | Score - %d | isNPC - %d | AFKState - %d",
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState == 2 );
SF->getSAMP()->getChat()->AddChatMessage( -1, buf );
}
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()->registerChatCommand( "showinfo", cmd_show_info_player );
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;
}
он ток под мсвс вродькомпилирую в 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;
}