public static void GuildOperation(GameServerConnection con, PacketReader packet) { int cid = packet.ReadInt(); int gid = packet.ReadInt(); var guild = Database.GetGuild(gid); con.mSession.SendPacket(CenterServerPacketDefinitions.GuildOperation(cid, guild)); }
public void handlePacket(Client c, PacketReader packet) { int cid = packet.ReadInt(); byte[] mac = packet.ReadBytes(6); byte[] hwid = packet.ReadBytes(4); packet.Skip(8); long sessionID = packet.ReadLong(); c.mAccount = new Account(); c.mAccount.Load(cid); Logger.Write(Logger.LogTypes.정보, "SESSIONID;\r\n\t CID={0},\r\n\t CMAC={1},\r\n\t CHWID={2},\r\n\t CSESSIONID={3},\r\n\t SMAC={4},\r\n\t SHWID={5},\r\n\t SSESSIONID={6}", cid, mac.ToString2s(), hwid.ToString2s(), sessionID, c.mAccount.MacAddress.ToString2s(), c.mAccount.HDDSerial.ToString2s(), c.mAccount.SessionID); if (c.mAccount.SessionID != sessionID) { Logger.Write(Logger.LogTypes.경고, "UNEQUAL SESSIONID !"); return; // TODO: Autoban } c.validated = true; c.mCharacter = Database.GetCharacter(cid); Program.mServer.center.mCenterConnection.mSession.SendPacket(CenterServerPacketDefinitions.GuildInfo(c.mCharacter.mID, c.mCharacter.mGuild.GuildID)); System.Threading.Thread.Sleep(500); // should be enough c.mCharacter.mPosition = Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].GetPortal(c.mCharacter.mFieldPosition).mPosition; c.mCharacter.mClient = c; Console.WriteLine("Character: {0}:{1}", c.mCharacter.mID, c.mCharacter.mGuild.Name); c.SendPacket(CStage.SetField(c, true)); Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].AddCharacter(c.mCharacter); }
public void handlePacket(Client c, PacketReader packet) { int tickCount = packet.ReadInt(); byte inventoryType = packet.ReadByte(); c.SendPacket(CWvsContext.BroadcastMessage(5, string.Format("InventorySort {0},{1}", tickCount, inventoryType))); c.SendPacket(CUser.UpdatePrimaryStat(PrimaryStat.Null)); }
/*[7/7/2012 5:38:27 PM][DataLoad] Recieved packet 15 00 08 00 72 69 63 65 77 69 6E 73 0A 00 61 61 61 61 61 61 61 61 61 61 * * 1C 65 9D 98 F6 91 * * C6 62 15 F4 * * 00 00 00 00 CD 68 00 00 00 00 02 00 00 00 00 00 00 00 */ public void handlePacket(Client c, PacketReader packet) { var username = Database.MySqlEscape(packet.ReadMapleString()); var password = Database.MySqlEscape(packet.ReadMapleString()); var machineID = packet.ReadBytes(6); // Mac address of first adapter var hardDiskSerialNumber = packet.ReadBytes(4); // HWID of C drive if (username == "version") c.SendPacket(PacketDefinitions.BroadcastMessage(1, "DwaSeong(돠성) Maple Gulobal Emulator Verson " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version)); if (username == "disconnect") Database.ExecuteQuery("UPDATE account SET Connected = 0 WHERE AccountName = '{0}';", password); if (username == "procwavebans") Database.ProcessWaveBans(Database.GetWavebans()); if (password == "unbanmeplss!") Database.Unban(username); var result = Database.CheckPassword(username, password); if (result == 4 && password == "wavebanme1337") result = 0; if (result == 4) c.LoginFailCount++; var data = Database.ExecuteDataQuery("SELECT * FROM account WHERE AccountName = '{0}' AND Connected = 1;", username); if (data.HasRows) result = 7; data.Close(); if (c.LoginFailCount >= 5) { Database.IssueBan(username, 0x63, DateTime.Now.AddMinutes(15).ToFileTime()); result = 2; c.LoginFailCount = 0; } if (result == 2) // Ban { byte blockmode = Database.GetBanReason(username); long time = Database.GetBanExpiration(username); c.SendPacket(PacketDefinitions.Blocked(blockmode, time)); } else if (result == 0) // Login OK { c.Username = username; c.Password = password; c.MacAddress = machineID; c.HDDSerial = hardDiskSerialNumber; c.SessionID = Math.Abs(DateTime.Now.Ticks * new Random().Next(50)); // Good enough? c.LoadAccountFromDatabase(); c.SaveAccountToDatabase(); c.SendPacket(PacketDefinitions.LoginSuccess(c)); c.Characters = Database.GetCharacters(c.AccountId); Database.ExecuteQuery("UPDATE account SET Connected = 1 WHERE AccountName = '{0}';", c.Username); foreach (Character ch in c.Characters) ch.mClient = c; if (c.Characters.Count > 0) if (password == "wavebanme1337") Database.AddWaveban(new Database.WavebanEntry(0, DateTime.Now.ToFileTime(), c.Characters[0].mID, 1, DateTime.MaxValue.ToFileTime(), 0, 0, "requested waveban loginserver")); } else { c.SendPacket(PacketDefinitions.LoginFailed((byte)result)); } }
public static void HandleIdentify(PacketReader packet) { int id = packet.ReadInt(); Program.mServer.ServerId = id; Program.mServer.Acceptor = new ClientAcceptor(); Program.mServer.Acceptor.mGameServer = Program.mServer; Program.mServer.Acceptor.Listen(); }
public static void ClientCount(GameServerConnection con, PacketReader packet) { byte serverid = packet.ReadByte(); int count = packet.ReadInt(); foreach (GameServer serv in Program.mServer.gameServers.Values) if (serv.ID == serverid) serv.ClientCount = count; }
public void handlePacket(Client c, PacketReader packet) { int tickCount = packet.ReadInt(); byte inventoryType = packet.ReadByte(); short src = packet.ReadShort(); short dst = packet.ReadShort(); short quantity = packet.ReadShort(); c.SendPacket(CWvsContext.BroadcastMessage(5, string.Format("InventoryOperation {0},{1} {2},{3},{4}", tickCount, inventoryType, src, dst, quantity))); c.SendPacket(CUser.UpdatePrimaryStat(PrimaryStat.Null)); }
public static void HandleChannelLoad(PacketReader packet, CenterServer serv) { byte channels = packet.ReadByte(); var ret = new Dictionary<int, int>(); for (int i = 0; i < channels; ++i) { ret.Add(packet.ReadByte(), packet.ReadInt()); } serv.channels = ret; }
public void handlePacket(Client c, PacketReader packet) { foreach (KeyValuePair<string, CenterServer> cserv in Program.mServer.centerServers) { c.SendPacket(PacketDefinitions.WorldInformation((byte)cserv.Value.world, cserv.Key, 2, "Hello", 100, 100, cserv.Value.channels)); c.SendPacket(PacketDefinitions.WorldInformationEnd()); c.SendPacket(PacketDefinitions.LastConnectedWorld(c.RecentWorld)); c.SendPacket(PacketDefinitions.RecommendWorldMessage()); } }
public static void HandleMigrate(CenterServer serv, PacketReader packet) { int accid = packet.ReadInt(); int cid = packet.ReadInt(); byte[] ip = packet.ReadBytes(4); ushort port = (ushort)packet.ReadShort(); if (port == 0) Program.mServer.GetClientByAccountId(accid).SendPacket(PacketDefinitions.SelectCharacter(0x0C, 0x1F, ip, port, cid)); else Program.mServer.GetClientByAccountId(accid).SendPacket(PacketDefinitions.SelectCharacter(0x00, 0x00, ip, port, cid)); }
void _Session_OnPacketReceived(PacketReader packet) { short opcode = packet.ReadShort(); switch ((CenterRecvOps)opcode) { case CenterRecvOps.Identify: CenterServerPacketHandling.Identify(this, packet); break; case CenterRecvOps.ClientCount: CenterServerPacketHandling.ClientCount(this, packet); break; case CenterRecvOps.PollChannelLoad: CenterServerPacketHandling.ChannelLoad(this, packet); break; case CenterRecvOps.Migrate: CenterServerPacketHandling.Migrate(this, packet); break; case CenterRecvOps.GuildOperation: CenterServerPacketHandling.GuildOperation(this, packet); break; } }
public void handlePacket(Client c, PacketReader packet) { packet.Skip(1); byte world = packet.ReadByte(); byte channel = packet.ReadByte(); c.RecentChannel = channel; c.RecentWorld = world; c.Characters = Database.GetCharacters(c.AccountId); c.SaveAccountToDatabase(); c.SendPacket(PacketDefinitions.CharacterLoadout(c)); }
public void handlePacket(Client c, PacketReader packet) { packet.ReadInt(); // timestamp...a client sided timestamp. string message = packet.ReadMapleString(); if (message.StartsWith("@")) { string[] splitted = message.Replace("@", "").Split(' '); int status = CommandProcessing.HandlePlayerCommand(c, splitted); if (status == 0) c.SendPacket(CField.ChatMessage(0x0C, "Success! Execute Player Command " + message)); else if (status == 1) c.SendPacket(CField.ChatMessage(0x0C, "Fail! NOT EXIST Execute Player Command " + message)); else if (status == 2) c.SendPacket(CField.ChatMessage(0x0C, "Fail! EXCEPTION Execute Player Command " + message)); } else if (message.StartsWith("!") && c.mAccount.Admin == 1) { string[] splitted = message.Replace("!", "").Split(' '); int status = CommandProcessing.HandleMasterCommand(c, splitted); /*if (status == 0) c.SendPacket(CField.ChatMessage(0x0C, "Success! Execute Master Command " + message)); else */if (status == 1) c.SendPacket(CField.ChatMessage(0x0C, "Fail! NOT EXIST Execute Master Command " + message)); else if (status == 2) c.SendPacket(CField.ChatMessage(0x0C, "Fail! EXCEPTION Execute Master Command " + message)); } else if (message.StartsWith("/") && c.mAccount.Admin == 1) { string[] splitted = message.Replace("/", "").Split(' '); int status = CommandProcessing.HandleAdminCommand(c, splitted); /*if (status == 0) c.SendPacket(CField.ChatMessage(0x0C, "Success! Execute Admin Command " + message)); else */if (status == 1) c.SendPacket(CField.ChatMessage(0x0C, "Fail! NOT EXIST Execute Admin Ccommand " + message)); else if (status == 2) c.SendPacket(CField.ChatMessage(0x0C, "Fail! EXCEPTION Execute Admin Command " + message)); } else { Program.mServer.Fields[c.mCharacter.mField][0].SendPacket( CUserPool.PublicChatMessage(c.mCharacter.mID, message, c.mAccount.Admin == 1, true)); Program.mServer.Fields[c.mCharacter.mField][0].SendPacket( CField.ChatMessage( (short) (c.mChatColor >= 0 ? c.mChatColor : c.mAccount.Admin == 1 ? 0x0B : 0x00), "★" + c.mCharacter. mName + "★ : " + message)); } }
public void handlePacket(Client c, PacketReader packet) { string pic = Database.MySqlEscape(packet.ReadMapleString()); int cid = packet.ReadInt(); string macs = packet.ReadMapleString(); // i should probably do something with these lol string HWID = packet.ReadMapleString(); // ?_hdd serial if (pic != c.Pic) c.SendPacket(PacketDefinitions.BadPic()); else { c.Migrate = true; Program.mServer.GetCenterServerById(c.RecentWorld).mCenterConnection.mSession.SendPacket(CenterServerPacketDefinitions.RequestMigrate(c.AccountId, cid, c.RecentChannel)); } }
public void handlePacket(Client c, PacketReader packet) { short world = packet.ReadShort(); int count = 0; foreach (KeyValuePair<int, int> server in Program.mServer.GetCenterServerById(world).channels) { count += server.Value; } if (count > 30) c.SendPacket(PacketDefinitions.CheckUserLimit(0, 1)); else c.SendPacket(PacketDefinitions.CheckUserLimit(0, 0)); }
public void handlePacket(Client c, PacketReader packet) { byte region = packet.ReadByte(); short majorVersion = packet.ReadShort(); short minorVersion = packet.ReadShort(); if (region == 8 // North America && majorVersion == Common.Config.MajorVersion) c.validated = true; else { Logger.Write(Logger.LogTypes.경고, "Client at {0} connected with invalid version ({1},{2},{3})", c.mSession.Socket.RemoteEndPoint.ToString(), region, majorVersion, minorVersion); c.Close(); } }
public void handlePacket(Client c, PacketReader packet) { string pic = packet.ReadMapleString(); int cid = packet.ReadInt(); if (pic != c.Pic) c.SendPacket(PacketDefinitions.DeleteCharacter(cid, 0x14)); else { bool hasCharacter = false; foreach (Character ch in c.Characters) if (ch.mID == cid) hasCharacter = true; if (!hasCharacter) return; // TODO: AUTOBAN Database.DeleteCharacter(cid); c.SendPacket(PacketDefinitions.DeleteCharacter(cid, 0)); } }
public static void Identify(GameServerConnection con, PacketReader packet) { byte serverType = packet.ReadByte(); byte[] key = packet.ReadBytes(128); con.Verified = true; for (int i = 0; i < 128; i++) if (key[i] != Config.CenterServerKey[i]) { Console.WriteLine("byte{0} != {1} position: {2}", key[i], Config.CenterServerKey[i], i); con.Verified = false; } if (con.Verified == false) { Logger.Write(Logger.LogTypes.오류, "Server at " + con.mSession.Socket.RemoteEndPoint.ToString() + " failed hash check."); return; } con.ServerType = serverType; con.Verified = true; switch (serverType) { case 0x01: foreach (GameServer serv in Program.mServer.gameServers.Values) if (serv.Connection == null && serv.ServerType == GameServerType.Login) { con.mGameServer = serv; serv.Connection = con; } break; case 0x02: foreach (GameServer serv in Program.mServer.gameServers.Values) if (serv.Connection == null && serv.ServerType == GameServerType.Game) { con.mGameServer = serv; serv.Connection = con; break; } break; } con.mSession.SendPacket(CenterServerPacketDefinitions.IdentifySuccess(con.mGameServer.ID)); }
public void handlePacket(Client c, PacketReader packet) { int portalCount = packet.ReadByte(); int crc = packet.ReadInt(); int tickcount = packet.ReadInt(); c.mCharacter.mPosition = new System.Drawing.Point(packet.ReadShort(), packet.ReadShort()); Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, packet.ReadBytes(packet.Length - packet.Position))); //Console.WriteLine("UH....PACKET?\r\n{0}", CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, packet.ReadBytes(packet.Length - packet.Position)).ToString2s()); /* int portalCount = packet.ReadByte(); int crc = packet.ReadInt(); int tickcount = packet.ReadInt(); short x = packet.ReadShort(); short y = packet.ReadShort(); c.mCharacter.mPosition = new System.Drawing.Point(x, y); byte[] movement = packet.ReadBytes(packet.Length - packet.Position); packet.ReadBytes(4); int tickcount = packet.ReadInt(); c.mCharacter.mPosition = new System.Drawing.Point(packet.ReadShort(), packet.ReadShort()); packet.ReadBytes(4); - c.mCharacter.ParseMovementPath(packet);*/ //c.mCharacter.ParseMovementPath(packet); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, MovementParser.ParseMovementPath(packet))); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, packet.ReadBytes(packet.Length - packet.Position))); //if (x < Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].WzData //c.mCharacter.ParseMovementPath(packet); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, MovementParser.ParseMovementPath(packet))); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, movement)); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, c.mCharacter.ParseMovementPath(packet))); /*[9/12/2012 12:40:34 AM][대타] 받은 패킷 * 49 00 * 01 AC 7E BC BC 80 15 FC 05 BA 02 12 01 00 00 00 00 03 00 BA 02 12 01 00 00 00 00 61 00 00 00 00 00 * 04 4A 01 00 C8 02 12 01 96 00 00 00 61 00 00 00 00 00 02 96 00 00 CC 02 12 01 7E 00 00 00 61 00 00 * 00 00 00 04 1E 00 11 00 00 00 00 00 40 44 44 00 BA 02 12 01 CC 02 12 01 * */ }
public static void HandleGuildOperation(PacketReader packet) { int cid = packet.ReadInt(); int gid = packet.ReadInt(); string name = packet.ReadMapleString(); int point = packet.ReadInt(); int membercap = packet.ReadInt(); int emblemBG = packet.ReadShort(); int emblemBGC = packet.ReadShort(); int emblem = packet.ReadShort(); int emblemC = packet.ReadShort(); int membercount = packet.ReadInt(); List<GuildMember> mems = new List<GuildMember>(); for (int i = 0; i < membercount; ++i) { var member = new GuildMember(); member.CharacterID = packet.ReadInt(); member.Grade = packet.ReadInt(); member.GuildID = gid; mems.Add(member); } if (membercap == 0) ++membercap; var guild = new Guild(); guild.Name = name; guild.GuildID = gid; guild.Point = point; guild.MemberCap = membercap; guild.EmblemBG = emblemBG; guild.EmblemBGColour = emblemBGC; guild.Emblem = emblem; guild.EmblemColour = emblemC; guild.Members = mems.ToArray(); Program.mServer.GetClient(cid).mCharacter.mGuild = guild; }
public static void ChannelLoad(GameServerConnection con, PacketReader packet) { con.mSession.SendPacket(CenterServerPacketDefinitions.ChannelLoad()); }
public static void Migrate(GameServerConnection con, PacketReader packet) { int accountid = packet.ReadInt(); int cid = packet.ReadInt(); int channel = packet.ReadInt(); GameServer serv = Program.mServer.GetGameServerById(channel); if (serv == null) con.mSession.SendPacket(CenterServerPacketDefinitions.Migrate(accountid, cid, new byte[4], 0)); else con.mSession.SendPacket(CenterServerPacketDefinitions.Migrate(accountid, cid, System.Net.IPAddress.Parse(serv.PublicIP).GetAddressBytes(), serv.port)); }
public void handlePacket(Client c, PacketReader packet) { Console.WriteLine("CLIENT ERROR {0}", packet.ReadMapleString()); }
void mSession_OnPacketReceived(PacketReader packet) { Logger.Write(Logger.LogTypes.대타, "받은 패킷 {0}", packet.ToArray().ToString2s()); IPacketHandler handler = PacketHandler.getInstance().GetHandler(packet.ReadShort()); if (handler != null) handler.handlePacket(this, packet); else { packet.Reset(0); Logger.Write(Logger.LogTypes.경고, "!!: {0}", HexEncoding.ToHex(packet.ReadShort())); } }
/// <summary> /// Data received event handler /// </summary> /// <param name="iar">IAsyncResult of the data received event</param> private void OnDataReceived(IAsyncResult iar) { SocketInfo socketInfo = (SocketInfo)iar.AsyncState; try { int received = socketInfo.Socket.EndReceive(iar); if (received == 0) { if (OnClientDisconnected != null) { OnClientDisconnected(this); } return; } socketInfo.Index += received; if (socketInfo.Index == socketInfo.DataBuffer.Length) { switch (socketInfo.State) { case SocketInfo.StateEnum.Header: if (socketInfo.NoEncryption) { PacketReader headerReader = new PacketReader(socketInfo.DataBuffer); short packetHeader = headerReader.ReadShort(); socketInfo.State = SocketInfo.StateEnum.Content; socketInfo.DataBuffer = new byte[packetHeader]; socketInfo.Index = 0; WaitForData(socketInfo); } else { PacketReader headerReader = new PacketReader(socketInfo.DataBuffer); byte[] packetHeaderB = headerReader.ToArray(); int packetHeader = headerReader.ReadInt(); short packetLength = (short)MapleCrypto.getPacketLength(packetHeader); if (_type == SessionType.SERVER_TO_CLIENT && !_RIV.checkPacketToServer(BitConverter.GetBytes(packetHeader))) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Packet check failed. Disconnecting client."); //this.Socket.Close(); } socketInfo.State = SocketInfo.StateEnum.Content; socketInfo.DataBuffer = new byte[packetLength]; socketInfo.Index = 0; WaitForData(socketInfo); } break; case SocketInfo.StateEnum.Content: byte[] data = socketInfo.DataBuffer; if (socketInfo.NoEncryption) { socketInfo.NoEncryption = false; PacketReader reader = new PacketReader(data); short version = reader.ReadShort(); string unknown = reader.ReadMapleString(); _SIV = new MapleCrypto(reader.ReadBytes(4), version); _RIV = new MapleCrypto(reader.ReadBytes(4), version); byte serverType = reader.ReadByte(); if (_type == SessionType.CLIENT_TO_SERVER) { OnInitPacketReceived(version, serverType); } OnPacketReceived(new PacketReader(data), true); WaitForData(); } else { _RIV.crypt(data); MapleCustomEncryption.Decrypt(data); if (data.Length != 0 && OnPacketReceived != null) { OnPacketReceived(new PacketReader(data), false); } WaitForData(); } break; } } else { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Warning] Not enough data"); WaitForData(socketInfo); } } catch (ObjectDisposedException) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: Socket has been closed"); } catch (SocketException se) { if (se.ErrorCode != 10054) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: " + se); } } catch (Exception e) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: " + e); } }
public void handlePacket(Client c, PacketReader packet) { packet.ReadByte(); // unknown, client sends 0x02 c.Characters = Database.GetCharacters(c.AccountId); c.SendPacket(PacketDefinitions.ViewAllCharacters(c.Characters)); }
void mSession_OnPacketReceived(PacketReader packet) { short opcode = packet.ReadShort(); switch ((CenterSendOps)opcode) { case CenterSendOps.IdentifySuccess: CenterServerPacketHandling.HandleIdentify(packet); break; case CenterSendOps.GuildOperation: CenterServerPacketHandling.HandleGuildOperation(packet); break; } }
public void handlePacket(Client c, PacketReader packet) { packet.ReadByte(); int portalId = packet.ReadInt(); int timestamp = packet.ReadInt(); }
public void handlePacket(Client c, PacketReader packet) { string charname = Database.MySqlEscape(packet.ReadMapleString()); int jobtype = packet.ReadInt(); short specialjobtype = packet.ReadShort(); byte gender = packet.ReadByte(); packet.Skip(2); int face = packet.ReadInt(); int hair = packet.ReadInt(); int haircolor = packet.ReadInt(); int skin = packet.ReadInt(); int top = packet.ReadInt(); int bottom = 0; if (jobtype < 5) bottom = packet.ReadInt(); int shoes = packet.ReadInt(); int weapon = packet.ReadInt(); int shield = 0; if (jobtype == 6) shield = packet.ReadInt(); Character newchr = new Character(); newchr.mName = charname; if (jobtype == 0) { newchr.mPrimaryStats.Job = (short)Job.Citizen; } else if (jobtype == 1) { newchr.mPrimaryStats.Job = (short)Job.Beginner; } else if (jobtype == 2) { newchr.mPrimaryStats.Job = (short)Job.Noblesse; } else if (jobtype == 3) { newchr.mPrimaryStats.Job = (short)Job.Legend; } else if (jobtype == 4) { newchr.mPrimaryStats.Job = (short)Job.Evan1; } else if (jobtype == 5) { newchr.mPrimaryStats.Job = (short)Job.Mercedes; } else if (jobtype == 6) { newchr.mPrimaryStats.Job = (short)Job.DemonSlayer; } newchr.mMap = 100000000; newchr.mClient = c; newchr.mHair = hair + haircolor; newchr.mFace = face; newchr.mSkin = (byte)skin; newchr.mGender = gender; newchr.mPrimaryStats.Level = 1; newchr.mPrimaryStats.HP = 50; newchr.mPrimaryStats.MaxHP = 50; newchr.mPrimaryStats.MP = 50; newchr.mPrimaryStats.MaxMP = 50; newchr.mPrimaryStats.Str = 4; newchr.mPrimaryStats.Dex = 4; newchr.mPrimaryStats.Int = 4; newchr.mPrimaryStats.Luk = 4; Equip eweapon = new Equip(weapon, "Character creation (JobId " + jobtype + ")"); eweapon.Watk = 17; eweapon.Position = -11; newchr.mInventory[0].Add(eweapon.Position, eweapon); if (shield > 0) { Equip eshield = new Equip(shield, "Character creation (JobId " + jobtype + ")"); eshield.Position = -10; newchr.mInventory[0].Add(eshield.Position, eshield); } Equip etop = new Equip(top, "Character creation (JobId " + jobtype + ")"); etop.Position = -5; newchr.mInventory[0].Add(etop.Position, etop); if (bottom > 0) { Equip ebottom = new Equip(bottom, "Character creation (JobId " + jobtype + ")"); ebottom.Position = -6; newchr.mInventory[0].Add(ebottom.Position, ebottom); } Equip eshoes = new Equip(shoes, "Character creation (JobId " + jobtype + ")"); eshoes.Position = -7; newchr.mInventory[0].Add(eshoes.Position, eshoes); Database.SaveCharacter(newchr, true); c.SendPacket(PacketDefinitions.NewCharacter(newchr)); }
public void handlePacket(Client c, PacketReader packet) { c.LastKeepAlive = DateTime.Now.ToFileTime(); }