Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: Change password ingame  (Visto 80 veces)

0 Miembros and 1 Guest are viewing this topic.

Online truongtienhp Posteado: December 21, 2025, 07:40:55 PM

  • 0 puntos por ventas
  • *
  • Rank: Usuario activo
  • Posts: 63
  • Gracias recibida: 31
I found this feature in the MUKEN version (https://tuservermu.com.ve/index.php?topic=56848.0) to be useful, so I'm sharing it.

Main
Spoiler for Hiden:

Create QuanLyTaiKhoan.cpp

Spoiler for Hiden:
Code: [Select]
#include "stdafx.h"
//-----------------------------------------------------------------------------------------------------------------------------------------------------
#if(DOIPASS_TK)
#include "QuanLyTaiKhoan.h"
//-----------------------------------------------------------------------------------------------------------------------------------------------------
#include "CustomMessage.h"
#include "Defines.h"
//-----------------------------------------------------------------------------------------------------------------------------------------------------
#include "Interface.h"
#include "User.h"
#include "Protocol.h"
#include "PrintPlayer.h"
#include "SItemOption.h"
#include "Import.h"
#include "Central.h"

//-----------------------------------------------------------------------------------------------------------------------------------------------------
QUAN_LY_TK G_QUAN_LY_TK;
//-----------------------------------------------------------------------------------------------------------------------------------------------------

#define MAX_TRANG_QUAN_LY    10  // OK

//-----------------------------------------------------------------------------------------------------------------------------------------------------
QUAN_LY_TK::QUAN_LY_TK()
{
//-----------------------------------------------------------------------------------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
void QUAN_LY_TK::DRAW_QUAN_LY()
{
DRAW_WINDOW_CHANGEPASS();
}

void QUAN_LY_TK::BinObeject()
{
gInterface.BindObject(eChangePass_Main, 31461, 640, 419, -1, -1);  // 31461
gInterface.BindObject(eChangePass_BTCLOSE, 0x7EC5, 36, 29, -1, -1);
gInterface.BindObject(eChangePass_OLD, 0x7AA3, 170, 21, -1, -1);
gInterface.BindObject(eChangePass_NEW, 0x7AA3, 170, 21, -1, -1);
gInterface.BindObject(eChangePass_BTOK, 0x7A5B, 54, 30, -1, -1);
}
void QUAN_LY_TK::LoadImages()
{

}

//-----------------------------------------------------------------------------------------------------------------------------------------------------


//-----------------------------------------------------------------------------------------------------------------------------------------------------

bool QUAN_LY_TK::EVENT_CLICK_CHANGEPASS(DWORD Event)
{
DWORD CurrentTick = GetTickCount();
DWORD Delay = (CurrentTick - gInterface.Data[eChangePass_BTCLOSE].EventTick);
DWORD Delay_2 = (CurrentTick - gInterface.Data[eChangePass_BTOK].EventTick);
// ----
if (!gInterface.Data[eChangePass_Main].OnShow)
{
return false;
}

if (gInterface.IsWorkZone(eChangePass_OLD))
{
gInterface.Data[eChangePass_OLD].Attribute = 1;
}
else
{
gInterface.Data[eChangePass_OLD].Attribute = 0;
}

if (gInterface.IsWorkZone(eChangePass_NEW))
{
gInterface.Data[eChangePass_NEW].Attribute = 1;
}
else
{
gInterface.Data[eChangePass_NEW].Attribute = 0;
}

if (gInterface.IsWorkZone(eChangePass_BTCLOSE))
{
// ----
if (Event == WM_LBUTTONDOWN)
{
gInterface.Data[eChangePass_BTCLOSE].OnClick = true;
return true;
}
// ----
gInterface.Data[eChangePass_BTCLOSE].OnClick = false;
// ----
if (Delay < 500)
{
return false;
}
// ----
gInterface.Data[eChangePass_BTCLOSE].EventTick = GetTickCount();
G_QUAN_LY_TK.OPEN_WINDOW_CHANGEPASS();
sprintf(gInterface.Data[eChangePass_OLD].StatValue, ""); //NONE
sprintf(gInterface.Data[eChangePass_OLD_HIDE].StatValue, ""); //NONE
sprintf(gInterface.Data[eChangePass_NEW].StatValue, ""); //NONE
sprintf(gInterface.Data[eChangePass_NEW_HIDE].StatValue, ""); //NONE
}
else if (gInterface.IsWorkZone(eChangePass_BTOK))
{
// ----
if (Event == WM_LBUTTONDOWN)
{
gInterface.Data[eChangePass_BTOK].OnClick = true;
return true;
}
// ----
gInterface.Data[eChangePass_BTOK].OnClick = false;
// ----
if (Delay_2 < 500)
{
return false;
}
// ----
gInterface.Data[eChangePass_BTOK].EventTick = GetTickCount();
//=== SEND GS
CSENDGS_DOIMK pMsg;
pMsg.TYPE = 0x01;
memcpy(pMsg.PASS_OLD, gInterface.Data[eChangePass_OLD].StatValue, sizeof(pMsg.PASS_OLD));
memcpy(pMsg.PASS_NEW, gInterface.Data[eChangePass_NEW].StatValue, sizeof(pMsg.PASS_NEW));
pMsg.Head.set(0xFF, 0x91, sizeof(pMsg));
DataSend((BYTE*)& pMsg, pMsg.Head.size);
//===========
G_QUAN_LY_TK.OPEN_WINDOW_CHANGEPASS();


sprintf(gInterface.Data[eChangePass_OLD].StatValue, ""); //NONE
sprintf(gInterface.Data[eChangePass_OLD_HIDE].StatValue, ""); //NONE
sprintf(gInterface.Data[eChangePass_NEW].StatValue, ""); //NONE
sprintf(gInterface.Data[eChangePass_NEW_HIDE].StatValue, ""); //NONE
}
// ----
return false;
}
#include "Util.h"

bool QUAN_LY_TK::CHANGEPASS_TEXTBOX(DWORD Event)
{
if (gInterface.Data[eChangePass_Main].OnShow && gInterface.Data[eChangePass_OLD].Attribute == 1)
{
char value[20];
int is_backspace = false;
int is_enter = false;
int IsDelete = false;

if (Event == VK_BACK)
{
is_backspace = true;
}
else if (Event == VK_RETURN)
{
is_enter = true;
}
else if (Event == VK_DELETE)
{
IsDelete = true;
}
else if ((Event >= 0x30 && Event <= 0x39) || (Event >= 0x60 && Event <= 0x69) || (Event >= 0x41 && Event <= 0x5A))
{
const int symbol = GetSymbolFromVK(Event);
if (symbol == 0)
{
return 1;
}
char buff[10];
sprintf(buff, "%c", symbol);
strcpy_s(value, buff);
}
else
{
return true;
}

if (is_backspace == true)
{
if (!strcmp(gInterface.Data[eChangePass_OLD].StatValue, ""))
{
return true;
}
gInterface.Data[eChangePass_OLD].StatValue[strlen(gInterface.Data[eChangePass_OLD].StatValue) - 1] = '\0';
gInterface.Data[eChangePass_OLD_HIDE].StatValue[strlen(gInterface.Data[eChangePass_OLD_HIDE].StatValue) - 1] = '\0';
}
else if (IsDelete == true)
{
strcpy_s(gInterface.Data[eChangePass_OLD].StatValue, "");
strcpy_s(gInterface.Data[eChangePass_OLD_HIDE].StatValue, "");
}
else
{
if (strlen(gInterface.Data[eChangePass_OLD].StatValue) < 10)
{
if (!strcmp(gInterface.Data[eChangePass_OLD].StatValue, ""))
{
strcpy_s(gInterface.Data[eChangePass_OLD].StatValue, value);
strcpy_s(gInterface.Data[eChangePass_OLD_HIDE].StatValue, "*");
}
else
{
strcat_s(gInterface.Data[eChangePass_OLD].StatValue, value);
strcat_s(gInterface.Data[eChangePass_OLD_HIDE].StatValue, "*");
}
}
}
}

else if (gInterface.Data[eChangePass_Main].OnShow && gInterface.Data[eChangePass_NEW].Attribute == 1)
{
char value[20];
int is_backspace = false;
int is_enter = false;
int IsDelete = false;

if (Event == VK_BACK)
{
is_backspace = true;
}
else if (Event == VK_RETURN)
{
is_enter = true;
}
else if (Event == VK_DELETE)
{
IsDelete = true;
}
else if ((Event >= 0x30 && Event <= 0x39) || (Event >= 0x60 && Event <= 0x69) || (Event >= 0x41 && Event <= 0x5A))
{
const int symbol = GetSymbolFromVK(Event);
if (symbol == 0)
{
return 1;
}
char buff[10];
sprintf(buff, "%c", symbol);
strcpy_s(value, buff);
}
else
{
return true;
}

if (is_backspace == true)
{
if (!strcmp(gInterface.Data[eChangePass_NEW].StatValue, ""))
{
return true;
}
gInterface.Data[eChangePass_NEW].StatValue[strlen(gInterface.Data[eChangePass_NEW].StatValue) - 1] = '\0';
gInterface.Data[eChangePass_NEW_HIDE].StatValue[strlen(gInterface.Data[eChangePass_NEW_HIDE].StatValue) - 1] = '\0';
}
//else if (is_enter == true)
//{
// //gPartySearch.SendPartyRequest(gPartySearch.currentIndex, gInterface.Data[OBJECT_PARTYPASSWORD_TEXTBOX].StatValue);
// //gPartySearch.party_search_password_switch_state();
// return 1;
//}
else if (IsDelete == true)
{
strcpy_s(gInterface.Data[eChangePass_NEW].StatValue, "");
strcpy_s(gInterface.Data[eChangePass_NEW_HIDE].StatValue, "");
}
else
{
if (strlen(gInterface.Data[eChangePass_NEW].StatValue) < 10)
{
if (!strcmp(gInterface.Data[eChangePass_NEW].StatValue, ""))
{
strcpy_s(gInterface.Data[eChangePass_NEW].StatValue, value);
strcpy_s(gInterface.Data[eChangePass_NEW_HIDE].StatValue, "*");
}
else
{
strcat_s(gInterface.Data[eChangePass_NEW].StatValue, value);
strcat_s(gInterface.Data[eChangePass_NEW_HIDE].StatValue, "*");
}
}
}
}
return false;
}

void QUAN_LY_TK::DRAW_WINDOW_CHANGEPASS()
{

if (gInterface.CheckWindow(CashShop)
|| gInterface.CheckWindow(SkillTree)
|| gInterface.CheckWindow(FullMap)
|| gInterface.CheckWindow(MoveList)
|| (gInterface.CheckWindow(Inventory)
&& gInterface.CheckWindow(ExpandInventory)
&& gInterface.CheckWindow(Store))
|| (gInterface.CheckWindow(Inventory)
&& gInterface.CheckWindow(Warehouse)
&& gInterface.CheckWindow(ExpandWarehouse)))
{
return;
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------
if (!gInterface.Data[eChangePass_Main].OnShow)
{
return;
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------
int JCResto = pWinWidth / pWinHeightReal / 2 - 320;
float MainW = 200;
float MainH = 170;
float CP_StartX = (MAX_WIN_WIDTH / 2) - (MainW / 2)+JCResto;
float MainCenter = StartX + (MainWidth / 2);
float ButtonX = MainCenter - (29.0 / 2);

float CuaSoW = 200.0;
float CuaSoH = 170.0;
//int JCResto = pWinWidth / pWinHeightReal / 2 - 320;
float StartX = (MAX_WIN_WIDTH / 2) - (CuaSoW / 2)+JCResto;
float StartY = 50.0;
//gCentral.gDrawWindowCustom(StartX, StartY, CuaSoW, CuaSoH, eChangePass_Main, "Thay Đổi Mật Khẩu Tài Khoản");

//-----------------------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------------------

pSetCursorFocus = true;

//-----------------------------------------------------------------------------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------------------------------------------------------------------
gCItemSetOption.ItemTooltipS15(CP_StartX, gInterface.Data[eChangePass_Main].Y + 50, MainW, MainH, 0.0, 0);

float CP_StartY = gInterface.Data[eChangePass_Main].Y + 50;
//-----------------------------------------------------------------------------------------------------------------------------------------------------
gInterface.DrawGUI(eChangePass_BTCLOSE, CP_StartX+ MainW-34, gInterface.Data[eChangePass_Main].Y + 50);
if (gInterface.IsWorkZone(eChangePass_BTCLOSE))
{
DWORD Color = eGray150;
gInterface.DrawColoredGUI(eChangePass_BTCLOSE, gInterface.Data[eChangePass_BTCLOSE].X, gInterface.Data[eChangePass_BTCLOSE].Y, Color);
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
gInterface.DrawFormat(eWhite, CP_StartX, gInterface.Data[eChangePass_Main].Y + 70, MainW, 3, "Thay Đổi Mật Khẩu Tài Khoản");
if (gInterface.Data[eChangePass_Main].FirstLoad == true)
{
if (strlen(gInterface.Data[eChangePass_OLD].StatValue) == 0)
sprintf(gInterface.Data[eChangePass_OLD].StatValue, ""); //NONE

if (strlen(gInterface.Data[eChangePass_NEW].StatValue) == 0)
sprintf(gInterface.Data[eChangePass_NEW].StatValue, ""); //NONE
}
//=== Pass Cu
gInterface.DrawGUI(eChangePass_OLD, CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_OLD].Width / 2), CP_StartY + 50);
if (gInterface.Data[eChangePass_OLD].Attribute == 1)
{
gInterface.DrawColoredGUI(eChangePass_OLD, CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_OLD].Width / 2), CP_StartY + 50, eGray190);
}
gInterface.DrawText(eWhite, CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_OLD].Width / 2)+10, CP_StartY + 55, 170, 1, "Old Password");
gInterface.DrawText(eWhite, (CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_NEW].Width / 2)) + 60, CP_StartY + 55, 100, 3, gInterface.Data[eChangePass_OLD_HIDE].StatValue);
//=== Pass Moi
gInterface.DrawGUI(eChangePass_NEW, CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_NEW].Width / 2), CP_StartY + 80);

