Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        //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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }