void CInputDB::LoginSuccess(DWORD dwHandle, const char *data)
{
sys_log(0, "LoginSuccess");
TAccountTable * pTab = (TAccountTable *) data;
LPDESC d = DESC_MANAGER::instance().FindByHandle(dwHandle);
if (!d)
{
sys_log(0, "CInputDB::LoginSuccess - cannot find handle [%s]", pTab->login);
TLogoutPacket pack;
strlcpy(pack.login, pTab->login, sizeof(pack.login));
db_clientdesc->DBPacket(HEADER_GD_LOGOUT, dwHandle, &pack, sizeof(pack));
return;
}
if (strcmp(pTab->status, "OK")) // if not ok
{
sys_log(0, "CInputDB::LoginSuccess - status[%s] is not OK [%s]", pTab->status, pTab->login);
TLogoutPacket pack;
strlcpy(pack.login, pTab->login, sizeof(pack.login));
db_clientdesc->DBPacket(HEADER_GD_LOGOUT, dwHandle, &pack, sizeof(pack));
LoginFailure(d, pTab->status);
return;
}
const bool bFound{ GetServerLocation(*pTab, pTab->bEmpire) };
d->BindAccountTable(pTab);
if (bFound)
{
TPacketGCEmpire pe;
pe.bHeader = HEADER_GC_EMPIRE;
pe.bEmpire = d->GetEmpire();
d->Packet(&pe, sizeof(pe));
}
d->SendLoginSuccessPacket();
d->SetPhase(PHASE_SELECT);
sys_log(0, "InputDB::LoginSucces: account.login: %s", pTab->login);
}
With this if you don't have an assigned empire on your account, at login you will be prompted directly to empire select. (use it with empire reselect feature disabled, with it enabled you will trigger double empire selection on an account with all slots free)