if (gInterface.Data[eChangePass_NEW].Attribute == 1)
{
gInterface.DrawColoredGUI(eChangePass_NEW, CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_NEW].Width / 2), CP_StartY + 80, eGray190);
}

gInterface.DrawText(eWhite, CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_NEW].Width / 2) + 10, CP_StartY + 85, 170, 1, "New Password");
gInterface.DrawText(eWhite, (CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_NEW].Width / 2))+60, CP_StartY + 85, 100, 3, gInterface.Data[eChangePass_NEW_HIDE].StatValue);
gInterface.DrawButton(eChangePass_BTOK, CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_BTOK].Width / 2), CP_StartY+ MainH -(50), 0, 0);

if (gInterface.IsWorkZone(eChangePass_BTOK))
{
int ScaleY = 30;
// ----
if (gInterface.Data[eChangePass_BTOK].OnClick)
{
ScaleY = 60;
}
// ----
gInterface.DrawButton(eChangePass_BTOK, CP_StartX + (MainW / 2) - (gInterface.Data[eChangePass_BTOK].Width / 2), CP_StartY + MainH - (50), 0, ScaleY);
}
//==============
if (gInterface.Data[eChangePass_Main].FirstLoad == true)
{
gInterface.Data[eChangePass_Main].FirstLoad = false;
}
}

