예제 #1
0
        static public unsafe bool CreateEmptyAccount()
        {
            STRUCT_ACCOUNTFILE acc = STRUCT_ACCOUNTFILE.ClearProperty();

            try
            {
                acc.Info.AccountName = "ADMIN";
                acc.Info.AccountPass = "******";
                acc.Info.Address     = "127.0.0.1";
                acc.Info.Email       = "*****@*****.**";
                acc.Info.Telephone   = "(00) 0000-00000";
                byte[] data = new byte[Marshal.SizeOf(acc)];

                IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(acc));
                Marshal.StructureToPtr(acc, ptr, false);
                Marshal.Copy(ptr, data, 0, Marshal.SizeOf(acc));
                Marshal.FreeHGlobal(ptr);

                File.WriteAllBytes(String.Format(@"./DataBase/Account/{0}/{1}", acc.Info.AccountName.Substring(0, 1).ToUpper(), acc.Info.AccountName.ToUpper()), data);

                using (StreamWriter file = File.CreateText(String.Format(@"./DataBase/Account/{0}/{1}" + ".json", acc.Info.AccountName.Substring(0, 1).ToUpper(), acc.Info.AccountName.ToUpper())))
                {
                    string indented = JsonConvert.SerializeObject(acc, Formatting.Indented);
                    file.Write(indented);
                }
                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
예제 #2
0
        static public unsafe bool CreateEmptyAccount(string Name, string Pass, string IP, string Email, string Nomepesoal = " ", string Tel = " ")
        {
            STRUCT_ACCOUNTFILE acc = STRUCT_ACCOUNTFILE.ClearProperty();

            try
            {
                acc.Info.AccountName = Name;
                acc.Info.AccountPass = Pass;
                acc.Info.Address     = IP;
                acc.Info.Email       = Email;
                acc.Info.Telephone   = Tel;
                acc.Info.RealName    = Nomepesoal;


                byte[] data = new byte[Marshal.SizeOf(acc)];

                IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(acc));
                Marshal.StructureToPtr(acc, ptr, false);
                Marshal.Copy(ptr, data, 0, Marshal.SizeOf(acc));
                Marshal.FreeHGlobal(ptr);

                File.WriteAllBytes(String.Format(@"./DataBase/Account/{0}/{1}", acc.Info.AccountName.Substring(0, 1).ToUpper(), acc.Info.AccountName.ToUpper()), data);

                using (StreamWriter file = File.CreateText(String.Format(@"./DataBase/Account/{0}/{1}" + ".json", acc.Info.AccountName.Substring(0, 1).ToUpper(), acc.Info.AccountName.ToUpper())))
                {
                    string indented = JsonConvert.SerializeObject(acc, Formatting.Indented);
                    file.Write(indented);
                }
                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
예제 #3
0
 public STRUCT_PUSUER(EServerStatus x)
 {
     Slot    = -1;
     Index   = 0;
     Account = new STRUCT_ACCOUNTFILE();
     State   = x;
 }
예제 #4
0
        public static void ChangePassword(STRUCT_ACCOUNTFILE Account, string newPass)
        {
            try
            {
                string DirAccount = Directory.GetCurrentDirectory() + "./account/" + Account.Info.AccountName[0].ToString();

                byte[] data = new byte[Marshal.SizeOf(Account)];

                IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(Account));
                Marshal.StructureToPtr(Account, ptr, false);
                Marshal.Copy(ptr, data, 0, Marshal.SizeOf(Account));
                Marshal.FreeHGlobal(ptr);

                bool folderExists = Directory.Exists(DirAccount.ToLower());
                if (!folderExists)
                {
                    Directory.CreateDirectory(DirAccount.ToLower());
                }

                DirAccount = DirAccount + "/" + Account.Info.AccountName.ToLower();

                File.WriteAllBytes(DirAccount.ToLower(), data);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
예제 #5
0
 public static int getEmptyCargo(STRUCT_ACCOUNTFILE Account)
 {
     for (int i = 0; i < 120; i++)
     {
         if (Account.Cargo.Items[i].Index == 0)
         {
             return(i);
         }
     }
     return(-1);
 }
예제 #6
0
        //Pacote de Login (SelChar -> TMSRV -> ToWord)
        public static DBResult Exec_MSG_DBCharacterLogin2(DBController gs, pServer GameServer)
        {
            _MSG_DBCharacterLogin2 sm = W2Marshal.GetStructure <_MSG_DBCharacterLogin2>(GameServer.RecvPacket.RawBuffer);


            if (sm.Slot < 0 || sm.Slot >= 4)
            {
                W2Log.Write("err,charlogin slot illegal");
                return(DBResult.NO_ERROR);
            }

            int idx = gs.GetIndex(sm.Header.ClientId);

            gs.AccountList[idx].Slot = (short)sm.Slot;

            _MSG_CNFCharacterLogin ret = W2Marshal.CreatePacket <_MSG_CNFCharacterLogin>(BaseDef._MSG_CNFCharacterLogin, sm.Header.ClientId);

            STRUCT_ACCOUNTFILE File = gs.AccountList[idx].Account;

            if (String.IsNullOrEmpty(File.Info.AccountName))
            {
                W2Log.Write(String.Format("err,charlogin mobname {0} empty", File.Info.AccountName));

                return(DBResult.NO_ERROR);
            }



            ret.Slot = (short)sm.Slot;

            ret.Mob = File.Mob[sm.Slot];
            ret.Mob.CurrentScore = ret.Mob.BaseScore;


            ret.ShortSkill = File.Skillbar[sm.Slot].ShortSkill;



            ret.Affects = File.Affects[sm.Slot].Affects;

            ret.mobExtra = File.MobExtra[sm.Slot];

            ret.mobExtra.ClassMaster  = File.MobExtra[sm.Slot].ClassMaster;
            gs.AccountList[idx].State = EServerStatus.INGAME;
            GameServer.SendPacket(ret);
            return(DBResult.NO_ERROR);
        }
예제 #7
0
 public bool ReadAccount(string Accountname, out STRUCT_ACCOUNTFILE CurrentAccount)
 {
     CurrentAccount = new STRUCT_ACCOUNTFILE();
     try
     {
         string correctPatch = Functions.getCorrectPath(Accountname);
         using (StreamReader r = new StreamReader(correctPatch + ".json"))
         {
             string json = r.ReadToEnd();
             CurrentAccount = JsonConvert.DeserializeObject <STRUCT_ACCOUNTFILE>(json);
         }
         return(true);
     }
     catch (Exception e)
     {
         W2Log.Write(e.Message);
         return(false);
     }
 }
예제 #8
0
        public bool SaveAccount(STRUCT_ACCOUNTFILE accfile)
        {
            try
            {
                string CorrectPatch = Functions.getCorrectPath(accfile.Info.AccountName);
                using (StreamWriter file = File.CreateText(CorrectPatch + ".json"))
                {
                    string indented = JsonConvert.SerializeObject(accfile, Formatting.Indented);
                    file.Write(indented);
                }

                W2Log.Write(String.Format("save account sucess: {0}", accfile.Info.AccountName), ELogType.GAME_EVENT);
                return(true);
            }
            catch (Exception e)
            {
                W2Log.Write(String.Format("save account fail: {0}/{1}", accfile.Info.AccountName, e.Message), ELogType.GAME_EVENT);
                return(false);
            }
        }
예제 #9
0
        public static void DBGetSelChar(MSelChar SelChar, STRUCT_ACCOUNTFILE File)
        {
            for (int i = 0; i < GameBasics.MAXL_ACC_MOB; i++)
            {
                unsafe
                {
                    byte evoType = GetClassType(File.Mob[i]);
                    SelChar.Coin[i] = File.Mob[i].Coin;
                    for (int x = 0; x < GameBasics.MAXL_EQUIP; x++)
                    {
                        if (x == 0)
                        {
                            int Face = SelChar.Equip[i].Items[x].Index;
                            if (Face == 22 || Face == 23 || Face == 24 || Face == 25 || Face == 32)
                            {
                                Face = File.MobExtra[i].ClassMaster == 0 ? 21 : (ushort)File.MobExtra[i].MortalFace + 7;
                            }

                            SelChar.Equip[i].Items[x].Index            = (short)Face;
                            SelChar.Equip[i].Items[x].Effects[0].Code  = 43;
                            SelChar.Equip[i].Items[x].Effects[0].Value = 0;
                            SelChar.Equip[i].Items[x].Effects[1].Code  = 86;
                            SelChar.Equip[i].Items[x].Effects[1].Value = evoType;
                            SelChar.Equip[i].Items[x].Effects[2].Code  = 28;
                            SelChar.Equip[i].Items[x].Effects[2].Value = (byte)File.MobExtra[i].Citizen;
                        }
                        else
                        {
                            SelChar.Equip[i].Items[x] = File.Mob[i].Equip.Items[x];
                        }
                    }

                    SelChar.Exp[i]        = (int)File.Mob[i].Exp;
                    SelChar.Guild[i]      = File.Mob[i].Guild;
                    SelChar.Name[i].Value = File.Mob[i].Name;
                    SelChar.Score[i]      = File.Mob[i].BaseScore;
                    SelChar.SPosX[i]      = File.Mob[i].SPX;
                    SelChar.SPosY[i]      = File.Mob[i].SPY;
                }
            }
        }
예제 #10
0
        static public bool UpdateUser(DBController gs, string Login, string Senha)
        {
            STRUCT_ACCOUNTFILE target = new STRUCT_ACCOUNTFILE();

            if (!gs.ReadAccount(Login, out target))
            {
                W2Log.Write(String.Format("fail to read account file {0}", Login), ELogType.GAME_EVENT);
                return(false);
            }

            if (0 != String.Compare(target.Info.AccountName, Login))
            {
                W2Log.Write(String.Format("fail to read account file {0}/{1}", Login, target.Info.AccountName), ELogType.GAME_EVENT);
                return(false);
            }
            // W2Log.Write(String.Format("pass teste file {0}/{1}", target.Info.AccountPass, Senha), ELogType.GAME_EVENT);
            target.Info.AccountPass = Senha;

            try
            {
                string CorrectPatch = Functions.getCorrectPath(target.Info.AccountName);
                using (StreamWriter file = File.CreateText(CorrectPatch + ".json"))
                {
                    string indented = JsonConvert.SerializeObject(target, Formatting.Indented);
                    file.Write(indented);
                }

                W2Log.Write(String.Format("save account sucess: {0}", target.Info.AccountName), ELogType.GAME_EVENT);
                return(true);
            }
            catch (Exception e)
            {
                W2Log.Write(String.Format("save account fail: {0}/{1}", target.Info.AccountName, e.Message), ELogType.GAME_EVENT);
                return(false);
            }
        }
예제 #11
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);
        }
예제 #12
0
        static public void Start(DBController gs)
        {
            bool Importend = false;

            foreach (string file in Directory.EnumerateFiles("./DataBase/ImportInfo/", "*.update"))
            {
                using (StreamReader sr = new StreamReader(file))
                {
                    string line;
                    int    countLine = 0;
                    string Login = string.Empty, Senha = string.Empty;
                    while ((line = sr.ReadLine()) != null)
                    {
                        if (countLine == 0)
                        {
                            Login = line;
                        }
                        if (countLine == 1)
                        {
                            Senha = line;
                        }

                        countLine++;
                        if (!string.IsNullOrEmpty(Login) && !string.IsNullOrEmpty(Senha))
                        {
                            break;
                        }
                    }

                    if (File.Exists(Functions.getCorrectPath(Login) + ".json"))
                    {
                        STRUCT_ACCOUNTFILE target = new STRUCT_ACCOUNTFILE();

                        if (!gs.ReadAccount(Login, out target))
                        {
                            W2Log.Write(String.Format("fail to read account file {0}", Login), ELogType.GAME_EVENT);
                            Importend = false;
                        }

                        if (0 != String.Compare(target.Info.AccountName, Login))
                        {
                            W2Log.Write(String.Format("fail to read account file {0}/{1}", Login, target.Info.AccountName), ELogType.GAME_EVENT);
                            Importend = false;
                        }
                        // W2Log.Write(String.Format("pass teste file {0}/{1}", target.Info.AccountPass, Senha), ELogType.GAME_EVENT);
                        target.Info.AccountPass = Senha;

                        try
                        {
                            string CorrectPatch = Functions.getCorrectPath(target.Info.AccountName);
                            using (StreamWriter pfile = File.CreateText(CorrectPatch + ".json"))
                            {
                                string indented = JsonConvert.SerializeObject(target, Formatting.Indented);
                                pfile.Write(indented);
                            }

                            W2Log.Write(String.Format("save account sucess: {0}", target.Info.AccountName), ELogType.GAME_EVENT);
                            Importend = true;
                        }
                        catch (Exception e)
                        {
                            W2Log.Write(String.Format("save account fail: {0}/{1}", target.Info.AccountName, e.Message), ELogType.GAME_EVENT);
                            Importend = false;
                        }
                    }
                    if (Importend)
                    {
                        sr.Close();
                        File.Delete(file);
                        Importend = false;
                        W2Log.Write(String.Format($"sucess update user: {Login}"), ELogType.CRITICAL_ERROR);
                        return;
                    }
                }
            }
        }