Source Registro en Main, JoinServer, Gameserver By OBBY Season 6les compartos la guia completa para agregar el sistema de Registro en Main... Recuerden que las todas las beses no son iguales...
Espero que les funciones a todos rebote
Protocol.htypedef struct
{
#pragma pack(1)
PSBMSG_HEAD Header;
char lpszID[10];
char lpszPass[20];
char lpszPCode[20];
char lpszEmail[50];
DWORD TickCount;
BYTE Versión[5];
Serie BYTE[16];
#pragma pack()
} PBMSG_REGISTER_ACCOUNT, * LPPBMSG_REGISTER_ACCOUNT;
Protocol.cpp#include "LoginMainWin.h"
// Dentro de:
case 0xF1:
switch(((lpMsg[0 ]==0xC1)?lpMsg[3]:lpMsg[4]))
{
.
.
.
.
caso 0x12:
g_pLoginMainWin.ReciveCreateAccount(((lpMsg[0]==0xC1)?lpMsg[4]:lpMsg[5]));
romper;
}
break;
Interface.cpp// Agregar Seccion IMAGEN
// AutoLogin / Register
LoadBitmapA("Custom\\Desig\\login_auto.tga", 531141, GL_NEAREST, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\login_auto.tga", 531141, GL_NEAREST, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\Login.tga", 71621, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\1.tga", 71622, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\2.tga", 71623, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\3.tga", 71624, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\4.tga", 71625, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\5.tga", 71626, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\6.tga", 71627, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\8.tga", 71629, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\9.tga", 71630, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\10.tga", 71630, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\login_back.tga", 71631, GL_LINEAR, GL_CLAMP, 1, 0);
LoadBitmapA("Personalizado\\Diseño\\reloadcap.jpg", 71632, GL_LINEAR, GL_CLAMP, 1, 0);
Main.cpp#include "LoginMainWin.h"
#include "AutoLoginWin.h"
// Agregar dentro de:
extern "C" _declspec(dllexport) void EntryProc() / / Aceptar
{
//
//
//
//
g_pLoginMainWin.Init(); // Inicio de sesión automático / Registro
AutoLogin.Load(); // Auto Login / Register
}
Seguimos con SRC JOINSERVEstdafx.h// Abajo de
#define JOINSERVER_VERSION
// Agregar:
#define OBBY 1
JoinServerProtocol.cpp// Abajo de :
caso 0x30:
GJExternalDisconnectAccountRecv((SDHP_EXTERNAL_DISCONNECT_ACCOUNT_RECV*)lpMsg,index);
romper;
// Agregar:
#if(OBBY)
case 0x40:
GJRegisterAccountRecv((SDHP_REGISTER_ACCOUNT_SEND*)lpMsg,index);
romper;
#endif
// Abajo de:
gLog.Output(LOG_ACCOUNT,"[AccountInfo] Cuenta conectada (Cuenta: %s, IpAddress: %s, GameServerCode: %d)",AccountInfo.Account,AccountInfo. Dirección IP, Información de la cuenta. Código del servidor del juego);
}
// Agregar:
#if(OBBY)
void GJRegisterAccountRecv(SDHP_REGISTER_ACCOUNT_SEND* lpMsg,int index)
{
SDHP_CONNECT_ACCOUNT_SEND pMsg;
pMsg.header.set(0x40,sizeof(pMsg));
pMsj.index = lpMsg->index;
memcpy(pMsg.cuenta,lpMsg->cuenta,tamaño(pMsg.cuenta));
pMsg.result = CREATE_ACCOUNT_FAIL_ID;
if(CheckTextSyntax(lpMsg->cuenta,tamaño(lpMsg->cuenta)) == 0)
{
pMsg.result = CREATE_ACCOUNT_FAIL_RESIDENT;
gSocketManager.DataSend(índice,(BYTE*)&pMsg,pMsg.header.size);
LogAdd(LOG_RED,"Cuenta %s Registrar falla en la sintaxis!");
devolver;
}
if(gAccountManager.GetAccountCount() >=
#if PROTECT_STATE
gJoinServerMaxAccount[gProtect.m_AuthInfo.PackageType][gProtect.m_AuthInfo.PlanType]
#else
MAX_ACCOUNT
#endif
)
if(gAccountManager.GetAccountCount() >= gJoinServerMaxAccount[gProtect.m_AuthInfo.PackageType][gProtect.m_AuthInfo.PlanType])
{
pMsg.result = CREATE_ACCOUNT_FAIL_RESIDENT;
gSocketManager.DataSend(índice,(BYTE*)&pMsg,pMsg.header.size);
LogAdd(LOG_RED,"Error en el registro de la cuenta %s, ¡¡¡CONEXIÓN!!!");
devolver;
}
if(MD5Encryption == 0)
{
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.Cerrar();
if (gQueryManager.ExecQuery("INSERT INTO dbo.MEMB_INFO(memb___id, memb__pwd, memb_name, sno__numb, mail_addr, mail_chek, block_code, ctl1_code) VALORES ('%s', '%s', '%s', '%s' , '%s', 1, 0, 1)",
lpMsg->cuenta,
lpMsg->contraseña,
"JoinServer",
lpMsg->código personal,
lpMsg->Email) == TRUE)
{
gQueryManager.Close();
pMsg.result = CREAR_CUENTA_ÉXITO;
gLog.Output(LOG_ACCOUNT, "[AccountInfo] Cuenta creada (Cuenta: %s, Contraseña: %s )", lpMsg->cuenta, lpMsg->contraseña);
}
}
else
{
pMsg.result = CREATE_ACCOUNT_FAIL_ID;
gQueryManager.Cerrar();
}
}
else
{
if(gQueryManager.ExecQuery("SELECT memb__pwd FROM MEMB_INFO WHERE memb___id='%s'",lpMsg->account) == 0 || gQueryManager.Fetch() == SQL_NO_DATA) { gQueryManager.Close(
)
;
if (gQueryManager.ExecQuery("INSERT INTO dbo.MEMB_INFO(memb___id, memb__pwd, memb_name, sno__numb, mail_addr, mail_chek, block_code, ctl1_code) VALORES ('%s', '%s', '%s', '%s' , '%s', 1, 0, 1)",
lpMsg->cuenta,
lpMsg->contraseña,
"JoinServer",
lpMsg->códigopersonal,
pMsg.result = CREAR_CUENTA_ÉXITO;
gLog.Output(LOG_ACCOUNT, "[AccountInfo] Cuenta creada (Cuenta: %s, Contraseña: %s )", lpMsg->cuenta, lpMsg->contraseña);
}
}
else
{
pMsg.result = CREATE_ACCOUNT_FAIL_ID;
gQueryManager.Cerrar();
}
}
gSocketManager.DataSend(índice,(BYTE*)&pMsg,pMsg.header.size);
}
#endif
JoinServerProtocol.h//Abajo de
#pragma once
//Agregar Esto
#define CREATE_ACCOUNT_FAIL_ID 0
#define CREATE_ACCOUNT_SUCCESS 1
#define CREATE_ACCOUNT_FAIL_RESIDENT 2
// Abajo de:
char IpAddress[16];
};
// Agregar:
#if(OBBY)
struct SDHP_REGISTER_ACCOUNT_SEND
{
PBMSG_HEAD header; // C1:01
índice de PALABRA;
cuenta char[11];
contraseña de char[11];
char código personal[11];
char Correo electrónico[50];
};
#endif [code]
[code] // Abajo de:
void GJAccountLockSaveRecv(SDHP_LOCK_SAVE_RECV* lpMsg,int index);
// Agregar:
#if(OBBY)
void GJRegisterAccountRecv(SDHP_REGISTER_ACCOUNT_SEND* lpMsg,int index);
#endif
Seguimos con SRC GAMERSERVEstdafx.h// Agregar:
#define OBBY 1
JSProtocol.cpp// Abajo de:
case 0x30:
JGAccountAlreadyConnectedRecv((SDHP_ACCOUNT_ALREADY_CONNECTED_RECV*)lpMsg);
romper;
// Agregar:
#if(OBBY)
case 0x40:
JGRegisterAccountRecv((SDHP_CONNECT_ACCOUNT_RECV*)lpMsg);
romper;
#endif
// Abajo de:
void JGServerInfoRecv(SDHP_JOIN_SERVER_INFO_RECV* lpMsg) // OK
{
}
// Agregar:
#if(OBBY)
void JGRegisterAccountRecv(SDHP_CONNECT_ACCOUNT_RECV* lpMsg) // OK
{
if(OBJECT_RANGE( lpMsg->index) == 0)
{
volver;
}
if((gObj[lpMsg->index].LoginMessageSend--) == 0)
{
CloseClient(lpMsg->index);
devolver;
}
if(gObj[lpMsg->index].Connected != OBJECT_CONNECTED)
{
GJDisconnectAccountSend(lpMsg->index,lpMsg->account,gObj[lpMsg->index].IpAddr);
devolver;
}
GCRegisterAccountSend(lpMsg->índice, lpMsg->resultado);
devolver;
}
#endif [code]
[code]// Abajo de:
gJoinServerConnection.DataSend((BYTE*)&pMsg,pMsg.header.size);
}
// Agregar:
#if(OBBY)
void GJRegisterAccountSend(int aIndex,char* cuenta,char* contraseña,char* código personal,char* Email)
{
SDHP_REGISTER_ACCOUNT_SEND pMsj;
pMsg.header.set(0x40,sizeof(pMsg));
pMsg.index = aIndex;
memcpy(pMsg.cuenta,cuenta,tamaño(pMsg.cuenta));
memcpy(pMsg.contraseña,contraseña,tamaño(pMsg.contraseña));
memcpy(pMsg.personalcode,personalcode,sizeof(pMsg.personalcode));
memcpy(pMsg.Email,Email,sizeof(pMsg.Email));
gJoinServerConnection.DataSend((BYTE*)&pMsg,pMsg.header.size);
}
#endif [code]
JSProtocol.h
[code]// Abajo de:
char IpAddress[16];
};
// Agregar:
#if(OBBY)
struct SDHP_REGISTER_ACCOUNT_SEND
{
PBMSG_HEAD header; // C1:01
índice de PALABRA;
cuenta char[11];
contraseña de char[11];
char código personal[11];
char Correo electrónico[50];
};
#endif
// Abajo de:
void GJAccountLockSaveSend(int aIndex,int Lock);
// Agregar:
#if(OBBY)
void JGRegisterAccountRecv(SDHP_CONNECT_ACCOUNT_RECV* lpMsg);
void GJRegisterAccountSend(int aIndex,char* cuenta,char* contraseña,char* código personal,char* IpAddress);
#endif
Protocol.cpp// Abajo de:
case 0x02:
CGCloseClientRecv((PMSG_CLOSE_CLIENT_RECV*)lpMsg,aIndex);
romper;
// Agregar:
#if(OBBY)
caso 0x12:
CGRegisterAccountRecv((PMSG_REGISTER_ACCOUNT_RECV*)lpMsg,aIndex);
devolver;
#endif
// Abajo de:
GJConnectAccountSend(aIndex, cuenta, contraseña, lpObj->IpAddr);
}
#endif
}
// Agregar:
#if(OBBY)
void CGRegisterAccountRecv(PMSG_REGISTER_ACCOUNT_RECV* lpMsg,int aIndex)
{
LPOBJ lpObj = &gObj[aIndex];
if(lpObj->Connected != OBJECT_CONNECTED)
{
CloseClient(aIndex);
devolver;
}
if(memcmp(gServerInfo.m_ServerVersion,lpMsg->ClientVersion,sizeof(lpMsg->ClientVersion)) != 0)
{
GCConnectAccountSend(aIndex,6);
devolver;
}
if(memcmp(gServerInfo.m_ServerSerial,lpMsg->ClientSerial,sizeof(lpMsg->ClientSerial)) != 0)
{
GCConnectAccountSend(aIndex,6);
devolver;
}
if(lpObj->LoginMessageSend == 0)
{
lpObj->LoginMessageSend++;
lpObj->LoginMessageCount++;
lpObj->ConnectTickCount = GetTickCount();
lpObj->ClientTickCount = lpMsg->TickCount;
lpObj->ServerTickCount = GetTickCount();
cuenta char[11] = {0};
PacketArgumentDecrypt(cuenta,lpMsg->cuenta,(tamañode(cuenta)-1));
char contraseña[11] = {0};
PacketArgumentDecrypt(contraseña,lpMsg->contraseña,(tamañode(contraseña)-1));
char CódigoPersonal[11] = {0};
PacketArgumentDecrypt(PersonalCode,lpMsg->PersonalCode,(sizeof(PersonalCode)-1));
char Correo electrónico personal[50] = {0};
PacketArgumentDecrypt(Correo electrónico personal, lpMsg->szEmail, (tamaño de (Correo electrónico personal)-1));
lpObj->MapServerMoveRequest = 0;
lpObj->ÚltimoCódigoServidor = -1;
lpObj->DestMap = -1;
lpObj->DestX = 0;
lpObj->DestY = 0;
GJRegisterAccountSend(aIndex,cuenta,contraseña,PersonalCode, PersonalEmail);
}
}
#endif [code]
[code]// Abajo de:
DataSend(aIndex,(BYTE*)&pMsg,pMsg.header.size);
}
// Agregar:
#if(OBBY)
void GCRegisterAccountSend(int aIndex,BYTE result) // OK
{
PMSG_CONNECT_ACCOUNT_SEND pMsg;
pMsg.header.set(0xF1,0x12,sizeof(pMsg));
pMsj.resultado = resultado;
DataSend(aIndex,(BYTE*)&pMsg,pMsg.header.size);
}
#endif
Protocol.h// Abajo de:
BYTE ClientSerial[16];
#pragma pack()
#endif
};
// Agregar:
#if(OBBY)
struct PMSG_REGISTER_ACCOUNT_RECV
{
#pragma pack(1)
PSBMSG_HEAD header; // C3:F1:01
cuenta char[10];
contraseña char[20];
char CódigoPersonal[20];
char szEmail[50];
DWORD TickCount;
BYTE ClientVersion[5];
BYTE ClientSerial[16];
#paquete pragmático()
};
#endif
// Abajo de:
void CGReqCastleHuntZoneEntrance(PMSG_REQ_MOVE_TO_CASTLE_HUNTZONE * aRecv, int iIndex);
// Agregar:
#if(OBBY)
void GCRegisterAccountSend(int aIndex,BYTE result);
void CGRegisterAccountRecv(PMSG_REGISTER_ACCOUNT_RECV* lpMsg,int aIndex);
#endif
Creditos
OBBY