#endif

QuanLyTaiKhoan.cpp

Spoiler for Hiden:
Code: [Select]
#pragma once
#if(DOIPASS_TK)
#include "Import.h"
#include "Interface.h"
#include "Protocol.h"
//-----------------------------------------------------------------------------------------------------------------------------------------------------
class QUAN_LY_TK
{
public:
//-----------------------------------------------------------------------------------------------------------------------------------------------------
QUAN_LY_TK();
void DRAW_QUAN_LY();

//-----------------------------------------------------------------------------------------------------------------------------------------------------
float MainWidth;
float MainHeight;
float StartY;
float StartX;
DWORD ClickTick;
//-----------------------------------------------------------------------------------------------------------------------------------------------------

void BinObeject();

void LoadImages();

//========== CHange Pass
void DRAW_WINDOW_CHANGEPASS();
void OPEN_WINDOW_CHANGEPASS() { gInterface.Data[eChangePass_Main].OnShow ^= true; gInterface.Data[eChangePass_Main].FirstLoad = true; *(BYTE*)0xE8C5AC ^= 1;};
bool EVENT_CLICK_CHANGEPASS(DWORD Event);
bool CHANGEPASS_TEXTBOX(DWORD Event);

//-----------------------------------------------------------------------------------------------------------------------------------------------------
}; extern QUAN_LY_TK G_QUAN_LY_TK;
//===================================================================================================================================================================
#endif


