public static ERequestResult HandleRequest(CGameStateController gs, CPlayer player) { if (gs.PlayerState[player] != EPlayerState.UNITIALIZED) { return(ERequestResult.PLAYER_INCONSISTENT_STATE); } MAccountLoginPacket packet = MyMarshal.GetStructure <MAccountLoginPacket>(player.RecvPacket); MAccountFile?nAccFile; AccountCRUD.EErrorMsg accErr = AccountCRUD.TryRead(packet.AccName, out nAccFile); if (accErr == AccountCRUD.EErrorMsg.NO_ERROR) { MLoginSuccessfulPacket answer = PacketHelper.GetEmptyValid <MLoginSuccessfulPacket>(MLoginSuccessfulPacket.Opcode); MAccountFile accFile = nAccFile.Value; answer.AccName = accFile.Info.LoginInfo.AccName; answer.Cargo = accFile.Cargo; answer.CargoCoin = accFile.CargoCoin; for (int i = 0; i < GameBasics.MAXL_ACC_MOB; i++) { unsafe { answer.SelChar.Coin[i] = accFile.MobCore[i].Coin; answer.SelChar.Equip[i] = accFile.MobCore[i].Equip; answer.SelChar.Exp[i] = accFile.MobCore[i].Exp; answer.SelChar.Guild[i] = accFile.MobCore[i].Guild; answer.SelChar.Name[i] = accFile.MobCore[i].Name; answer.SelChar.Score[i] = accFile.MobCore[i].BaseScore; answer.SelChar.SPosX[i] = accFile.MobCore[i].StellarGemPosition.X; answer.SelChar.SPosY[i] = accFile.MobCore[i].StellarGemPosition.Y; } } player.SendPacket(MyMarshal.GetBytes(answer)); } else if (accErr == AccountCRUD.EErrorMsg.ACC_NOT_FOUND) { MTextMessagePacket answer = PacketHelper.GetEmptyValid <MTextMessagePacket>(MTextMessagePacket.Opcode); answer.Message = "Esta conta não foi encontrada."; player.SendPacket(MyMarshal.GetBytes(answer)); } else { return(ERequestResult.UNKNOWN); } return(ERequestResult.NO_ERROR); }
//Pacote de Login (SelChar) public static DBResult Exec_MSG_DBAccountLogin(DBController gs, pServer GameServer) { STRUCT_ACCOUNTFILE CurrentAccount = new STRUCT_ACCOUNTFILE(); MAccountLoginPacket sm = W2Marshal.GetStructure <MAccountLoginPacket>(GameServer.RecvPacket.RawBuffer); if (!gs.ReadAccount(sm.Login.Name, out CurrentAccount)) { W2Log.Write(String.Format("fail to read account file {0}", sm.Login.Name), ELogType.GAME_EVENT); return(DBResult.NO_ERROR); } if (String.Compare(sm.Login.Pass, CurrentAccount.Info.AccountPass) != 0) { W2Log.Write(String.Format("Senha incorreta {0}/{1}", sm.Login.Pass, CurrentAccount.Info.AccountPass), ELogType.GAME_EVENT); gs.Server.SendSignal(sm.Header.ClientId, BaseDef._MSG_DBAccountLoginFail_Pass); return(DBResult.NO_ERROR); } MLoginSuccessfulPacket answer = W2Marshal.CreatePacket <MLoginSuccessfulPacket>(BaseDef._MLoginSuccessfulPacket, sm.Header.ClientId); int Idx = gs.GetIndex(sm.Header.ClientId); int IdxName = gs.GetIndex(sm.Login.Name); answer.AccName = CurrentAccount.Info.AccountName; answer.Cargo = CurrentAccount.Cargo; answer.CargoCoin = CurrentAccount.Coin; for (int i = 0; i < GameBasics.MAXL_ACC_MOB; i++) { unsafe { answer.SelChar.Coin[i] = CurrentAccount.Mob[i].Coin; for (int x = 0; x < GameBasics.MAXL_EQUIP; x++) { if (x == 0) { int Face = answer.SelChar.Equip[i].Items[x].Index; if (Face == 22 || Face == 23 || Face == 24 || Face == 25 || Face == 32) { Face = CurrentAccount.MobExtra[i].ClassMaster == 0 ? 21 : (ushort)CurrentAccount.MobExtra[i].MortalFace + 7; } answer.SelChar.Equip[i].Items[x].Index = (short)Face; answer.SelChar.Equip[i].Items[x].Effects[0].Code = 43; answer.SelChar.Equip[i].Items[x].Effects[0].Value = 0; answer.SelChar.Equip[i].Items[x].Effects[1].Code = 86; answer.SelChar.Equip[i].Items[x].Effects[1].Value = Functions.GetClassType(CurrentAccount.Mob[i]); answer.SelChar.Equip[i].Items[x].Effects[2].Code = 28; answer.SelChar.Equip[i].Items[x].Effects[2].Value = (byte)CurrentAccount.MobExtra[i].Citizen; } answer.SelChar.Equip[i].Items[x] = CurrentAccount.Mob[i].Equip.Items[x]; } answer.SelChar.Exp[i] = (int)CurrentAccount.Mob[i].Exp; answer.SelChar.Guild[i] = CurrentAccount.Mob[i].Guild; answer.SelChar.Name[i].Value = CurrentAccount.Mob[i].Name; answer.SelChar.Score[i] = CurrentAccount.Mob[i].BaseScore; answer.SelChar.SPosX[i] = CurrentAccount.Mob[i].SPX; answer.SelChar.SPosY[i] = CurrentAccount.Mob[i].SPY; } } if (IdxName == Idx) { // W2Log.Write(String.Format("IdxName {0} / Idx {1}", IdxName, Idx), ELogType.GAME_EVENT); gs.Server.SendSignal(sm.Header.ClientId, BaseDef._MSG_DBStillPlaying); return(DBResult.NO_ERROR); } if (IdxName != 0) { W2Log.Write(String.Format("err, desconectado. conexão anterior finalizada. {0} ", sm.Login.Name), ELogType.GAME_EVENT); if (sm.DBNeedSave == 0) { gs.Server.SendSignal(sm.Header.ClientId, BaseDef._MSG_DBAlreadyPlaying); return(DBResult.NO_ERROR); } gs.Server.SendSignal(sm.Header.ClientId, BaseDef._MSG_DBStillPlaying); return(DBResult.NO_ERROR); } if (!gs.AddAccountList(Idx)) { W2Log.Write(String.Format("err, failue add accountlist. {0} ", sm.Login.Name), ELogType.GAME_EVENT); gs.Server.SendSignal(sm.Header.ClientId, BaseDef._MSG_DBStillPlaying); return(DBResult.NO_ERROR); } gs.AccountList[Idx].Account = CurrentAccount; gs.AccountList[Idx].Index = (short)sm.Header.ClientId; gs.AccountList[Idx].State = EServerStatus.SEL_CHAR; gs.Server.SendPacket(answer); return(DBResult.NO_ERROR); }
private EPlayerRequestResult CGameStateController_OnProcessPacket(CGameStateController gs, CPlayer player) { switch (player.RecvPacket.ReadNextUShort(4)) { case MAccountLoginPacket.Opcode: { if (player.State != EPlayerState.WAITING_TO_LOGIN) { return(EPlayerRequestResult.PLAYER_INCONSISTENT_STATE); } MAccountLoginPacket packet = W2Marshal.GetStructure <MAccountLoginPacket>(player.RecvPacket); MAccountFile? nAccFile; AccountCRUD.EResult accErr = AccountCRUD.TryRead(packet.AccName, out nAccFile); if (accErr != AccountCRUD.EResult.NO_ERROR) { // if account doesn't exist... if (accErr == AccountCRUD.EResult.ACC_NOT_FOUND) { // create a new account file MAccountFile newAccFile = W2Marshal.CreateEmpty <MAccountFile>(); // set the username & password newAccFile.Info.LoginInfo.AccName = packet.AccName; newAccFile.Info.LoginInfo.Password = packet.Password; AccountCRUD.EResult createAccErr = AccountCRUD.TrySaveAccount(ref newAccFile); if (createAccErr == AccountCRUD.EResult.NO_ERROR) { accErr = AccountCRUD.TryRead(packet.AccName, out nAccFile); if (accErr != AccountCRUD.EResult.NO_ERROR) { return(EPlayerRequestResult.UNKNOWN); } } else if (createAccErr == AccountCRUD.EResult.ACC_NOT_SAVED) { MTextMessagePacket createFailedAnswer = W2Marshal.GetEmptyValid <MTextMessagePacket>(MTextMessagePacket.Opcode); createFailedAnswer.Message = "Não foi possível criar a conta."; player.SendPacket(createFailedAnswer); return(EPlayerRequestResult.NO_ERROR); } else if (createAccErr == AccountCRUD.EResult.UNKNOWN) { return(EPlayerRequestResult.UNKNOWN); } } else { return(EPlayerRequestResult.UNKNOWN); } } MLoginSuccessfulPacket answer = W2Marshal.GetEmptyValid <MLoginSuccessfulPacket>(MLoginSuccessfulPacket.Opcode); MAccountFile accFile = nAccFile.Value; answer.AccName = accFile.Info.LoginInfo.AccName; answer.Cargo = accFile.Cargo; answer.CargoCoin = accFile.CargoCoin; for (int i = 0; i < GameBasics.MAXL_ACC_MOB; i++) { unsafe { answer.SelChar.Coin[i] = accFile.MobCore[i].Coin; answer.SelChar.Equip[i] = accFile.MobCore[i].Equip; answer.SelChar.Exp[i] = accFile.MobCore[i].Exp; answer.SelChar.Guild[i] = accFile.MobCore[i].Guild; answer.SelChar.Name[i] = accFile.MobCore[i].Name; answer.SelChar.Score[i] = accFile.MobCore[i].BaseScore; answer.SelChar.SPosX[i] = accFile.MobCore[i].StellarGemPosition.X; answer.SelChar.SPosY[i] = accFile.MobCore[i].StellarGemPosition.Y; } } player.SendPacket(answer); player.State = EPlayerState.SEL_CHAR; return(EPlayerRequestResult.NO_ERROR); } default: return(EPlayerRequestResult.PACKET_NOT_HANDLED); } }
private EPlayerRequestResult CGameStateController_OnProcessPacket(CGameStateController gs, CPlayer player) { switch (player.RecvPacket.ReadNextUShort(4)) { case MAccountLoginPacket.Opcode: { if (player.State != EPlayerState.WAITING_TO_LOGIN) { return(EPlayerRequestResult.PLAYER_INCONSISTENT_STATE); } MAccountLoginPacket packet = W2Marshal.GetStructure <MAccountLoginPacket>(player.RecvPacket); MAccountFile? nAccFile; AccountCRUD.EResult accErr = AccountCRUD.TryRead(packet.AccName, out nAccFile); if (accErr == AccountCRUD.EResult.NO_ERROR) { MLoginSuccessfulPacket answer = W2Marshal.GetEmptyValid <MLoginSuccessfulPacket>(MLoginSuccessfulPacket.Opcode); MAccountFile accFile = nAccFile.Value; answer.AccName = accFile.Info.LoginInfo.AccName; answer.Cargo = accFile.Cargo; answer.CargoCoin = accFile.CargoCoin; for (int i = 0; i < GameBasics.MAXL_ACC_MOB; i++) { unsafe { answer.SelChar.Coin[i] = accFile.MobCore[i].Coin; answer.SelChar.Equip[i] = accFile.MobCore[i].Equip; answer.SelChar.Exp[i] = accFile.MobCore[i].Exp; answer.SelChar.Guild[i] = accFile.MobCore[i].Guild; answer.SelChar.Name[i] = accFile.MobCore[i].Name; answer.SelChar.Score[i] = accFile.MobCore[i].BaseScore; answer.SelChar.SPosX[i] = accFile.MobCore[i].StellarGemPosition.X; answer.SelChar.SPosY[i] = accFile.MobCore[i].StellarGemPosition.Y; } } player.SendPacket(answer); player.State = EPlayerState.SEL_CHAR; } else if (accErr == AccountCRUD.EResult.ACC_NOT_FOUND) { MTextMessagePacket answer = W2Marshal.GetEmptyValid <MTextMessagePacket>(MTextMessagePacket.Opcode); answer.Message = "Esta conta não foi encontrada."; player.SendPacket(answer); } else { return(EPlayerRequestResult.UNKNOWN); } return(EPlayerRequestResult.NO_ERROR); } default: return(EPlayerRequestResult.PACKET_NOT_HANDLED); } }