public static void Handle(User user, InPacket packet) { Console.WriteLine("Login packet: ", Util.ByteToHex(packet.packet)); string uid = packet.ReadString(); string upw = packet.ReadString(); Console.WriteLine("User logging in: {0} / {1}", uid, upw); bool loginSuccess = false; try { using (MySqlCommand cmd = Program._MySQLConn.CreateCommand()) { cmd.CommandText = "SELECT *, COUNT(*) AS count FROM users WHERE username = @userid AND password = @userpw;"; cmd.Parameters.AddWithValue("@userid", Methods.CleanString(uid)); cmd.Parameters.AddWithValue("@userpw", Methods.CleanString(upw)); using (MySqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { if (reader.GetInt32("count") >= 1) { loginSuccess = true; PacketBuffer loginAck = new PacketBuffer(0x7EC, user); loginAck.WriteHexString("42 72 05 51 38 20 DB 2B 27 2A D5 64 85 08 FC 04 0A C2 BF B6 EF 2F 51 60 F3 3A F4 2F D5 59 5F 58 D0 ED 8B A9 76 54 32 10"); loginAck.WriteBytePad(0x00, 360); loginAck.WriteUInt16(40); loginAck.WriteUInt16(4585); loginAck.Send(); user.Id = reader.GetUInt32("id"); user.Username = reader.GetString("username"); user.SlotsAllowed = reader.GetInt32("char_slots"); user.SlotTickets = 5; // Temporary } else { PacketBuffer data = new PacketBuffer(0x2CEF, user); data.WriteByteArray(new byte[] { 0x63, 0xEA, 0x00, 0x00 }); data.Send(); } } } cmd.Dispose(); } if (loginSuccess) { CharacterList.Handle(user, packet.packet); } } catch (Exception ex) { Program.logger.Error(ex, "Database error: "); } }
public static void SendMessage(MartialClient c, InPacket p) { if (c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook SendMessage handling while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; int messageType = p.ReadInt(); // identifier of message type maybe? string receiver = p.ReadString(20); // receiver name MiscFunctions.obscureString(receiver); if (!MySQLTool.NameTaken(receiver)) { return; } int messageLength = p.ReadInt(); // message length string message = p.ReadString(messageLength); MiscFunctions.obscureString(message); OutPacket op = new OutPacket(20); op.WriteInt(20); op.WriteShort(4); op.WriteShort(0x53); op.WriteInt(718349825); op.WriteInt(chr.getuID()); op.WriteInt(-1089732352); c.WriteRawPacket(op.ToArray()); }
public static void Gifts_Req(InPacket lea, Client c) { int ItemID = lea.ReadInt(); string ItemName = lea.ReadString(62); string CharacterName = lea.ReadString(20); int Type = 1; if (CashShopFactory.GetItemData(ItemID) == null) { return; } c.Account.GamePoints -= CashShopFactory.GetItemData(ItemID).BargainPrice; c.Account.Save(); dynamic datum = new Datum("gifts"); datum.name = CharacterName; datum.itemID = ItemID; datum.itemName = ItemName; datum.receive = 0; datum.Insert(); CashShopPacket.Gifts(c, Type); CashShopPacket.MgameCash(c); CashShopPacket.GuiHonCash(c); }
public static void LauncherValidate(MartialClient c, InPacket p) { byte pinLength = p.ReadByte(); byte uNameLength = p.ReadByte(); byte passWLength = p.ReadByte(); p.ReadByte(); string pin = MiscFunctions.obscureString(p.ReadString(4)); string uN = MiscFunctions.obscureString(p.ReadString(16)); string pW = MiscFunctions.obscureString(p.ReadString(12)); Account account = new Account(); if (account.Load(uN, pW, pin) != Account.AccountLoadErrors.Success) { c.WriteRawPacket(Constants.accDoesntExist); Logger.WriteLog(Logger.LogTypes.HEmi, "Authorization error for [{0} | {1} | {2}]", uN, pW, pin); c.Close(); return; } Logger.WriteLog(Logger.LogTypes.HEmi, "User passed authorization [{0} | {1} | {2}]", uN, pW, pin); account.mClient = c; c.setAccount(account); account.LoadCharacters(); if (c.getAccount().characters.Count() > 0) { c.WriteRawPacket(LoginPacketCreator.initCharacters(c.getAccount(), false).Concat(Constants.emptyAccount).ToArray()); } c.WriteRawPacket(Constants.emptyAccount); c.WriteRawPacket(LoginPacketCreator.initAccount(c.getAccount())); }
public void Handle(User u, InPacket p) { ushort usernameLength = p.ReadUShort(); string username = p.ReadString(usernameLength); ushort passwordLength = p.ReadUShort(); string password = p.ReadString(passwordLength); Console.WriteLine("Login Request: {0}:{1}", username, password); }
public static void CheckName_Req(InPacket lea, Client c) { string Name = lea.ReadString(20); bool IsExist = Database.Exists("Characters", "name = '{0}'", Name); CashShopPacket.CheckName(c, IsExist ? 1 : 0); }
private void OnCharacterNameCheckResponse(InPacket inPacket) { string name = inPacket.ReadString(); bool taken = inPacket.ReadBool(); this.World.CharacterNamePool.Enqueue(name, taken); }
public static void HandleMapleChat(MapleConnection connection, InPacket packet) { MapleChatMode mode = (MapleChatMode)packet.ReadByte(); switch (mode) { case MapleChatMode.InviteReceive: { if (MapleChat.Instance != null) { return; // NOTE: Invite is automatically ignored while being in a chat session. } string sender = packet.ReadString(); byte unknown1 = packet.ReadByte(); MapleChat.ID = packet.ReadInt(); byte unknown2 = packet.ReadByte(); DialogResult result = Main.Instance.Notify(sender + " has invited you to a chat. Would you like to join?", "Maple Chat", 0, false, true); if (result == DialogResult.Yes) { connection.Send(SocialPacket.JoinMapleChat(MapleChat.ID)); } } break; case MapleChatMode.InviteSent: { } break; } }
public static void SellStart_Req(InPacket lea, Client c) { string Name = lea.ReadString(40); var chr = c.Character; //if (!(chr.MapX == 1 && chr.MapY == 51) && !(chr.MapX == 1 && chr.MapY == 52) && !(chr.MapX == 1 && chr.MapY == 53) && !(chr.MapX == 1 && chr.MapY == 54) && !(chr.MapX == 1 && chr.MapY == 55)) // return; Map map = MapFactory.GetMap(chr.MapX, chr.MapY); CharacterShop PlayerShop = new CharacterShop(Name); for (int i = 0; i < 12; i++) { int SourceType = lea.ReadShort(); int SourceSlot = lea.ReadShort(); int Quantity = lea.ReadInt(); int Price = lea.ReadInt(); Item Source = chr.Items.getItem((byte)SourceType, (byte)SourceSlot); if (Source != null) { PlayerShop.Add(new ShopData(Source.ItemID, Quantity, SourceType, SourceSlot, (byte)i, Source.Spirit, Source.Level1, Source.Level2, Source.Level3, Source.Level4, Source.Level5, Source.Level6, Source.Level7, Source.Level8, Source.Level9, Source.Level10, Source.Fusion, Source.IsLocked, Source.Icon, Source.Term, Price)); } } chr.Shop = PlayerShop; foreach (Character All in map.Characters) { PlayerShopPacket.SellStart(All.Client, chr, Name); } }
public async Task Handle(Client client, byte[] packet) { var p = new InPacket(packet); var username = p.ReadString(); p.Seek(19); // Skip past the 17 character + \0 username var password = p.ReadString(); if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) { OnLoginFail(client); return; } DbUser user; await using (var db = Database.Get()) { user = await db.QueryFirstAsync <DbUser>("SELECT * FROM users WHERE username = @username;", new { username }); if (user == null || user.Password != password) { OnLoginFail(client); return; } // Update the auth token so the user can authenticate later try { var token = GenerateLoginToken(); await db.ExecuteAsync("UPDATE users SET auth_token = @token WHERE id = @id;", new { token, id = user.Id }); user.AuthToken = token; } catch (Exception ex) { Log.Error(ex, "Unable to set the user's auth token."); OnLoginFail(client); return; } } await OnLoginOk(client, user); }
public static void MyChar_Info_Req(InPacket lea, Client gc) { string[] data = lea.ReadString(lea.Available).Split(new[] { (char)0x20 }, StringSplitOptions.None); //int encryptKey = int.Parse(data[1]); string username = data[2]; string password = data[4]; gc.SetAccount(new Account(gc)); try { Log.Debug("MyChar_Info_Req {0} ", "gc.Account.Load"); gc.Account.Load(username); int AccountStatus = gc.Account.Banned; string AccountPassword = gc.Account.Password; #if DEBUG Log.Debug("[LOG] Login Check has been bypass from DEBUG MODE"); #else if (!password.Equals(AccountPassword)) { gc.Dispose(); } if (AccountStatus > 1) { gc.Dispose(); } #endif gc.Account.Characters = new List <Character>(); foreach (dynamic datum in new Datums("Characters").PopulateWith("id", "accountId = '{0}' && worldId = '{1}' ORDER BY position ASC", gc.Account.ID, gc.WorldID)) { Log.Debug("MyChar_Info_Req -> datum.id {0} -> username {1}", datum.id, gc.Account.Username); Character character = new Character((int)datum.id, gc); character.Load(false); gc.Account.Characters.Add(character); } CharPacket.MyChar_Info_Ack(gc, gc.Account.Characters); Log.Success("Login Success! Username: {0}", username); Log.Debug("Password = {0}", password); } catch (NoAccountException) { gc.Dispose(); Log.Error("Login Fail!"); } }
public static void HandleSpawnCharacter(MapleConnection connection, InPacket packet) { Character character = new Character(); character.ID = packet.ReadInt(); character.Level = packet.ReadByte(); packet.ReadShort(); character.Name = packet.ReadString(); Main.Instance.DrawCharacterObject(character); }
public static void BuyCommodity_Req(InPacket lea, Client c) { int ItemID = lea.ReadInt(); string ItemName = lea.ReadString(62); short Quantity = 1; bool IsLocked = true; var chr = c.Character; if (CashShopFactory.GetItemData(ItemID) == null) { return; } if (ItemID == 8842002) { Quantity = 10; } if (ItemID == 8841001 || ItemID == 8841002 || ItemID == 8841003 || ItemID == 8841004 || ItemID == 8841005) { Quantity = 20; } if (ItemID == 8890031 || ItemID == 8890037) // 鞭炮 + 心花怒放 { Quantity = 100; } if (ItemID / 100000 == 92 || ItemID == 8890031 || ItemID == 8890037) // 寵物 + 鞭炮 + 心花怒放 { IsLocked = false; } // 購買日誌 dynamic datum = new Datum("BuyCommodityLog"); datum.name = chr.Name; datum.itemID = ItemID; datum.itemName = ItemName; datum.Insert(); c.Account.GamePoints -= CashShopFactory.GetItemData(ItemID).BargainPrice; c.Account.Save(); chr.Items.Add(new Item(ItemID, IsLocked, 0, -1, (byte)InventoryType.ItemType.Cash, chr.Items.GetNextFreeSlot(InventoryType.ItemType.Cash), Quantity)); chr.Items.Save(); CashShopPacket.BuyCommodity(c); CashShopPacket.MgameCash(c); CashShopPacket.GuiHonCash(c); InventoryPacket.getInvenCash(c); }
public override void Handle(User sender, InPacket packetReader) { uint userId = packetReader.ReadUint(); int nxCode = packetReader.ReadInt(); // Unused. string username = packetReader.ReadString(); string displayname = packetReader.ReadString(); uint sessionId = packetReader.ReadUint(); // Login session Id -> Doesn't seem to be correct? -> We'll use it like this for now. //ushort gender = GetUShort(4); //ushort age = GetUShort(5); //ushort wrPointScore = GetUShort(6); // WR Point System -> The score of your computer performance. //ushort accessCode = GetUShort(7); // Permissions. /*int clanId = GetInt(8); * int clanUserLevel = GetInt(9); * int clanIcon = GetInt(10); * string clanName = GetString(11);*/ if (userId > 0 && username.Length > 2 && displayname.Length > 2 && sessionId > 0) { if (Managers.UserManager.Instance.Add(sessionId, sender)) { Program.AuthServer.Send(new Packets.Internal.PlayerAuthorization(sessionId, userId, username)); } else { sender.Send(new Packets.Authorization(Packets.Authorization.ErrorCodes.NormalProcedure)); sender.Disconnect(); } } else { sender.Send(new Packets.Authorization(Packets.Authorization.ErrorCodes.NormalProcedure)); sender.Disconnect(); } }
public static void Handle(User user, InPacket packet) { var text = packet.ReadString(); var chat = new PacketBuffer(0x39, user); chat.WriteUInt16(user.Character.EntityId); chat.WriteString(user.Character.Name); chat.WriteByte(0x00); chat.WriteString(text); chat.WriteByte(0x00); chat.Send(); }
public override void Handle(Server sender, InPacket packetReader) { uint ErrorCode = packetReader.ReadUint(); if (ErrorCode != 1) { sender.Disconnect(); return; } string globalKey = packetReader.ReadString(); string serverName = packetReader.ReadString(); string ipAddress = packetReader.ReadString(); int port = packetReader.ReadInt(); byte type = packetReader.ReadByte(); if (!Enum.IsDefined(typeof(ServerTypes), type)) { sender.Disconnect(); return; } ServerTypes enumType = (ServerTypes)type; byte serverId = Managers.ServerManager.Instance.Add(sender, serverName, ipAddress, port, enumType); if (serverId > 0) { Log.Instance.WriteLine($"Added Server: {serverName} @ {ipAddress}:{port} with Id: {serverId}"); sender.Send(new Packets.Internal.Authorize(serverId)); } else { Log.Instance.WriteError($"Failed to add Server: {serverName} @ {ipAddress}:{port}. Reason: Server Limit reached."); sender.Send(new Packets.Internal.Authorize(Core.Enums.Internal.AuthorizationErrorCodes.MaxServersReached)); sender.Disconnect(); } }
public static void TWOFACTOR_REQ(InPacket lea, Client c) { lea.ReadInt(); string Password = lea.ReadString(); string ConfrimPassword = lea.ReadString(); Log.Debug("SubPassowrd Request Password: {0} Confrim : {1} ", Password, ConfrimPassword); int isSubPassword = c.Account.isTwoFactor; if (isSubPassword == 0) { if (Password != ConfrimPassword) { LoginPacket.SubPassError(c); } else { c.SetAccount(new Account(c)); c.Account.isTwoFactor = 1; c.Account.TwoFactorPassword = Password; c.Account.Save(); LoginPacket.SubPassLoginOK(c); } } if (isSubPassword == 1) { string AccountSubPassword = c.Account.TwoFactorPassword; if (AccountSubPassword == Password) { LoginPacket.SubPassLoginOK(c); } else { LoginPacket.SubPassLoginWrong(c); } } }
public override void Handle(User sender, InPacket packetReader) { if (sender.Authorized) { string nickname = packetReader.ReadString(); if (nickname.Length >= 3 && Core.Constants.IsAlphaNumeric(nickname)) { if (nickname.Length <= 16) { try { using (var reader = Databases.Auth.Select( new string[] { "id" }, "users", new Dictionary <string, object>() { { "displayname", nickname } })) { if (!reader.HasRows) { // TODO: is the nickname allowed? Databases.Auth.Query(string.Concat("UPDATE users SET `displayname` ='", nickname, "' WHERE id=", sender.ID, ";")); sender.UpdateDisplayname(nickname); sender.Send(new Packets.ServerList(sender)); sender.Disconnect(); } else { sender.Send(new Packets.ServerList(Packets.ServerList.ErrorCodes.NicknameTaken)); } } } catch { sender.Send(new Packets.ServerList(Packets.ServerList.ErrorCodes.Exception)); sender.Disconnect(); } } else { sender.Send(new Packets.ServerList(Packets.ServerList.ErrorCodes.NewNickname)); } } else { sender.Send(new Packets.ServerList(Packets.ServerList.ErrorCodes.NewNickname)); } } else { sender.Disconnect(); // Not authorized, cheating! } }
public static void HandleWorldInformation(MapleConnection connection, InPacket packet) { byte worldId = packet.ReadByte(); if (worldId == byte.MaxValue) { Main.Instance.SetTab(Indexer.WorldSelect); } else { string name = packet.ReadString(); Main.Instance.DrawWorldTile(worldId, name); } }
public static void Pet_Name_Req(InPacket lea, Client c) { string Name = lea.ReadString(20); int Slot = lea.ReadInt(); var chr = c.Character; Pet Pet = chr.Pets.Pet((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet); Pet Item = chr.Pets.Pet((byte)InventoryType.ItemType.Pet5, (byte)Slot); Pet.Name = Name; Pet.Save(); chr.Pets.Remove((byte)InventoryType.ItemType.Pet5, (byte)Slot); //PetPacket.PetName(c, Name); MapPacket.warpToMap(c, chr, chr.CharacterID, chr.MapX, chr.MapY, chr.PlayerX, chr.PlayerY); // 先以此代替 InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Pet5); }
public static void Use_Coupon_Req(InPacket lea, Client gc) { var chr = gc.Character; string Code = lea.ReadString(20); foreach (dynamic datum in new Datums("Coupon").Populate()) { if (Code.Equals(datum.code) && datum.valid == 1) { byte Type = InventoryType.getItemType(datum.itemID); chr.Items.Add(new Item(datum.itemID, InventoryType.getItemType(datum.itemID), chr.Items.GetNextFreeSlot((InventoryType.ItemType)Type), (short)datum.quantity)); InventoryHandler.UpdateInventory(gc, Type); InventoryPacket.ClearDropItem(gc, chr.CharacterID, -1, datum.itemID); datum.valid = 0; datum.Update("code = '{0}'", Code); break; } } }
public static void UpdateNews(MartialClient c, InPacket p) { if (c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked guild.Refresh with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; if (chr.getGuild() == null) { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guild news with char that ain't in guild"); c.Close(); return; } Guild guild = chr.getGuild(); if (chr.getGuild() == null) { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guild news with char that ain't in guild"); c.Close(); return; } GuildMember gMember = guild.findGuildMember(chr.getuID()); if (gMember.getGuildRank() < 4) // aint master? { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guildManagement with char that ain't a guild master"); c.Close(); return; } string news = MiscFunctions.obscureString(p.ReadString(195)); guild.guildNews = news; guild.sendToGuildMembers(GuildPackets.getRefreshNewsGuildPacket(news)); }
public static void MyChar_Info_Req(InPacket lea, Client gc) { string[] data = lea.ReadString(lea.Available).Split(new[] { (char)0x20 }, StringSplitOptions.None); int encryptKey = int.Parse(data[1]); string username = data[2]; string password = data[4]; gc.SetAccount(new Account(gc)); try { gc.Account.Load(username); //var pe = new PasswordEncrypt(encryptKey); //string encryptPassword = pe.encrypt(gc.Account.Password, gc.RetryLoginCount > 0 ? password.ToCharArray() : null); if (password.Equals(gc.Account.Password)) { gc.Dispose(); Log.Error("Login Fail!"); } else { gc.Account.Characters = new List<Character>(); foreach (dynamic datum in new Datums("Characters").PopulateWith("id", "accountId = '{0}' && worldId = '{1}' ORDER BY position ASC", gc.Account.ID, gc.WorldID)) { Character character = new Character(datum.id, gc); character.Load(false); gc.Account.Characters.Add(character); } CharPacket.MyChar_Info_Ack(gc, gc.Account.Characters); Log.Success("Login Success!"); } Log.Inform("Password = {0}", password); //Log.Inform("encryptKey = {0}", encryptKey); //Log.Inform("encryptPassword = {0}", encryptPassword); } catch (NoAccountException) { gc.Dispose(); Log.Error("Login Fail!"); } }
public static void InvenUseSpendShout_Req(InPacket lea, Client gc) { byte Slot = lea.ReadByte(); string Message = lea.ReadString(60); lea.ReadInt(); lea.ReadByte(); lea.ReadByte(); var chr = gc.Character; if (Slot >= 0 && Slot < 24 && Message.Length <= 60) { gc.Character.Items.Remove((byte)InventoryType.ItemType.Spend3, Slot, 1); foreach (Character All in MapFactory.AllCharacters) { GamePacket.InvenUseSpendShout(All.Client, chr, Message); } InventoryPacket.getInvenSpend3(gc); } }
public static void StateVending(MartialClient c, InPacket p) { if (c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook openVending while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte stateType = p.ReadByte(); string shopName = p.ReadString(30); if (stateType == 1) { if (chr.getVending() != null) { Console.WriteLine("u already have teh vending biach"); return; } chr.setVending(new Vending(chr, shopName)); c.WriteRawPacket(VendingPackets.createVendorFrame(chr, 1, shopName)); if (chr.getMap() == 1) { WMap.Instance.getGrid(1).addToVendings(chr); } } else { chr.getVending().deleteVendor(); chr.setVending(null); c.WriteRawPacket(VendingPackets.createVendorFrame(chr, 0)); } WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), VendingPackets.getExtVending(chr)); }
public override void Handle(User sender, InPacket packetReader) { int versionId = packetReader.ReadInt(1); string MACAdress = packetReader.ReadString(2); if (versionId != CLIENT_VERSION) { sender.Send(new Packets.ServerTime(Packets.ServerTime.ErrorCodes.DiffrentClientVersion)); Thread.Sleep(10000); // Freeze network thread and disconnect. sender.Disconnect(); return; } if (MACAdress.Length != MAC_ADDRESS_LENGTH) { sender.Send(new Packets.Authorization(Packets.Authorization.ErrorCodes.NormalProcedure)); Thread.Sleep(10000); // Freeze network thread and disconnect. sender.Disconnect(); return; } sender.Send(new Packets.ServerTime()); }
private void OnRegistrationResponse(InPacket inPacket) { ServerRegistrationResponse response = (ServerRegistrationResponse)inPacket.ReadByte(); switch (response) { case ServerRegistrationResponse.Valid: { GameServer.WorldID = inPacket.ReadByte(); GameServer.ChannelID = inPacket.ReadByte(); GameServer.ScrollingHeader = inPacket.ReadString(); GameServer.Rates = new Rates() { Experience = inPacket.ReadInt(), QuestExperience = inPacket.ReadInt(), PartyQuestExperience = inPacket.ReadInt(), Meso = inPacket.ReadInt(), Loot = inPacket.ReadInt(), }; Log.Success("Registered Game as {0}-{1} at {2}.", WorldNameResolver.GetName(GameServer.WorldID), GameServer.ChannelID, GameServer.RemoteEndPoint); Log.Inform("Rates: {0}x / {1}x / {2}x / {3}x / {4}x.", GameServer.Rates.Experience, GameServer.Rates.QuestExperience, GameServer.Rates.PartyQuestExperience, GameServer.Rates.Meso, GameServer.Rates.Loot); } break; default: throw new NetworkException(RegistrationResponseResolver.Explain(response)); } }
public static void Chat(MartialClient c, InPacket p) { if (c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked chat with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte messageType = (byte)p.ReadShort(); string receiver = MiscFunctions.obscureString(p.ReadString(17)); byte messageLength = (byte)p.ReadInt(); if (messageLength > 65) { Logger.LogCheat(Logger.HackTypes.Chat, c, "Tried to send a message of size {0}", messageLength); c.Close(); return; } string message = p.ReadString(messageLength); switch (messageType) { case 0: WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), StaticPackets.chatRelay(chr, messageType, message)); break; case 1: { if (receiver == null) { return; } Character player = WMap.Instance.findPlayerByName(receiver); if (player == null) { chr.getAccount().mClient.WriteRawPacket(StaticPackets.playerIsntConnected(chr)); break; } player.getAccount().mClient.WriteRawPacket(StaticPackets.chatRelay(chr, messageType, message)); break; } case 6: // karma notice { if (chr.getKarmaMessagingTimes() == 0) { } WMap.Instance.sendToAllCharactersExcept(chr, StaticPackets.chatRelay(chr, messageType, message)); break; } case 7: // "GM Shout" { if (chr.getAccount().gmLvl == 0 && chr.getGMShoutMessagingCounts() == 0) { } WMap.Instance.sendToAllCharactersExcept(chr, StaticPackets.chatRelay(chr, messageType, message)); break; } case 9: // admin commands { string[] cmd = Regex.Split(message, " "); if (chr.getAccount().gmLvl == 0) { Logger.LogCheat(Logger.HackTypes.Chat, c, "Tried to parse GM Command {0}", cmd[0]); c.Close(); break; } if (cmd.Length == 0) { Logger.LogCheat(Logger.HackTypes.Chat, c, "Tried to parse null GM Command"); c.Close(); break; } if (cmd[0][0] != '/') { Logger.LogCheat(Logger.HackTypes.Chat, c, "Tried to parse command without '/' slash"); c.Close(); break; } CommandProcessor.ParseCommand(c, cmd); break; } default: { break; } } }
public static void Login_Req(InPacket lea, Client c) { string username = lea.ReadString(); string password = lea.ReadString(); short encryptKey = lea.ReadShort(); if (username.IsAlphaNumeric() == false) { LoginPacket.Login_Ack(c, ServerState.LoginState.NO_USERNAME); return; } c.SetAccount(new Account(c)); try { c.Account.Load(username); var pe = new PasswordEncrypt(encryptKey); string encryptPassword = ServerConstants.PASSWORD_DECODE ? pe.encrypt(c.Account.Password, c.RetryLoginCount > 0 ? password.ToCharArray() : null) : c.Account.Password; if (!password.Equals(encryptPassword)) { LoginPacket.Login_Ack(c, ServerState.LoginState.PASSWORD_ERROR); Log.Error("Login Fail!"); c.RetryLoginCount += 1; } else if (c.Account.Banned == 1) { LoginPacket.Login_Ack(c, ServerState.LoginState.USER_LOCK); } else { LoginPacket.Login_Ack(c, ServerState.LoginState.OK, encryptKey, c.Account.Master > 0 ? true : false); c.Account.LoggedIn = 1; Log.Success("Login Success!"); } Log.Inform("Password = {0}", password); //Log.Inform("encryptKey = {0}", encryptKey); //Log.Inform("encryptPassword = {0}", encryptPassword); } catch (NoAccountException) { if (ServerConstants.AUTO_REGISTRATION == true) { if (username.Length < 5 || password.Length < 5) { LoginPacket.Login_Ack(c, ServerState.LoginState.NO_USERNAME); } Account account = new Account(c); account.Username = username.ToLower(); account.Password = password; account.Creation = DateTime.Now; account.LoggedIn = 0; account.Banned = 0; account.Master = 0; account.GamePoints = 0; account.GiftPoints = 0; account.BonusPoints = 0; account.Save(); LoginPacket.Login_Ack(c, ServerState.LoginState.USER_LOCK); return; } LoginPacket.Login_Ack(c, ServerState.LoginState.NO_USERNAME); } }
public static void Create_MyChar_Req(InPacket lea, Client gc) { string name = lea.ReadString(20); int gender = lea.ReadByte(); int value1 = lea.ReadByte(); int value2 = lea.ReadByte(); int value3 = lea.ReadByte(); int eyes = lea.ReadInt(); int hair = lea.ReadInt(); int weapon = lea.ReadInt(); int outfit = lea.ReadInt(); int seal = 8510011; Character chr = new Character(); chr.AccountID = gc.Account.ID; chr.WorldID = gc.WorldID; chr.Name = name; chr.Title = "江湖人"; chr.Level = 1; chr.Class = 0; chr.ClassLevel = 0xFF; chr.Guild = 0xFF; chr.Gender = (byte)gender; chr.Eyes = eyes; chr.Hair = hair; chr.MapX = 0; chr.MapY = 0; chr.Str = 3; chr.Dex = 3; chr.Vit = 3; chr.Int = 3; chr.Hp = 75; chr.MaxHp = 75; chr.Mp = 25; chr.MaxMp = 25; chr.Fury = 0; chr.MaxFury = 1200; chr.Exp = 0; chr.Money = 0; chr.Attack = 9; chr.MaxAttack = 11; chr.Magic = 4; chr.MaxMagic = 4; chr.Defense = 12; chr.JumpHeight = 3; int pos = 1; foreach (Character cc in gc.Account.Characters) { if (cc.Position != pos) { break; } pos++; } chr.Position = (byte)(pos); chr.Items.Add(new Item(weapon, (byte)(InventoryType.ItemType.Equip), (byte)InventoryType.EquipType.Weapon)); chr.Items.Add(new Item(outfit, (byte)(InventoryType.ItemType.Equip), (byte)InventoryType.EquipType.Outfit)); chr.Items.Add(new Item(seal, (byte)(InventoryType.ItemType.Equip), (byte)InventoryType.EquipType.Seal)); chr.Items.Add(new Item(8810011, (byte)InventoryType.ItemType.Spend3, 0, 10)); chr.Items.Add(new Item(8820011, (byte)InventoryType.ItemType.Spend3, 1, 10)); chr.Storages.Add(new Storage(0)); chr.Skills.Add(new Skill(1, 1, 0, 0)); chr.Skills.Add(new Skill(2, 1, 0, 1)); chr.Skills.Add(new Skill(3, 1, 0, 2)); chr.Skills.Add(new Skill(4, 1, 0, 3)); chr.Keymap.Add("Z", new Shortcut(1, 0, 0)); chr.Keymap.Add("X", new Shortcut(4, 0, 3)); chr.Keymap.Add("C", new Shortcut(3, 0, 2)); chr.UseSlot.Add((byte)InventoryType.ItemType.Spend3, 0xFF); chr.UseSlot.Add((byte)InventoryType.ItemType.Pet5, 0xFF); if ((gc.Account.Characters.Count + 1) <= 4) { chr.Save(); gc.Account.Characters.Insert(pos - 1, chr); pos = (chr.Position << 8) + 1; } else if (Database.Exists("Characters", "name = '{0}'", name)) { pos = -1; } else if ((gc.Account.Characters.Count + 1) > 4) { pos = -2; } else { pos = 0; } CharPacket.Create_MyChar_Ack(gc, pos); }
public static void Check_SameName_Req(InPacket lea, Client gc) { string name = lea.ReadString(20); CharPacket.Check_SameName_Ack(gc, (Database.Exists("Characters", "name = '{0}'", name) ? 0 : 1)); }