📄 wmain.cpp
字号:
// --------------------------------------------------------------
// Helbreath Client
//
// 1998.10 by Soph
//
// --------------------------------------------------------------
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <stdlib.h>
#include <winbase.h>
#include <mmsystem.h>
#include <process.h>
#include "resource.h"
#include "XSocket.h"
#include "winmain.h"
#include "Game.h"
#include "GlobalDef.h"
#ifdef DEF_HTMLCOMMOM
HWND m_hwndWebCtrl;
#endif
#if DEF_LANGUAGE == 3
// v2.03 苞陛 茄固福
#import "ClientLogon.dll" no_namespace
#endif
extern "C" __declspec( dllimport) int __FindHackingDll__(char *);
// --------------------------------------------------------------
#define WM_USER_TIMERSIGNAL WM_USER + 500
#define WM_USER_CALCSOCKETEVENT WM_USER + 600
int G_iAddTable31[64][510], G_iAddTable63[64][510]; // 胶橇扼捞飘俊辑 曼炼窍绰 抛捞喉. 加档甫 困秦 傈开
int G_iAddTransTable31[510][64], G_iAddTransTable63[510][64];
long G_lTransG100[64][64], G_lTransRB100[64][64];
long G_lTransG70[64][64], G_lTransRB70[64][64];
long G_lTransG50[64][64], G_lTransRB50[64][64];
long G_lTransG25[64][64], G_lTransRB25[64][64];
long G_lTransG2[64][64], G_lTransRB2[64][64];
char szAppClass[32];
HWND G_hWnd = NULL;
HWND G_hEditWnd = NULL;
HINSTANCE G_hInstance = NULL;
MMRESULT G_mmTimer;
#ifdef DEF_HTMLCOMMOM // Html 促捞倔肺弊 何盒..
HWND G_hInternetWnd = NULL;
BOOL G_bDlg1 = FALSE;
#endif
char G_cSpriteAlphaDegree; // 扁夯利栏肺 林埃葛靛
class CGame * G_pGame;
class XSocket * G_pCalcSocket = NULL;
BOOL G_bIsCalcSocketConnected = TRUE;
DWORD G_dwCalcSocketTime = NULL, G_dwCalcSocketSendTime = NULL;
char G_cCmdLine[256], G_cCmdLineTokenA[120], G_cCmdLineTokenA_Lowercase[120], G_cCmdLineTokenB[120], G_cCmdLineTokenC[120], G_cCmdLineTokenD[120], G_cCmdLineTokenE[120];
//BOOL WINAPI DecryptFunc(LPTSTR cipher_text, LPTSTR plain_text );
// --------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam, LPARAM lParam)
{
if(G_pGame->GetText( hWnd, message, wParam, lParam)) return 0;
switch (message) {
case WM_USER_CALCSOCKETEVENT:
// 苞陛 家南捞 谗板促. 霸烙吝俊 谗板促搁 沥惑 荤侩磊啊 酒聪促.
G_pGame->_CalcSocketClosed();
break;
case WM_CLOSE:
if ( (G_pGame->m_cGameMode == DEF_GAMEMODE_ONMAINGAME) && ( G_pGame->m_bForceDisconn == FALSE ) )
{
#ifdef _DEBUG
if (G_pGame->m_cLogOutCount == -1 || G_pGame->m_cLogOutCount > 2) G_pGame->m_cLogOutCount = 1;
#else
if (G_pGame->m_cLogOutCount == -1 || G_pGame->m_cLogOutCount > 11) G_pGame->m_cLogOutCount = 11;
#endif
}
else if (G_pGame->m_cGameMode == DEF_GAMEMODE_ONLOADING) return (DefWindowProc(hWnd, message, wParam, lParam));
else if (G_pGame->m_cGameMode == DEF_GAMEMODE_ONMAINMENU) G_pGame->ChangeGameMode(DEF_GAMEMODE_ONQUIT);
break;
case WM_SYSCOMMAND:
// 胶农赴 技捞滚狼 悼累阑 阜绰促.
if((wParam&0xFFF0)==SC_SCREENSAVE || (wParam&0xFFF0)==SC_MONITORPOWER)
return 0;
return DefWindowProc(hWnd, message, wParam, lParam);
case WM_USER_TIMERSIGNAL:
G_pGame->OnTimer();
break;
case WM_KEYDOWN:
G_pGame->OnKeyDown(wParam);
return (DefWindowProc(hWnd, message, wParam, lParam));
case WM_KEYUP:
G_pGame->OnKeyUp(wParam);
return (DefWindowProc(hWnd, message, wParam, lParam));
case WM_SYSKEYDOWN:
G_pGame->OnSysKeyDown(wParam);
return (DefWindowProc(hWnd, message, wParam, lParam));
break;
case WM_SYSKEYUP:
G_pGame->OnSysKeyUp(wParam);
return (DefWindowProc(hWnd, message, wParam, lParam));
break;
case WM_ACTIVATEAPP:
#ifdef DEF_HTMLCOMMOM // mando 020910 厚劝己 灯促啊 劝己 灯阑锭..舅飘+徘..
::SetFocus(G_hWnd);
#endif
if( wParam == 0 ) {
#ifdef DEF_HTMLCOMMOM // Html 促捞倔肺弊 何盒..
G_bDlg1 = FALSE;
EndDialog( G_hInternetWnd, 0 );
::SetFocus(G_hWnd);
#endif
G_pGame->m_bIsProgramActive = FALSE;
G_pGame->m_DInput.SetAcquire(FALSE);
}
else {
G_pGame->m_bIsProgramActive = TRUE;
G_pGame->m_DInput.SetAcquire(TRUE);
G_pGame->m_bCtrlPressed = FALSE;// 虐焊靛 风凭
//Alt +Tab 饶 颇老 函版 八荤 //20030619 侩林聪
if (G_pGame->bCheckImportantFile() == FALSE) {
MessageBox(G_pGame->m_hWnd, "File checksum error! Get Update again please!", "ERROR1", MB_ICONEXCLAMATION | MB_OK);
PostQuitMessage(0);
return 0;
}
// v2.04 怕胶农 傈券且嫐 八荤茄促.
if (__FindHackingDll__("CRCCHECK") != 1) {
G_pGame->ChangeGameMode(DEF_GAMEMODE_ONQUIT);
return NULL;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
#ifdef DEF_HTMLCOMMOM // mando 促捞倔肺弊冠胶啊 栋乐阑 版快 器目胶捞悼矫 冠胶 摧扁^^; 饶风~~快掺!!
case WM_SETFOCUS:
// if(G_bDlg1)
// ::SetFocus(G_hInternetWnd);
if(G_bDlg1)
{
short msX, msY, msZ;
char cLB, cRB;
DXC_dinput m_DInput2;
if (m_DInput2.bInit(G_hWnd,G_hInstance) == FALSE) {
MessageBox(G_hWnd, "This program requires DirectX7.0a!","ERROR",MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}
// 付快胶涝仿 滚瓢诀老版快俊父....
m_DInput2.UpdateMouseState(&msX, &msY, &msZ, &cLB, &cRB);
// m_DInput2.UpdateMouseState(0, 0, 0, &cLB, &cRB);
// 喘赴 滚瓢 捞 绝阑 版快..
if(!cLB && !cRB)
{
// ::GetCursorPos(&pPoint);
G_bDlg1 = FALSE;
EndDialog( G_hInternetWnd, 0 );
::SetFocus(G_hWnd);
// ::SetCursorPos(pPoint.x, pPoint.y);
// ::SetCursorPos(10, 10);
}
else // 促捞倔肺弊观栏肺 唱啊辑 努腐沁阑锭..
{
SetFocus(G_hInternetWnd);
if( G_pGame->m_DDraw.m_bFullMode == TRUE )
{
::SetCursorPos(510, 400);
}
else
{
int cx = GetSystemMetrics(SM_CXFULLSCREEN)/2;
int cy = GetSystemMetrics(SM_CYFULLSCREEN)/2;
if(cy>280) cy -= 40;
::SetCursorPos(510 + (cx-320), 400 + (cy-240));
}
}
// m_DInput2.Quit();
}
break;
#endif
case WM_SETCURSOR:
SetCursor(NULL);
return TRUE;
case WM_DESTROY:
OnDestroy();
return DefWindowProc(hWnd, message, wParam, lParam);
case WM_USER_GAMESOCKETEVENT:
G_pGame->OnGameSocketEvent(wParam, lParam);
break;
case WM_USER_LOGSOCKETEVENT:
G_pGame->OnLogSocketEvent(wParam, lParam);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return NULL;
}
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// v1.432
HINSTANCE hDll;
char cSearchDll[] = "rd`qbg-ckk";
char cRealName[12];
// v2.171
srand((unsigned)time(NULL));
char *pJammer = new char[(rand() % 100) +1];
G_pGame = new class CGame; // v2.171
ZeroMemory(cRealName, sizeof(cRealName));
strcpy(cRealName, cSearchDll);
for (WORD i = 0; i < strlen(cRealName); i++)
if (cRealName[i] != NULL) cRealName[i]++;
hDll = LoadLibrary(cRealName);
if( hDll == NULL ) {
MessageBox(NULL, "don't find search.dll", "ERROR!", MB_OK);
return 0;
}
#ifdef DEF_USING_WIN_IME
HINSTANCE hRichDll = LoadLibrary( "Riched20.dll" );
#endif
typedef int (MYPROC)(char *) ;
MYPROC *pFindHook;
pFindHook = (MYPROC *) GetProcAddress(hDll, "__FindHackingDll__") ;
if (pFindHook== NULL) {
MessageBox(NULL, "can't find search.dll", "ERROR!", MB_OK);
return 0 ;
}else if ((*pFindHook)("CRCCHECK") != 1) {
return 0 ;
}
FreeLibrary(hDll);
sprintf( szAppClass, "Client-I%d", hInstance);
if (!InitApplication( hInstance)) return (FALSE);
if (!InitInstance(hInstance, nCmdShow)) return (FALSE);
Initialize((char *)lpCmdLine);
#ifndef _DEBUG
if (OpenMutex(MUTEX_ALL_ACCESS, FALSE, "0543kjg3j31%") != NULL) {
MessageBox(NULL, "Only one Helbreath client program allowed!", "ERROR!", MB_OK);
return 0;
}
HANDLE hMutex = CreateMutex(NULL, FALSE, "0543kjg3j31%");
#endif
EventLoop();
#ifndef _DEBUG
ReleaseMutex(hMutex);
CloseHandle(hMutex);
#endif
delete[] pJammer; // v2.171
delete G_pGame; // v2.171
#ifdef DEF_USING_WIN_IME
FreeLibrary(hRichDll);
#endif
return 0;
}
BOOL InitApplication( HINSTANCE hInstance)
{
WNDCLASS wc;
wc.style = (CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS);
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = sizeof (int);
wc.hInstance = hInstance;
wc.hIcon = LoadCursor(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = szAppClass;
return (RegisterClass(&wc));
}
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
{
int cx = GetSystemMetrics(SM_CXFULLSCREEN)/2;
int cy = GetSystemMetrics(SM_CYFULLSCREEN)/2;
if(cy>280) cy -= 40;
//#ifdef DEF_FULL_SCREEN
G_hWnd = CreateWindowEx(NULL, szAppClass, "Helbreath Crusade", WS_POPUP, cx-320, cy-240,
640, 480, NULL, NULL, hInstance, NULL);
//#else
// G_hWnd = CreateWindowEx( 0, szAppClass, "HClient", WS_POPUP | WS_BORDER, cx-320, cy-240,
// 640, 480, NULL, NULL, hInstance, NULL );
//#endif
if (!G_hWnd) return FALSE;
G_hInstance = hInstance;
#ifdef DEF_HTMLCOMMOM // mando..
#ifdef WEBCTRL_AUTOINIT
m_hwndWebCtrl = CreateWebControl(
m_szHTML,
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
m_hwnd,
IDC_WEBCTRL );
#else
InitWebCtrl();
m_hwndWebCtrl = CreateWindow(
WC_WEBCTRL,
"",
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
G_hWnd,
(HMENU) IDC_WEBCTRL,
G_hInstance,//hInst,
NULL );
#endif
#endif
ShowWindow(G_hWnd, SW_SHOWDEFAULT);
UpdateWindow(G_hWnd);
#ifdef DEF_HTMLCOMMOM // mando..
::SetFocus(G_hWnd);
#endif
return TRUE;
}
void EventLoop()
{
register MSG msg;
while( 1 ) {
if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) ) {
if( !GetMessage( &msg, NULL, 0, 0 ) ) return;// msg.wParam;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if (G_pGame->m_bIsProgramActive) G_pGame->UpdateScreen();
else if (G_pGame->m_cGameMode == DEF_GAMEMODE_ONLOADING) G_pGame->UpdateScreen_OnLoading( FALSE );
else WaitMessage();
}
}
void OnDestroy()
{
G_pGame->m_bIsProgramActive = FALSE;
_StopTimer(G_mmTimer);
G_pGame->Quit();
WSACleanup();
#if DEF_LANGUAGE < 3 //措父苞 吝惫父 辆丰矫 权其捞瘤肺 啊厘..
GoHomepage();
#endif
PostQuitMessage(0);
}
void CALLBACK _TimerFunc(UINT wID, UINT wUser, DWORD dwUSer, DWORD dw1, DWORD dw2)
{
PostMessage(G_hWnd, WM_USER_TIMERSIGNAL, wID, NULL);
}
MMRESULT _StartTimer(DWORD dwTime)
{
TIMECAPS caps;
timeGetDevCaps(&caps, sizeof(caps));
timeBeginPeriod(caps.wPeriodMin);
return timeSetEvent(dwTime,0,_TimerFunc,0, (UINT)TIME_PERIODIC);
}
void _StopTimer(MMRESULT timerid)
{
TIMECAPS caps;
if (timerid != 0) {
timeKillEvent(timerid);
timerid = 0;
timeGetDevCaps(&caps, sizeof(caps));
timeEndPeriod(caps.wPeriodMin);
}
}
#if DEF_LANGUAGE == 3
unsigned __stdcall ThreadProc(void *ch)
{
char * cp, * token, cPacket[1024], cIPaddr[20], cPort[20], cTemp[256], cCmdLine[256];
char seps[] = "& ";
int iSended;
BOOL bRet;
G_bIsCalcSocketConnected = FALSE;
// 立加 矫档 矫埃 涝仿
G_dwCalcSocketTime = timeGetTime();
G_dwCalcSocketSendTime = G_dwCalcSocketTime;
ZeroMemory(cPacket, sizeof(cPacket));
cp = (char *)cPacket;
if (memcmp(G_cCmdLineTokenA, "/KWG", 4) == 0) {
// 内齿 岿靛
memcpy(cp, "KwGwMGS", 7);
cp += 8;
memcpy(cp, "CONNECT", 7);
cp += 8;
memcpy(cp, G_cCmdLineTokenB, strlen(G_cCmdLineTokenB));
cp += 16;
memcpy(cp, G_cCmdLineTokenC, strlen(G_cCmdLineTokenC));
cp += 16;
memcpy(cp, G_cCmdLineTokenD, strlen(G_cCmdLineTokenD));
cp += 16;
memcpy(cp, G_cCmdLineTokenE, strlen(G_cCmdLineTokenE));
cp += strlen(G_cCmdLineTokenE);
G_pCalcSocket = NULL;
G_pCalcSocket = new class XSocket(G_hWnd, 100);
bRet = G_pCalcSocket->bBlockConnect("game.kornetworld.com", 9000, NULL);
if (bRet == TRUE) {
G_pCalcSocket->bInitBufferSize(30000);
iSended = G_pCalcSocket->iSendMsgBlockingMode(cPacket, 256);
// 家南捞 楷搬登菌澜阑 钎矫.
G_bIsCalcSocketConnected = TRUE;
// 家南阑 稠喉废欧 葛靛肺
u_long arg = 1;
ioctlsocket(G_pCalcSocket->m_Sock, FIONBIO, &arg);
// 捞亥飘 皋矫瘤 积己
WSAAsyncSelect(G_pCalcSocket->m_Sock, G_hWnd, WM_USER_CALCSOCKETEVENT, FD_CLOSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -