mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2026-03-04 07:00:03 +00:00
Adjust login server logic to new DB
This commit is contained in:
@@ -124,7 +124,7 @@ void CNLoginServer::login(CNSocket* sock, CNPacketData* data) {
|
||||
Database::Account findUser = {};
|
||||
Database::findAccount(&findUser, userLogin);
|
||||
|
||||
// if 0 was returned, account was not found
|
||||
// account was not found
|
||||
if (findUser.AccountID == 0)
|
||||
return newAccount(sock, userLogin, userPassword, login->iClientVerC);
|
||||
|
||||
@@ -144,7 +144,8 @@ void CNLoginServer::login(CNSocket* sock, CNPacketData* data) {
|
||||
loginSessions[sock].userID = findUser.AccountID;
|
||||
loginSessions[sock].lastHeartbeat = getTime();
|
||||
|
||||
std::vector<sP_LS2CL_REP_CHAR_INFO> characters = Database::getCharInfo(loginSessions[sock].userID);
|
||||
std::vector<sP_LS2CL_REP_CHAR_INFO> characters;
|
||||
Database::getCharInfo(&characters, loginSessions[sock].userID);
|
||||
|
||||
INITSTRUCT(sP_LS2CL_REP_LOGIN_SUCC, resp);
|
||||
memcpy(resp.szID, login->szID, sizeof(login->szID));
|
||||
@@ -180,8 +181,14 @@ void CNLoginServer::login(CNSocket* sock, CNPacketData* data) {
|
||||
}
|
||||
|
||||
void CNLoginServer::newAccount(CNSocket* sock, std::string userLogin, std::string userPassword, int32_t clientVerC) {
|
||||
|
||||
int userID = Database::addAccount(userLogin, userPassword);
|
||||
// if query somehow failed
|
||||
if (userID == 0)
|
||||
return loginFail(LoginError::DATABASE_ERROR, userLogin, sock);
|
||||
|
||||
loginSessions[sock] = CNLoginData();
|
||||
loginSessions[sock].userID = Database::addAccount(userLogin, userPassword); //TODO: Add logic if query fails
|
||||
loginSessions[sock].userID = userID;
|
||||
loginSessions[sock].lastHeartbeat = getTime();
|
||||
|
||||
INITSTRUCT(sP_LS2CL_REP_LOGIN_SUCC, resp);
|
||||
@@ -245,8 +252,6 @@ void CNLoginServer::nameSave(CNSocket* sock, CNPacketData* data) {
|
||||
errorCode = 4;
|
||||
} else if (!Database::isNameFree(U16toU8(save->szFirstName), U16toU8(save->szLastName))) {
|
||||
errorCode = 1;
|
||||
} else if (!Database::isSlotFree(loginSessions[sock].userID, save->iSlotNum)) {
|
||||
return invalidCharacter(sock);
|
||||
}
|
||||
|
||||
if (errorCode != 0) {
|
||||
@@ -261,9 +266,18 @@ void CNLoginServer::nameSave(CNSocket* sock, CNPacketData* data) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Database::isSlotFree(loginSessions[sock].userID, save->iSlotNum))
|
||||
return invalidCharacter(sock);
|
||||
|
||||
resp.iPC_UID = Database::createCharacter(save, loginSessions[sock].userID);
|
||||
// if query somehow failed
|
||||
if (resp.iPC_UID == 0) {
|
||||
std::cout << "[WARN] Login Server: Database failed to create new character!" << std::endl;
|
||||
return invalidCharacter(sock);
|
||||
}
|
||||
resp.iSlotNum = save->iSlotNum;
|
||||
resp.iGender = save->iGender;
|
||||
resp.iPC_UID = Database::createCharacter(save, loginSessions[sock].userID);
|
||||
|
||||
memcpy(resp.szFirstName, save->szFirstName, sizeof(resp.szFirstName));
|
||||
memcpy(resp.szLastName, save->szLastName, sizeof(resp.szLastName));
|
||||
|
||||
@@ -321,11 +335,17 @@ void CNLoginServer::characterCreate(CNSocket* sock, CNPacketData* data) {
|
||||
|
||||
sP_CL2LS_REQ_CHAR_CREATE* character = (sP_CL2LS_REQ_CHAR_CREATE*)data->buf;
|
||||
|
||||
if (!(Database::validateCharacter(character->PCStyle.iPC_UID, loginSessions[sock].userID) && validateCharacterCreation(character)))
|
||||
if (!validateCharacterCreation(character))
|
||||
{
|
||||
std::cout << "[WARN] Login Server: invalid CHAR_CREATE packet!" << std::endl;
|
||||
return invalidCharacter(sock);
|
||||
|
||||
Database::finishCharacter(character);
|
||||
|
||||
}
|
||||
if (!Database::finishCharacter(character, loginSessions[sock].userID))
|
||||
{
|
||||
std::cout << "[WARN] Login Server: Database failed to finish character creation!" << std::endl;
|
||||
return invalidCharacter(sock);
|
||||
}
|
||||
|
||||
Player player = {};
|
||||
Database::getPlayer(&player, character->PCStyle.iPC_UID);
|
||||
|
||||
@@ -333,7 +353,9 @@ void CNLoginServer::characterCreate(CNSocket* sock, CNPacketData* data) {
|
||||
resp.sPC_Style = player.PCStyle;
|
||||
resp.sPC_Style2 = player.PCStyle2;
|
||||
resp.iLevel = player.level;
|
||||
resp.sOn_Item = character->sOn_Item;
|
||||
resp.sOn_Item.iEquipUBID = player.Equip[1].iID;
|
||||
resp.sOn_Item.iEquipLBID = player.Equip[2].iID;
|
||||
resp.sOn_Item.iEquipFootID = player.Equip[3].iID;
|
||||
|
||||
loginSessions[sock].lastHeartbeat = getTime();
|
||||
|
||||
@@ -366,10 +388,9 @@ void CNLoginServer::characterDelete(CNSocket* sock, CNPacketData* data) {
|
||||
|
||||
sP_CL2LS_REQ_CHAR_DELETE* del = (sP_CL2LS_REQ_CHAR_DELETE*)data->buf;
|
||||
|
||||
if (!Database::validateCharacter(del->iPC_UID, loginSessions[sock].userID))
|
||||
return invalidCharacter(sock);
|
||||
|
||||
int removedSlot = Database::deleteCharacter(del->iPC_UID, loginSessions[sock].userID);
|
||||
if (removedSlot == 0)
|
||||
return invalidCharacter(sock);
|
||||
|
||||
INITSTRUCT(sP_LS2CL_REP_CHAR_DELETE_SUCC, resp);
|
||||
resp.iSlotNum = removedSlot;
|
||||
@@ -406,6 +427,10 @@ void CNLoginServer::characterSelect(CNSocket* sock, CNPacketData* data) {
|
||||
// pass player to CNSharedData
|
||||
Player passPlayer = {};
|
||||
Database::getPlayer(&passPlayer, selection->iPC_UID);
|
||||
// this should never happen but for extra safety
|
||||
if (passPlayer.iID == 0)
|
||||
return invalidCharacter(sock);
|
||||
|
||||
passPlayer.FEKey = sock->getFEKey();
|
||||
resp.iEnterSerialKey = passPlayer.iID;
|
||||
CNSharedData::setPlayer(resp.iEnterSerialKey, passPlayer);
|
||||
@@ -421,10 +446,9 @@ void CNLoginServer::finishTutorial(CNSocket* sock, CNPacketData* data) {
|
||||
return;
|
||||
sP_CL2LS_REQ_SAVE_CHAR_TUTOR* save = (sP_CL2LS_REQ_SAVE_CHAR_TUTOR*)data->buf;
|
||||
|
||||
if (!Database::validateCharacter(save->iPC_UID, loginSessions[sock].userID))
|
||||
if (!Database::finishTutorial(save->iPC_UID, loginSessions[sock].userID))
|
||||
return invalidCharacter(sock);
|
||||
|
||||
Database::finishTutorial(save->iPC_UID);
|
||||
loginSessions[sock].lastHeartbeat = getTime();
|
||||
// no response here
|
||||
|
||||
@@ -439,9 +463,6 @@ void CNLoginServer::changeName(CNSocket* sock, CNPacketData* data) {
|
||||
|
||||
sP_CL2LS_REQ_CHANGE_CHAR_NAME* save = (sP_CL2LS_REQ_CHANGE_CHAR_NAME*)data->buf;
|
||||
|
||||
if (!Database::validateCharacter(save->iPCUID, loginSessions[sock].userID))
|
||||
return invalidCharacter(sock);
|
||||
|
||||
int errorCode = 0;
|
||||
if (!CNLoginServer::isCharacterNameGood(U16toU8(save->szFirstName), U16toU8(save->szLastName))) {
|
||||
errorCode = 4;
|
||||
@@ -462,7 +483,8 @@ void CNLoginServer::changeName(CNSocket* sock, CNPacketData* data) {
|
||||
return;
|
||||
}
|
||||
|
||||
Database::changeName(save, loginSessions[sock].userID);
|
||||
if (!Database::changeName(save, loginSessions[sock].userID))
|
||||
return invalidCharacter(sock);
|
||||
|
||||
INITSTRUCT(sP_LS2CL_REP_CHANGE_CHAR_NAME_SUCC, resp);
|
||||
resp.iPC_UID = save->iPCUID;
|
||||
|
||||
Reference in New Issue
Block a user