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); } }
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); } }
public STRUCT_PUSUER(EServerStatus x) { Slot = -1; Index = 0; Account = new STRUCT_ACCOUNTFILE(); State = x; }
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); } }
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); }
//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); }
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); } }
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); } }
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; } } }
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); } }
//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); }
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; } } } }