Open: Controller.cpp

Spoiler for Hiden:
Find:
Code: [Select]
bool Controller::Load()
{

if( !this->KeyboardHook )
{

Add
Code: [Select]
		this->KeyboardHook = SetWindowsHookExA(WH_KEYBOARD, this->Keyboard, gController.Instance, GetCurrentThreadId());

Find:
Code: [Select]
LRESULT Controller::Mouse(int Code, WPARAM wParam, LPARAM lParam)
{
..........................................
case WM_LBUTTONDOWN:

Add:
Code: [Select]
#if(DOIPASS_TK)	
G_QUAN_LY_TK.EVENT_CLICK_CHANGEPASS(wParam);
#endif

Find
Code: [Select]
LRESULT Controller::Keyboard(int Code, WPARAM wParam, LPARAM lParam)
{
if ((Code == HC_ACTION) && (wParam == WM_KEYDOWN))
{
KBDLLHOOKSTRUCT Hook = *((KBDLLHOOKSTRUCT*)lParam);

Add
Code: [Select]
#if(DOIPASS_TK)
if(GetForegroundWindow() == pGameWindow && pPlayerState == GameProcess) //
if(Code == HC_ACTION)
{
if(((DWORD)lParam & (1 << 30)) != 0 && ((DWORD)lParam & (1 << 31)) != 0)
{
if( GetForegroundWindow() == *(HWND*)(MAIN_WINDOW) )
{
G_QUAN_LY_TK.CHANGEPASS_TEXTBOX(wParam);
gCentral.keyPressed(wParam);
}
}
}
#endif

Open Interface.cpp

Spoiler for Hiden:
Find:
Code: [Select]
void Interface::RenderObjectSystem()
{

Add:
Code: [Select]
#if(DOIPASS_TK)	
G_QUAN_LY_TK.BinObeject();
#endif

Find
Code: [Select]
void Interface::Work()
{

Add
Code: [Select]
#if(DOIPASS_TK)	
G_QUAN_LY_TK.DRAW_QUAN_LY();
#endif

Find
[code]
void Interface::Work()
{
........................................
        if( GetForegroundWindow() == pGameWindow )
        {

Add
Code: [Select]
#if(DOIPASS_TK)
static bool F9_WasPressed = false;
static DWORD F9_LastTick = 0;
DWORD CurrentTick = GetTickCount();

if (GetKeyState(VK_F9) & 0x8000)
{
if (!F9_WasPressed && (CurrentTick - F9_LastTick > 300))
{
G_QUAN_LY_TK.OPEN_WINDOW_CHANGEPASS();
F9_WasPressed = true;
F9_LastTick = CurrentTick;
}
}
else
{
F9_WasPressed = false;
}
#endif

Open Interface.h

Spoiler for Hiden:
Find
Code: [Select]
enum ObjectID
{

Add
Code: [Select]
 #if(DOIPASS_TK)
QUAN_LY_TK_MAIN,
QUAN_LY_TK_CLOSE,
#endif

Open stdafx.h

Add
Code: [Select]
#define DOIPASS_TK				1


GameServer
Spoiler for Hiden:

Open DSProtocol.spp

Find
Spoiler for Hiden:
Code: [Select]
void DataServerProtocolCore(BYTE head,BYTE* lpMsg,int size) // OK
{
PROTECT_START

switch(head)
{
..................................
case 0xFB:
switch (((lpMsg[0] == 0xC1) ? lpMsg[3] : lpMsg[4]))
{

Add
Code: [Select]
#if (DOIPASS_TK)
case 0x02:
DSSENDGS_DOIMK_KQ((DSGS_DOIMK_KQ*)lpMsg);
break;
#endif
Open Protocol.cpp

Find
Spoiler for Hiden:
Code: [Select]
void ProtocolCore(BYTE head,BYTE* lpMsg,int size,int aIndex,int encrypt,int serial) // OK
{
PROTECT_START
........................
switch(head)
{
......................
case 0xFF:
switch (((lpMsg[0] == 0xC1) ? lpMsg[3] : lpMsg[4]))
{
.......................................
#if (DOIPASS_TK)
case 0x91:
CSEND_CHANGEPASS((CSENDGS_DOIMK*)lpMsg, aIndex);
break;
#endif

End of Protocol.cpp
Add
Code: [Select]
#if (DOIPASS_TK)
#include "DSProtocol.h"
#include "GameMain.h"
void CSEND_CHANGEPASS(CSENDGS_DOIMK* lpMsg, int aIndex)
{
if (!OBJECT_RANGE(aIndex))
{
return;
}
LPOBJ lpObj = &gObj[aIndex];
if (lpMsg->TYPE != 0x01)
{
gNotice.GCNoticeSend(lpObj->Index, 1, 0, 0, 0, 0, 0, "[Wrong data!");
return;
}
if (strlen(lpMsg->PASS_OLD) < 1 || strlen(lpMsg->PASS_NEW) < 1)
{
gNotice.GCNoticeSend(lpObj->Index, 1, 0, 0, 0, 0, 0, "Please type new pass");
return;
}
if (strcmp(lpMsg->PASS_OLD, lpMsg->PASS_NEW) == 0)
{
gNotice.GCNoticeSend(lpObj->Index, 1, 0, 0, 0, 0, 0, "Old and new pass are difference!");
return;
}

CSENDGS_DOIMK_INFOSAVE pMsg = { 0 };
CSENDGS_DOIMK_INFOSAVE pRequest;
pRequest.header.set(0xD9, 0x09, sizeof(pRequest));
pRequest.gIndex = aIndex;
memcpy(pRequest.ACCOUNT, lpObj->Account, MAX_ACCOUNT_LEN);
memcpy(pRequest.PASS_OLD, lpMsg->PASS_OLD, MAX_ACCOUNT_LEN);
memcpy(pRequest.PASS_NEW, lpMsg->PASS_NEW, MAX_ACCOUNT_LEN);
gDataServerConnection.DataSend((BYTE*)&pRequest, pRequest.header.size);
}

void DSSENDGS_DOIMK_KQ(DSGS_DOIMK_KQ* lpMsg)
{
if (!OBJECT_RANGE(lpMsg->gIndex))
{
return;
}
LPOBJ lpObj = &gObj[lpMsg->gIndex];
if (lpMsg->result == 1)
{
gNotice.GCNoticeSend(lpObj->Index, 1, 0, 0, 0, 0, 0, "TK kh��ch� xᣠ!");
return;
}
if (lpMsg->result == 2)
{
gNotice.GCNoticeSend(lpObj->Index, 1, 0, 0, 0, 0, 0, "Old password incorrect!");
return;
}
if (lpMsg->result == 3)
{
gNotice.GCNoticeSend(lpObj->Index, 1, 0, 0, 0, 0, 0, "Change successful!!!");
return;
}
}
#endif

Open Protocol.h

Spoiler for Hiden:
Add
Code: [Select]
#if (DOIPASS_TK)
struct CSENDGS_DOIMK
{
PSBMSG_HEAD Head; // C3:F3:03
BYTE TYPE;
char PASS_OLD[11];
char PASS_NEW[11];
};

Open stdafx.h

Add
Code: [Select]
#define DOIPASS_TK		1

DataServer
Spoiler for Hiden:

Open DataServerProtocol.cpp

Find
Spoiler for Hiden:
Code: [Select]
void DataServerProtocolCore(int index,BYTE head,BYTE* lpMsg,int size) // OK
{
PROTECT_START
...........................
switch(head)
{
.........................
case 0xD9:
switch(((lpMsg[0]==0xC1)?lpMsg[3]:lpMsg[4]))
{

Add
Code: [Select]
#if (DOIPASS_TK == 1)
case 0x09:
GDDOIMK_SAVEDB((CSENDGS_DOIMK_INFOSAVE*)lpMsg, index); // Only add in the case 0xD9
break;
#endif

End off DataServerProtocol.cpp
Add
Code: [Select]
#if (DOIPASS_TK == 1)
void GDDOIMK_SAVEDB(CSENDGS_DOIMK_INFOSAVE* lpMsg, int aIndex) // OK
{
DSGS_DOIMK_KQ pMsg;
pMsg.h.set(0xFB, 0x02, sizeof(pMsg));
pMsg.gIndex = lpMsg->gIndex;
//== Lay MK hien Tai
if (gQueryManager.ExecQuery("SELECT memb__pwd FROM MEMB_INFO WHERE memb___id='%s' COLLATE Latin1_General_BIN", lpMsg->ACCOUNT) == 0 || gQueryManager.Fetch() == SQL_NO_DATA)
{
gQueryManager.Close();
pMsg.result = 1; //== Khong Ton Tai TK
gSocketManager.DataSend(aIndex, (BYTE*)&pMsg, pMsg.h.size);
return;
}
char password[11] = { 0 };

gQueryManager.GetAsString("memb__pwd", password, sizeof(password));

if (strcmp(lpMsg->PASS_OLD, password) != 0) //== Pass CU Khong dung
{
gQueryManager.Close();
pMsg.result = 2; //== Sai MK
gSocketManager.DataSend(aIndex, (BYTE*)&pMsg, pMsg.h.size);
return;
}

gQueryManager.Close();

//=== DOi MK MOi
gQueryManager.ExecQuery("UPDATE MEMB_INFO SET memb__pwd = '%s' WHERE memb___id = '%s'", lpMsg->PASS_NEW, lpMsg->ACCOUNT);
pMsg.result = 3; //== Doi MK THanh Cong
gSocketManager.DataSend(aIndex, (BYTE*)&pMsg, pMsg.h.size);
LogAdd(LOG_RED, "[ChangePass] [%s] Doi MK [%s] -> [%s]", lpMsg->ACCOUNT, lpMsg->PASS_OLD, lpMsg->PASS_NEW);
gQueryManager.Close();
}
#endif

Open DataServerProtocol.h

Spoiler for Hiden:
Add
Code: [Select]
#if (DOIPASS_TK == 1)
//==Change Pass
#pragma pack(push, 1)
struct CSENDGS_DOIMK_INFOSAVE
{
PSBMSG_HEAD header;
int  gIndex;
char ACCOUNT[11];
char PASS_OLD[11];
char PASS_NEW[11];

};
#pragma pack(pop)
void GDDOIMK_SAVEDB(CSENDGS_DOIMK_INFOSAVE* lpMsg, int aIndex);
struct DSGS_DOIMK_KQ
{
PSBMSG_HEAD h;
int  gIndex;
BYTE result;
};
#endif
Open stdafx.h

Add
Code: [Select]
#define DOIPASS_TK				1
[/spoiler]

Gracias:


Offline phuongcuongmsqm #1 Posteado: December 21, 2025, 07:48:46 PM

  • 0 puntos por ventas
  • *
  • Rank: Sup. destacado
  • Posts: 107
  • Gracias recibida: 30
  • vn
AI CHOI DLL NUA MA SHE PRO


Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
0 Replies
366 Views
Last post November 02, 2022, 04:36:10 AM
by Julifpm
0 Replies
321 Views
Last post November 10, 2022, 06:00:13 AM
by Davidixg
0 Replies
213 Views
Last post November 29, 2022, 01:49:06 PM
by Svetlvbc
0 Replies
140 Views
Last post April 27, 2023, 07:35:30 AM
by Daviddmc
5 Replies
1080 Views
Last post July 17, 2023, 11:25:26 PM
by Saige