HandleApproveNamePacket refactored from HandlePacket.

This commit is contained in:
Arthur Ice 2013-03-10 14:30:59 -07:00
parent 1f206c1156
commit a8400803cc
2 changed files with 52 additions and 42 deletions

View File

@ -368,7 +368,7 @@ void Client::SendPostEnterWorld() {
safe_delete(outapp); safe_delete(outapp);
} }
bool Client::SendLoginInfoPacket(const EQApplicationPacket *app) bool Client::HandleLoginInfoPacket(const EQApplicationPacket *app)
{ {
if (app->size != sizeof(LoginInfo_Struct)) { if (app->size != sizeof(LoginInfo_Struct)) {
return false; return false;
@ -477,6 +477,53 @@ bool Client::SendLoginInfoPacket(const EQApplicationPacket *app)
return true; return true;
} }
bool Client::HandleApproveNamePacket(const EQApplicationPacket *app)
{
if (GetAccountID() == 0) {
clog(WORLD__CLIENT_ERR,"Name approval request with no logged in account");
return false;
}
snprintf(char_name, 64, "%s", (char*)app->pBuffer);
uchar race = app->pBuffer[64];
uchar clas = app->pBuffer[68];
clog(WORLD__CLIENT,"Name approval request. Name=%s, race=%s, class=%s",char_name,GetRaceName(race),GetEQClassName(clas));
EQApplicationPacket *outapp;
outapp = new EQApplicationPacket;
outapp->SetOpcode(OP_ApproveName);
outapp->pBuffer = new uchar[1];
outapp->size = 1;
bool valid;
if(!database.CheckNameFilter(char_name)) {
valid = false;
}
else if(char_name[0] < 'A' && char_name[0] > 'Z') {
//name must begin with an upper-case letter.
valid = false;
}
else if (database.ReserveName(GetAccountID(), char_name)) {
valid = true;
}
else {
valid = false;
}
outapp->pBuffer[0] = valid? 1 : 0;
QueuePacket(outapp);
safe_delete(outapp);
if(!valid) {
memset(char_name, 0, sizeof(char_name));
return false;
}
return true;
}
bool Client::HandlePacket(const EQApplicationPacket *app) { bool Client::HandlePacket(const EQApplicationPacket *app) {
const WorldConfig *Config=WorldConfig::get(); const WorldConfig *Config=WorldConfig::get();
EmuOpcode opcode = app->GetOpcode(); EmuOpcode opcode = app->GetOpcode();
@ -514,49 +561,11 @@ bool Client::HandlePacket(const EQApplicationPacket *app) {
break; break;
case OP_SendLoginInfo: case OP_SendLoginInfo:
{ {
return SendLoginInfoPacket(app); return HandleLoginInfoPacket(app);
} }
case OP_ApproveName: //Name approval case OP_ApproveName: //Name approval
{ {
if (GetAccountID() == 0) { return HandleApproveNamePacket(app);
clog(WORLD__CLIENT_ERR,"Name approval request with no logged in account");
ret = false;
break;
}
snprintf(char_name, 64, "%s", (char*)app->pBuffer);
uchar race = app->pBuffer[64];
uchar clas = app->pBuffer[68];
clog(WORLD__CLIENT,"Name approval request. Name=%s, race=%s, class=%s",char_name,GetRaceName(race),GetEQClassName(clas));
EQApplicationPacket *outapp;
outapp = new EQApplicationPacket;
outapp->SetOpcode(OP_ApproveName);
outapp->pBuffer = new uchar[1];
outapp->size = 1;
bool valid;
if(!database.CheckNameFilter(char_name)) {
valid = false;
}
else if(char_name[0] < 'A' && char_name[0] > 'Z') {
//name must begin with an upper-case letter.
valid = false;
}
else if (database.ReserveName(GetAccountID(), char_name)) {
valid = true;
}
else {
valid = false;
}
outapp->pBuffer[0] = valid? 1 : 0;
QueuePacket(outapp);
safe_delete(outapp);
if(!valid) {
memset(char_name, 0, sizeof(char_name));
}
break;
} }
case OP_RandomNameGenerator: case OP_RandomNameGenerator:
{ {

View File

@ -91,7 +91,8 @@ private:
void SetRaceStartingSkills( PlayerProfile_Struct *pp ); void SetRaceStartingSkills( PlayerProfile_Struct *pp );
void SetRacialLanguages( PlayerProfile_Struct *pp ); void SetRacialLanguages( PlayerProfile_Struct *pp );
bool SendLoginInfoPacket(const EQApplicationPacket *app); bool HandleLoginInfoPacket(const EQApplicationPacket *app);
bool HandleApproveNamePacket(const EQApplicationPacket *app);
ClientListEntry* cle; ClientListEntry* cle;
Timer CLE_keepalive_timer; Timer CLE_keepalive_timer;