I did it 1 year ago but never finish it, so i have no reason to keep it hides..
Its take a screenshot of a player and send to server..
I make it to get print.jpg of my folder (screentest.jpg) and send to server.. you can easily get a picture of a player using packets..
You might use the own function of the source to take a screenshot and saves in any folder (i prefer to use %temp%, after send to server and delete it automatically)
Function to take screenshot:
PHP Code:
void ZGameInterface::SaveScreenShot()
{
static unsigned long int st_nLastTime = 0;
unsigned long int nNowTime = timeGetTime();
#define SCREENSHOT_DELAY 2000
// 2ÃÊ µô·¹ÀÌ
if ((nNowTime - st_nLastTime) < SCREENSHOT_DELAY) return;
st_nLastTime = nNowTime;
//HDC dc;
char szPath[_MAX_PATH];
char szFilename[_MAX_PATH];
char szFilenameSafe[_MAX_PATH];
TCHAR szMyDocPath[MAX_PATH];
if (GetMyDocumentsPath(szMyDocPath)) {
strcpy(szPath, szMyDocPath);
strcat(szPath, GUNZ_FOLDER);
CreatePath(szPath);
strcat(szPath, SCREENSHOT_FOLDER);
CreatePath(szPath);
strcat(szPath, "/");
}
// ÇöÀç °ÔÀÓ Á¤º¸·Î ÆÄÀϸíÀ» ±¸¼º
SYSTEMTIME t;
GetLocalTime(&t);
char szCharName[MATCHOBJECT_NAME_LENGTH];
ValidateFilename(szCharName, ZGetMyInfo()->GetCharName(), '_');
sprintf(szFilename, "%s_%4d%02d%02d_%02d%02d%02d",
szCharName, t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond);
sprintf(szFilenameSafe, "nocharname_%4d%02d%02d_%02d%02d%02d",
t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond); // ij¸¯¸íÀ» »ý·«ÇÑ ¹öÀü
char szFullPath[_MAX_PATH];
char szFullPathToNotify[_MAX_PATH];
sprintf(szFullPath, "%s%s", szPath, szFilename);
sprintf(szFullPathToNotify, GUNZ_FOLDER SCREENSHOT_FOLDER"/""%s.jpg", szFilename);
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
IDirect3DSurface9* surface;
D3DDISPLAYMODE mode;
LPDIRECT3DDEVICE9 pDevice = RGetDevice();
pDevice->CreateOffscreenPlainSurface(cx, cy, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surface, NULL);
if (pDevice->GetFrontBufferData(0, surface) == D3D_OK)
{
D3DXSaveSurfaceToFile(strcat(szFullPath, ".jpg"), D3DXIFF_JPG, surface, NULL, NULL);
char szOutput[_MAX_PATH * 2];
ZTransMsg(szOutput, MSG_SCREENSHOT_SAVED, 1, szFullPathToNotify);
ZChatOutput(MCOLOR(ZCOLOR_CHAT_SYSTEM), szOutput);
surface->Release();
}
}
Now my code ..
PHP Code:
void ChatCmd_AdminScreenShot(const char* line, const int argc, char **const argv)
{
FILE *f = fopen("screenshot.jpg", "rb");
if (!f) ZCustomOutput("Erro ao ler o arquivo screenshot.jpg");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
char *string = (char*)malloc(fsize + 1);
fread(string, fsize, 1, f);
fclose(f);
string[fsize] = 0;
ZPostSendFile(string);
}
PHP Code:
inline void ZPostSendFile(char* pszBuffer)
{
ZPOSTCMD1(MC_SEND_FILE, MCommandParameterString(pszBuffer));
}
MSharedCommandTable.h
PHP Code:
#define MC_SEND_FILE XXXXXX
MMatchServer_OnCommand.cpp
PHP Code:
case MC_SEND_FILE:
{
MUID uidPlayer = pCommand->GetSenderUID();
char buffer[2000];
long buffer_len = 2000;
memset(buffer, 0, sizeof(buffer));
pCommand->GetParameter(buffer, 0, MPT_STR, sizeof(buffer));
FILE* fp = NULL;
fp = fopen("screenshot.jpg", "wb");
if (!fprintf(fp, buffer))
{
Log(7, "[IMG] Erro ao escrever no arquivo!");
fclose(fp);
return false;
}
else
{
Log(7, "[IMG] Aquivo salvo...");
Log(7, buffer);
}
fclose(fp);
}
break;
MSharedCommandTable.cpp
PHP Code:
C(MC_SEND_FILE, "Match.Admin.SendFile", "", MCDT_MACHINE2MACHINE)
P(MPT_STR, "strBuffer");
Once you will use it for release, you'll need change screenshot.jpg to screenshotRANDOMNUMBER.jpg ..
Example
PHP Code:
sprintf(szBuffer, "screenshot%d%d", r1, r2);
I think this is better idea to check if a player is using ESP or anything similliar using d3d hacks, ppl report bugs, etc