public void SendLoginResponse(byte[] data) { var iPkt = new UA_LOGIN_REQ(); iPkt.SetData(data); SysCons.LogInfo("UA_LOGIN_REQ UserID({0}) CodePage({1}) Version({2}.{3})", iPkt.UserID, iPkt.CodePage, iPkt.MajorVer, iPkt.MinorVer); Username = iPkt.UserID; Password = iPkt.UserPW; AccountID = (uint)AuthDB.GetAccountID(Username); using (var oPkt = new AU_COMMERCIAL_SETTING_NFY()) { oPkt.BuildPacket(); Client.Send(oPkt.Data); } using (var oPkt = new AU_LOGIN_RES()) { oPkt.UserID = iPkt.UserID; oPkt.AccountID = AccountID; oPkt.AllowedFunctionForDeveloper = 65535; oPkt.AuthKey = "SE@WASDE#$RFWD@D"; oPkt.ResultCode = (ushort)AuthDB.CheckAccount(this.Username, this.Password); oPkt.lastServerID = 255; oPkt.lastChannelID = 255; oPkt.BuildCharServerList(); oPkt.BuildPacket(); Client.Send(oPkt.Data); } }
private void AcceptCallback(IAsyncResult result) { if (Listener == null) { return; } try { Socket socket = Listener.EndAccept(result); // Finish accepting the incoming connection. Client client = new Client(this, socket); // Add the new connection to the dictionary. lock (ClientLock) Clients[socket] = client; // add the connection to list. OnClientConnection(new ClientEventArgs(client)); // Raise the OnConnect event. client.BeginReceive(ReceiveCallback, client); // Begin receiving on the new connection connection. Listener.BeginAccept(AcceptCallback, null); // Continue receiving other incoming connection asynchronously. } catch (NullReferenceException) { } // we recive this after issuing server-shutdown, just ignore it. catch (Exception e) { SysCons.LogError("AcceptCallback: {0}", e); } }
public void CheckPacket(byte[] data, CharClient client) { this.pkt = new Packet(); pkt.SetData(data); this.client = client; if ((PacketOpcodes)pkt.Opcode != PacketOpcodes.SYS_ALIVE) { SysCons.LogInfo("Recv Packet({0}) Len({1}) Enc({2}) Opcode({3})", PacketDefinitions.getPacketName(pkt.Opcode), pkt.Lenght, pkt.Encrypt, pkt.Opcode); } switch ((PacketOpcodes)pkt.Opcode) { case PacketOpcodes.SYS_ALIVE: /* TO SKIP LOGGING THIS PACKET */ break; case PacketOpcodes.SYS_HANDSHAKE_RES: client.SendHandShakeRes(); break; case PacketOpcodes.UC_LOGIN_REQ: client.SendLoginResponse(data); break; case PacketOpcodes.UC_CHARACTER_SERVERLIST_REQ: client.SendServerList(false); break; case PacketOpcodes.UC_CHARACTER_SERVERLIST_ONE_REQ: client.SendServerList(true); break; case PacketOpcodes.UC_CHARACTER_ADD_REQ: client.SendCharacterAdd(data); break; //case PacketOpcodes.UC_CHARACTER_ADD_REQ: client.SendCharacterCreate(data); break; case PacketOpcodes.UC_CHARACTER_SELECT_REQ: client.SendCharacterSelect(data); break; case PacketOpcodes.UC_CHARACTER_EXIT_REQ: client.SendCharacterExit(data); break; case PacketOpcodes.UC_CHARACTER_LOAD_REQ: client.SendCharacterLoad(data); break; case PacketOpcodes.UC_CONNECT_WAIT_CHECK_REQ: client.SendWaitCheck(data); break; default: PacketDefinitions.LogPacketData(pkt); break; } }
internal void SendGameEnter(byte[] data) { // to do UG_GAME_ENTER_REQ SysCons.LogInfo("UG_GAME_ENTER_REQ"); GU_GAME_ENTER_RES sPkt = new GU_GAME_ENTER_RES(); sPkt.ResultCode = 500; sPkt.achCommunityServerIP = Encoding.ASCII.GetBytes("127.0.0.1"); sPkt.wCommunityServerPort = 50700; SysCons.LogInfo("GU_GAME_ENTER_RES IPAddress({0}) Port({1}) wysylam namiary ziom", sPkt.achCommunityServerIP.ToString(), sPkt.wCommunityServerPort.ToString()); sPkt.BuildPacket(); this.Client.Send(sPkt.Data); // O WCHUJ PACKETOW JEDZIEM zerami // GU_AVATAR_CHAR_INFO // GU_AVATAR_ITEM_INFO //GU_AVATAR_SKILL_INFO //GU_AVATAR_HTB_INFO //GU_QUICK_SLOT_INFO //GU_WAR_FOG_INFO //GU_AVATAR_BUFF_INFO //GU_AVATAR_INFO_END SysCons.LogInfo("GU_AVATAR_INFO_END"); Packet pkt = new Packet(); pkt.Opcode = (ushort)PacketOpcodes.GU_AVATAR_INFO_END; pkt.BuildPacket(); this.Client.Send(pkt.Data); }
public void SendCharacterLoad(byte[] data) { var iPkt = new UC_CHARACTER_LOAD_REQ(); iPkt.SetData(data); SysCons.LogInfo("UC_CHARACTER_LOAD_REQ AccountID({0}) LastServerID({1})", iPkt.AccountID, iPkt.ServerID); AccountID = iPkt.AccountID; ServerID = iPkt.ServerID; using (var oPkt = new CU_SERVER_CHANNEL_INFO()) { oPkt.BuildChannelList(iPkt.ServerID); oPkt.BuildPacket(); Client.Send(oPkt.Data); } using (var oPkt = new CU_CHARACTER_INFO()) { oPkt.BuildCharList(AccountID, ServerID); oPkt.BuildPacket(); SysCons.SavePacket(oPkt); Client.Send(oPkt.Data); } using (var oPkt = new CU_CHARACTER_LOAD_RES()) { oPkt.ServerID = iPkt.ServerID; oPkt.BuildPacket(); Client.Send(oPkt.Data); } }
internal void EnterWolrd(byte[] data) { // pakiet UG_ENTER_WORLD nie ma nic SysCons.LogInfo("UG_ENTER_WORLD"); //GU_NETMARBLEMEMBERIP_NFY SysCons.LogInfo("GU_NETMARBLEMEMBERSHIP_NFY"); Packet pkt = new Packet(); pkt.Opcode = (ushort)PacketOpcodes.GU_NETMARBLEMEMBERIP_NFY; pkt.BuildPacket(); this.Client.Send(pkt.Data); // jakis pakiet na surowo //ContentsOnOff SysCons.LogInfo("GU_SERVER_CONTENTS_ONOFF"); byte[] contents_onoff = { 0x00, 0x00, 0x40, 0xb1, 0xff, 0x12, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x90, 0x00, 0x06, 0xda, 0x08, 0x00, 0x00, 0xd7, 0x08, 0x00, 0x00, 0xdb, 0x08, 0x00, 0x00, 0xd8, 0x08, 0x00, 0x00, 0xdc, 0x08, 0x00, 0x00, 0xd9, 0x08, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 }; Packet pkt2 = new Packet(); pkt2.Opcode = (ushort)PacketOpcodes.GU_SERVER_CONTENTS_ONOFF; pkt2.BuildPacket(); pkt2.Data.Equals(contents_onoff); this.Client.Send(pkt2.Data); //GU_AVATAR_WORLD_INFO //GU_ENTER_WORLD_COMPLETE SysCons.LogInfo("GU_ENTER_WORLD_COMPLETE"); Packet pkt3 = new Packet(); pkt3.Opcode = (ushort)PacketOpcodes.GU_ENTER_WORLD_COMPLETE; pkt3.BuildPacket(); this.Client.Send(pkt3.Data); }
public void SendServerList(Boolean isOnlyOne) { SysCons.LogInfo("CU_SERVER_FARM_INFO Sending {0} server(s) information", CharConfig.Instance.GameServerCount); for (int i = 0; i < CharConfig.Instance.GameServerCount; ++i) { var oPkt = new CU_SERVER_FARM_INFO(); int srvid = i + 1; oPkt.ServerID = (byte)srvid; oPkt.MaxLoad = 100; oPkt.Load = 0; oPkt.ServerStatus = 0; oPkt.ServerName = CharConfig.Instance.GetGameServerName(srvid); oPkt.BuildPacket(); this.Client.Send(oPkt.Data); } if (isOnlyOne) { var oPkt = new CU_CHARACTER_SERVERLIST_ONE_RES(); oPkt.BuildPacket(); this.Client.Send(oPkt.Data); } else { var oPkt = new CU_CHARACTER_SERVERLIST_RES(); oPkt.BuildPacket(); this.Client.Send(oPkt.Data); } }
public void SendLoginResponse(byte[] data) { Packet oPkt = new Packet(); oPkt.Opcode = (ushort)PacketOpcodes.AU_COMMERCIAL_SETTING_NFY; oPkt.BuildPacket(); this.Client.Send(oPkt.Data); UA_LOGIN_REQ inPkt = new UA_LOGIN_REQ(); inPkt.SetData(data); SysCons.LogInfo("UA_LOGIN_REQ {0} CodePage({1}) {2}.{3}", inPkt.UserID, inPkt.CodePage, inPkt.MajorVer, inPkt.MinorVer); this.Username = inPkt.UserID; this.Password = inPkt.UserPW; this.AccountID = (uint)AuthDB.GetAccountID(this.Username); AU_LOGIN_RES sPkt = new AU_LOGIN_RES(); sPkt.UserID = inPkt.UserID; sPkt.AccountID = this.AccountID; sPkt.AllowedFunctionForDeveloper = 65535; sPkt.AuthKey = Encoding.ASCII.GetBytes("SE@WASDE#$RFWD@D"); sPkt.ResultCode = (ushort)AuthDB.CheckAccount(this.Username, this.Password); sPkt.lastServerID = 255; sPkt.lastChannelID = 255; sPkt.BuildCharServerList(); sPkt.BuildPacket(); this.Client.Send(sPkt.Data); }
internal void ChatSendMessageSay(byte[] data) { SysCons.LogInfo("UT_CHAT_MESSAGE_SAY"); Packet pkt = new Packet(); pkt.Opcode = (ushort)PacketOpcodes.TU_CHAT_MESSAGE_SAY; pkt.BuildPacket(); //this.Client.Send(pkt.Data); }
public static void Shutdown() { if (Serv != null) { SysCons.LogInfo("Shutting down CharServer.."); Serv.Shutdown(); } Environment.Exit(0); }
public override void Run() { Console.Title = "DBO Community Server"; if (!this.Listen(CommConfig.Instance.BindIP, CommConfig.Instance.Port)) { return; } SysCons.LogInfo("CommunityServer is listening on {0}:{1}...", CommConfig.Instance.BindIP, CommConfig.Instance.Port); }
internal void SendCharacterExit(byte[] data) { SysCons.LogInfo("UC_CHARACTER_EXIT_REQ disconnected client"); Packet sPkt = new Packet(); sPkt.Opcode = (ushort)PacketOpcodes.CU_CHARACTER_EXIT_RES; sPkt.BuildPacket(); this.Client.Send(sPkt.Data); }
public override void Run() { Console.Title = "DBO Auth Server"; if (!this.Listen(AuthConfig.Instance.BindIP, AuthConfig.Instance.Port)) { return; } SysCons.LogInfo("AuthServer is listening on {0}:{1}...", AuthConfig.Instance.BindIP, AuthConfig.Instance.Port); }
private void AuthServ_OnConnect(object sender, ClientEventArgs e) { SysCons.LogInfo("Client connected: {0}", e.Client.ToString()); e.Client.User = new AuthClient(e.Client); byte[] rawData = { 0x06, 0x00, 0x03, 0x00, 0x30, 0x2C, 0x67, 0x4C }; if (e.Client.IsConnected) { e.Client.Send(rawData); } }
internal void AuthKeyForCommunityServer(byte[] data) { //GU_AUTH_KEY_FOR_COMMUNITY_SERVER_RES SysCons.LogInfo("GU_AUTH_KEY_FOR_COMMUNITY_SERVER_RES"); GU_AUTH_KEY_FOR_COMMUNITY_SERVER_RES oPkt = new GU_AUTH_KEY_FOR_COMMUNITY_SERVER_RES(); oPkt.ResultCode = 500; oPkt.AuthKey = Encoding.ASCII.GetBytes("SE@WASDE#$RFWD@D"); oPkt.BuildPacket(); this.Client.Send(oPkt.Data); }
private static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) { if (e.IsTerminating) { SysCons.LogError("Terminating because of unhandled exception."); } else { SysCons.LogError("Caught unhandled exception."); } Console.ReadLine(); }
public void SendLoginResponse(byte[] data) { UC_LOGIN_REQ iPkt = new UC_LOGIN_REQ(); iPkt.SetData(data); SysCons.LogInfo("UC_LOGIN_REQ AccountID({0}) LastServerID({1})", iPkt.AccountID, iPkt.ServerID); CU_LOGIN_RES oPkt = new CU_LOGIN_RES(); oPkt.LastServerID = iPkt.ServerID; oPkt.BuildPacket(); this.Client.Send(oPkt.Data); }
public static bool StopServer() { if (Serv == null) { return(false); } SysCons.LogInfo("Stopping CharServer.."); Serv.Shutdown(); LobbyServerThread.Abort(); Serv = null; return(true); }
public static bool StopAuth() { if (AuthServ == null) { return(false); } SysCons.LogInfo("Stopping AuthServer.."); AuthServ.Shutdown(); AuthServThread.Abort(); AuthServ = null; return(true); }
int load(string rdf_file, uint record_size) { byte padding; char[] record; int ret; uint data_size; BinaryReader f = new BinaryReader(File.Open(rdf_file, FileMode.Open)); if (f == null) { return(-1); } /* Read file header information then ignore it*/ f.ReadByte(); f.ReadInt32(); f.ReadByte(); record = new char[record_size - 1]; /* Wrote custom memset method to handle 0ing out records */ Helpers.Util.Memset(record, 0, record_size); /* This loops through the file reading a record into memory */ while (f.BaseStream.Position != f.BaseStream.Length) { int n = (int)record_size; ret = f.Read(record, 0, n); if (ret == 1) { // Havee to write the on_record function as an abstract in the base class. //if (on_record(record, (uint)ret) != 0) //{ return(-1); //} } else if (f.BaseStream.Position != f.BaseStream.Length) { SysCons.LogError("%s: error loading [%s]: read %d vs %d\n", System.Reflection.MethodBase.GetCurrentMethod().Name, rdf_file, record_size, ret); return(-1); } } record = null; f = null; return(0); }
internal void SendWaitCheck(byte[] data) { UC_CONNECT_WAIT_CHECK_REQ iPkt = new UC_CONNECT_WAIT_CHECK_REQ(); iPkt.SetData(data); SysCons.LogInfo("UC_CONNECT_WAIT_CHECK_REQ ServerChannelIndex({0})", iPkt.byServerChannelIndex); CU_CONNECT_WAIT_CHECK_RES oPkt = new CU_CONNECT_WAIT_CHECK_RES(); oPkt.BuildPacket(); this.Client.Send(oPkt.Data); CU_CONNECT_WAIT_COUNT_NFY o2Pkt = new CU_CONNECT_WAIT_COUNT_NFY(); o2Pkt.BuildPacket(); this.Client.Send(o2Pkt.Data); }
public void SendDisconnect(byte[] data) { var iPkt = new UC_CHARACTER_EXIT_REQ(); iPkt.SetData(data); SysCons.LogInfo("UC_CHARACTER_EXIT_REQ IsGameMove({0})", iPkt.IsGameMove); using (var oPkt = new CU_CHARACTER_EXIT_RES()) { oPkt.ResultCode = (ushort)ResultCodes.CHARACTER_SUCCESS; oPkt.BuildPacket(); Client.Send(oPkt.Data); } }
public void SendConnectWaitCancelResult(byte[] data) { var iPkt = new UC_CONNECT_WAIT_CANCEL_REQ(); iPkt.SetData(data); SysCons.LogInfo("UC_CONNECT_WAIT_CANCEL_REQ ChannelID({0})", iPkt.ChannelID); ChannelID = iPkt.ChannelID; using (var oPkt = new CU_CONNECT_WAIT_CANCEL_RES()) { oPkt.ResultCode = (ushort)ResultCodes.CHARACTER_SUCCESS; oPkt.BuildPacket(); Client.Send(oPkt.Data); } }
internal void SendCharacterSelect(byte[] data) { UC_CHARACTER_SELECT_REQ iPkt = new UC_CHARACTER_SELECT_REQ(); iPkt.SetData(data); SysCons.LogInfo("UC_CHARACTER_SELECT_REQ charId({0}) ServerChannelIndex({1})", iPkt.charId, iPkt.byServerChannelIndex); CU_CHARACTER_SELECT_RES sPkt = new CU_CHARACTER_SELECT_RES(); sPkt.szGameServerIP = Encoding.ASCII.GetBytes("127.0.0.1"); sPkt.wGameServerPortForClient = 50400; SysCons.LogInfo("CU_CHARACTER_SELECT_RES IPAddress({0}) Port({1})", sPkt.szGameServerIP, sPkt.wGameServerPortForClient); sPkt.AuthKey = Encoding.ASCII.GetBytes("SE@WASDE#$RFWD@D"); sPkt.ResultCode = 200; // connecting to GameServer sPkt.BuildPacket(); this.Client.Send(sPkt.Data); }
public void SendCharacterCreate(byte[] data) { var iPkt = new UC_CHARACTER_ADD_REQ(); iPkt.SetData(data); SysCons.LogInfo( "UC_CHARACTER_ADD_REQ Name({0}) Race({1}) Class({2}) Gender({3}) Face({4}) Hair({5}) HairColor({6}) SkinColor({7}) Blood({8})", iPkt.Name, ((CharRaces)iPkt.Race).ToString(), ((CharClasses)iPkt.Class).ToString(), ((CharGenders)iPkt.Gender).ToString(), iPkt.Face, iPkt.Hair, iPkt.HairColor, iPkt.SkinColor, iPkt.Blood ); }
public void SendLoginResponse(byte[] data) { var iPkt = new UC_LOGIN_REQ(); iPkt.SetData(data); SysCons.LogInfo("UC_LOGIN_REQ AuthKey({0}) AccountID({1}) LastServerID({2})", iPkt.AuthKey, iPkt.AccountID, iPkt.ServerID); AccountID = iPkt.AccountID; ServerID = iPkt.ServerID; AuthKey = iPkt.AuthKey; using (var oPkt = new CU_LOGIN_RES()) { oPkt.LastServerID = ServerID; oPkt.BuildPacket(); Client.Send(oPkt.Data); } }
public virtual bool Listen(string bindIP, int port) { // Check if the server has been disposed. if (_disposed) { throw new ObjectDisposedException(this.GetType().Name, "Server has been disposed."); } // Check if the server is already listening. if (IsListening) { throw new InvalidOperationException("Server is already listening."); } // Create new TCP socket and set socket options. Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Setup our options: // * NoDelay - don't use packet coalescing // * DontLinger - don't keep sockets around once they've been disconnected Listener.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); Listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true); try { // Bind. Listener.Bind(new IPEndPoint(IPAddress.Parse(bindIP), port)); this.Port = port; } catch (SocketException) { SysCons.LogError(string.Format("{0} can't bind on {1}, server shutting down..", this.GetType().Name, bindIP)); this.Shutdown(); return(false); } // Start listening for incoming connections. Listener.Listen(10); IsListening = true; // Begin accepting any incoming connections asynchronously. Listener.BeginAccept(AcceptCallback, null); return(true); }
public void SendCharacterSelectResult(byte[] data) { var iPkt = new UC_CHARACTER_SELECT_REQ(); iPkt.SetData(data); SysCons.LogInfo("UC_CHARACTER_SELECT_REQ ServerID({0}) CharID({1})", iPkt.ServerID, iPkt.CharID); ServerID = iPkt.ServerID; CharID = iPkt.CharID; using (var oPkt = new CU_CHARACTER_SELECT_RES()) { oPkt.ResultCode = (ushort)ResultCodes.CHARACTER_SUCCESS; oPkt.CharID = CharID; oPkt.AuthKey = AuthKey; oPkt.GameServerIP = CharConfig.Instance.GetGameServerIP(ServerID, ChannelID); oPkt.GameServerPort = CharConfig.Instance.GetGameServerPort(ServerID, ChannelID); oPkt.BuildPacket(); Client.Send(oPkt.Data); } }
private void ReceiveCallback(IAsyncResult result) { Client client = result.AsyncState as Client; // Get the connection connection passed to the callback. if (client == null) { return; } try { int bytesRecv = client.EndReceive(result); // Finish receiving data from the socket. if (bytesRecv > 0) { OnDataReceived(new ClientDataEventArgs(client, client.RecvBuffer)); // Raise the DataReceived event. if (client.IsConnected) { client.BeginReceive(ReceiveCallback, client); // Begin receiving again on the socket, if it is connected. } else { RemoveClient(client, true); // else remove it from connection list. } } else { RemoveClient(client, true); // Connection was lost. } } catch (SocketException) { RemoveClient(client, true); // An error occured while receiving, connection has disconnected. } catch (Exception e) { SysCons.LogError("ReceiveCallback: {0}", e); } }
internal void SendCharacterAdd(byte[] data) { //TO DO UC_CHARACTER_ADD_REQ SysCons.LogInfo("UC_CHARACTER_ADD_REQ"); UC_CHARACTER_ADD_REQ iPkt = new UC_CHARACTER_ADD_REQ(); iPkt.SetData(data); SysCons.LogInfo( "UC_CHARACTER_ADD_REQ Name({0}) Race({1}) Class({2}) Gender({3}) Face({4}) Hair({5}) HairColor({6}) SkinColor({7}) Blood({8})", iPkt.Name, ((CharRaces)iPkt.Race).ToString(), ((CharClasses)iPkt.Class).ToString(), ((CharGenders)iPkt.Gender).ToString(), iPkt.Face, iPkt.Hair, iPkt.HairColor, iPkt.SkinColor, iPkt.Blood ); //dlaczego wczesniej bylo var ? CU_CHARACTER_ADD_RES oPkt = new CU_CHARACTER_ADD_RES(); oPkt.ResultCode = (ushort)CharDB.InsertCharacter(this.AccountID, this.ServerID, iPkt.Name, iPkt.Race, iPkt.Class, iPkt.Gender, iPkt.Face, iPkt.Hair, iPkt.HairColor, iPkt.SkinColor); oPkt.charID = 1; oPkt.Name = iPkt.Name; oPkt.Race = iPkt.Race; oPkt.Class = iPkt.Class; oPkt.Gender = iPkt.Gender; oPkt.Face = iPkt.Face; oPkt.Hair = iPkt.Hair; oPkt.Gender = iPkt.Gender; oPkt.HairColor = iPkt.HairColor; oPkt.SkinColor = iPkt.SkinColor; oPkt.worldTblidx = 1; oPkt.worldId = 1; oPkt.BuildPacket(); this.Client.Send(oPkt.Data); }