Advertisement
RegalChivas

LoginClient

Nov 25th, 2013
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.24 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Net.Sockets;
  7.  
  8. using SagaDB;
  9. using SagaDB.Item;
  10. using SagaDB.Actor;
  11. using SagaLib;
  12. using SagaLogin;
  13. using SagaLogin.Manager;
  14.  
  15. namespace SagaLogin.Network.Client
  16. {
  17.     public class LoginClient : SagaLib.Client
  18.     {
  19.         private string client_Version;
  20.  
  21.         private uint frontWord, backWord;
  22.  
  23.         private Account account;
  24.  
  25.         public enum SESSION_STATE
  26.         {
  27.             LOGIN, MAP, REDIRECTING, DISCONNECTED
  28.         }
  29.         public SESSION_STATE state;
  30.  
  31.         public LoginClient(Socket mSock, Dictionary<ushort, Packet> mCommandTable)
  32.         {
  33.             this.netIO = new NetIO(mSock, mCommandTable, this, LoginClientManager.Instance);
  34.             this.netIO.SetMode(NetIO.Mode.Server);
  35.             if (this.netIO.sock.Connected) this.OnConnect();
  36.         }
  37.  
  38.         public override string ToString()
  39.         {
  40.             try
  41.             {
  42.                 if (this.netIO != null) return this.netIO.sock.RemoteEndPoint.ToString();
  43.                 else
  44.                     return "LoginClient";
  45.             }
  46.             catch (Exception)
  47.             {
  48.                 return "LoginClient";
  49.             }
  50.         }
  51.  
  52.         public override void OnConnect()
  53.         {
  54.  
  55.         }
  56.  
  57.         public override void OnDisconnect()
  58.         {
  59.  
  60.         }
  61.  
  62.         public void OnSendVersion(Packets.Client.CSMG_SEND_VERSION p)
  63.         {
  64.             Logger.ShowInfo("Client(Version:" + p.GetVersion() + ") is trying to connect...");
  65.             this.client_Version = p.GetVersion();
  66.  
  67.             Packets.Server.SSMG_VERSION_ACK p1 = new SagaLogin.Packets.Server.SSMG_VERSION_ACK();
  68.             p1.SetResult(SagaLogin.Packets.Server.SSMG_VERSION_ACK.Result.OK);
  69.             p1.SetVersion(this.client_Version);
  70.             this.netIO.SendPacket(p1);
  71.             //Official HK server will now request for Hackshield GUID check , we don't know its algorithms, so not implemented
  72.             Packets.Server.SSMG_LOGIN_ALLOWED p2 = new SagaLogin.Packets.Server.SSMG_LOGIN_ALLOWED();
  73.             this.frontWord = (uint)Global.Random.Next();
  74.             this.backWord = (uint)Global.Random.Next();
  75.             p2.FrontWord = this.frontWord;
  76.             p2.BackWord = this.backWord;
  77.             this.netIO.SendPacket(p2);
  78.         }
  79.  
  80.         public void OnSendGUID(Packets.Client.CSMG_SEND_GUID p)
  81.         {            
  82.             Packets.Server.SSMG_LOGIN_ALLOWED p1 = new SagaLogin.Packets.Server.SSMG_LOGIN_ALLOWED();
  83.             this.netIO.SendPacket(p1);
  84.         }
  85.  
  86.         public void OnPing(Packets.Client.CSMG_PING p)
  87.         {
  88.             Packets.Server.SSMG_PONG p1 = new SagaLogin.Packets.Server.SSMG_PONG();
  89.             this.netIO.SendPacket(p1);
  90.         }
  91.  
  92.         public void OnLogin(Packets.Client.CSMG_LOGIN p)
  93.         {
  94.             p.GetContent();
  95.             if (LoginServer.accountDB.CheckPassword(p.UserName, p.Password, this.frontWord, this.backWord))
  96.             {
  97.                 Packets.Server.SSMG_LOGIN_ACK p1 = new SagaLogin.Packets.Server.SSMG_LOGIN_ACK();
  98.                 p1.LoginResult = SagaLogin.Packets.Server.SSMG_LOGIN_ACK.Result.OK;
  99.                 this.netIO.SendPacket(p1);
  100.  
  101.                 account = LoginServer.accountDB.GetUser(p.UserName);
  102.  
  103.                 uint[] charIDs = LoginServer.charDB.GetCharIDs(account.AccountID);
  104.  
  105.                 account.Characters = new List<ActorPC>();
  106.                 for (int i = 0; i < charIDs.Length; i++)
  107.                 {
  108.                     account.Characters.Add(LoginServer.charDB.GetChar(charIDs[i]));
  109.                 }
  110.  
  111.                 this.SendCharData();
  112.             }
  113.             else
  114.             {
  115.                 Packets.Server.SSMG_LOGIN_ACK p1 = new SagaLogin.Packets.Server.SSMG_LOGIN_ACK();
  116.                 p1.LoginResult = SagaLogin.Packets.Server.SSMG_LOGIN_ACK.Result.GAME_SMSG_LOGIN_ERR_BADPASS;
  117.                 this.netIO.SendPacket(p1);                
  118.             }
  119.            
  120.         }
  121.  
  122.         public void OnCharCreate(Packets.Client.CSMG_CHAR_CREATE p)
  123.         {
  124.             Packets.Server.SSMG_CHAR_CREATE_ACK p1 = new SagaLogin.Packets.Server.SSMG_CHAR_CREATE_ACK();
  125.             if (LoginServer.charDB.CharExists(p.Name))
  126.             {
  127.                 p1.CreateResult = SagaLogin.Packets.Server.SSMG_CHAR_CREATE_ACK.Result.GAME_SMSG_CHRCREATE_E_NAME_CONFLICT;
  128.             }
  129.             else
  130.             {
  131.                 var slot =
  132.                     from a in account.Characters
  133.                     where a.Slot == p.Slot
  134.                     select a;
  135.                 if (slot.Count() != 0)
  136.                 {
  137.                     p1.CreateResult = SagaLogin.Packets.Server.SSMG_CHAR_CREATE_ACK.Result.GAME_SMSG_CHRCREATE_E_ALREADY_SLOT;
  138.                 }
  139.                 else
  140.                 {
  141.                     ActorPC pc = new ActorPC();
  142.                     pc.Name = p.Name;
  143.                     pc.Face = p.Face;
  144.                     pc.Gender = p.Gender;
  145.                     pc.HairColor = p.HairColor;
  146.                     pc.HairStyle = p.HairStyle;
  147.                     pc.Race = p.Race;
  148.                     pc.Slot = p.Slot;
  149.                     pc.Wig = 0xFF;
  150.                     pc.Level = 1;
  151.                     pc.JobLevel1 = 1;
  152.                     pc.JobLevel2T = 1;
  153.                     pc.JobLevel2X = 1;
  154.                     pc.QuestRemaining = 3;
  155.                     pc.MapID = 10024000;
  156.                     pc.X = Global.PosX8to16(207);
  157.                     pc.Y = Global.PosY8to16(114);
  158.                     pc.Dir = 2;
  159.                     pc.HP = 100;
  160.                     pc.MaxHP = 120;
  161.                     pc.MP = 200;
  162.                     pc.MaxMP = 220;
  163.                     pc.SP = 50;
  164.                     pc.MaxSP = 60;
  165.                     pc.Str = 2;
  166.                     pc.Dex = 3;
  167.                     pc.Int = 4;
  168.                     pc.Vit = 5;
  169.                     pc.Agi = 6;
  170.                     pc.Mag = 7;
  171.                     pc.Gold = 123456;
  172.  
  173.                     pc.Inventory.AddItem(ContainerType.UPPER_BODY, ItemFactory.Instance.GetItem(50001381));
  174.                     pc.Inventory.AddItem(ContainerType.LOWER_BODY, ItemFactory.Instance.GetItem(50012360));
  175.                     pc.Inventory.AddItem(ContainerType.SHOES, ItemFactory.Instance.GetItem(50060100));
  176.                     pc.Inventory.AddItem(ContainerType.BODY, ItemFactory.Instance.GetItem(10020114));
  177.                     pc.Inventory.AddItem(ContainerType.BODY, ItemFactory.Instance.GetItem(60010082));
  178.  
  179.                     LoginServer.charDB.CreateChar(pc, account.AccountID);
  180.                     account.Characters.Add(pc);
  181.                     p1.CreateResult = SagaLogin.Packets.Server.SSMG_CHAR_CREATE_ACK.Result.OK;
  182.                 }
  183.             }
  184.             this.netIO.SendPacket(p1);
  185.             this.SendCharData();
  186.         }
  187.  
  188.         public void OnCharDelete(Packets.Client.CSMG_CHAR_DELETE p)
  189.         {
  190.             Packets.Server.SSMG_CHAR_DELETE_ACK p1 = new SagaLogin.Packets.Server.SSMG_CHAR_DELETE_ACK();
  191.             var chr =
  192.                 from c in account.Characters
  193.                 where c.Slot == p.Slot
  194.                 select c;
  195.             ActorPC pc = chr.First();
  196.             if (account.DeletePassword.ToLower() == p.DeletePassword.ToLower())
  197.             {
  198.                 LoginServer.charDB.DeleteChar(pc);
  199.                 account.Characters.Remove(pc);
  200.                 p1.DeleteResult = SagaLogin.Packets.Server.SSMG_CHAR_DELETE_ACK.Result.OK;
  201.             }
  202.             else
  203.             {
  204.                 p1.DeleteResult = SagaLogin.Packets.Server.SSMG_CHAR_DELETE_ACK.Result.WRONG_DELETE_PASSWORD;
  205.             }
  206.             this.netIO.SendPacket(p1);
  207.             this.SendCharData();
  208.         }
  209.  
  210.         public void OnCharSelect(Packets.Client.CSMG_CHAR_SELECT p)
  211.         {
  212.             Packets.Server.SSMG_CHAR_SELECT_ACK p1 = new SagaLogin.Packets.Server.SSMG_CHAR_SELECT_ACK();
  213.             var chr =
  214.                 from c in account.Characters
  215.                 where c.Slot == p.Slot
  216.                 select c;
  217.             ActorPC pc = chr.First();
  218.             p1.MapID = pc.MapID;
  219.             this.netIO.SendPacket(p1);
  220.         }
  221.  
  222.         public void OnRequestMapServer(Packets.Client.CSMG_REQUEST_MAP_SERVER p)
  223.         {
  224.             Packets.Server.SSMG_SEND_TO_MAP_SERVER p1 = new SagaLogin.Packets.Server.SSMG_SEND_TO_MAP_SERVER();
  225.             p1.ServerID = 1;
  226.             p1.IP = Configuration.Instance.MapHost;
  227.             p1.Port = Configuration.Instance.MapPort;
  228.             this.netIO.SendPacket(p1);
  229.         }
  230.  
  231.         public void OnCharStatus(Packets.Client.CSMG_CHAR_STATUS p)
  232.         {
  233.             Packets.Server.SSMG_CHAR_STATUS p1 = new SagaLogin.Packets.Server.SSMG_CHAR_STATUS();
  234.             this.netIO.SendPacket(p1);
  235.         }
  236.  
  237.         private void SendCharData()
  238.         {
  239.             Packets.Server.SSMG_CHAR_DATA p2 = new SagaLogin.Packets.Server.SSMG_CHAR_DATA();
  240.             p2.Chars = account.Characters;
  241.             this.netIO.SendPacket(p2);
  242.             Packets.Server.SSMG_CHAR_EQUIP p3 = new SagaLogin.Packets.Server.SSMG_CHAR_EQUIP();
  243.             p3.Characters = account.Characters;
  244.             this.netIO.SendPacket(p3);
  245.         }
  246.     }
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement