Esempio n. 1
0
        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: ");
            }
        }
Esempio n. 2
0
        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());
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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()));
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 8
0
        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;
            }
        }
Esempio n. 9
0
        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);
            }
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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!");
            }
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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();
            }
        }
Esempio n. 15
0
        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();
        }
Esempio n. 16
0
        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();
            }
        }
Esempio n. 17
0
        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);
                }
            }
        }
Esempio n. 18
0
 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!
     }
 }
Esempio n. 19
0
        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);
            }
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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;
                }
            }
        }
Esempio n. 22
0
        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));
        }
Esempio n. 23
0
        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!");
                }
            }
Esempio n. 24
0
        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);
            }
        }
Esempio n. 25
0
        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));
        }
Esempio n. 26
0
        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));
			}
		}
Esempio n. 28
0
        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;
            }
            }
        }
Esempio n. 29
0
        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);
            }
        }
Esempio n. 30
0
        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);
        }
Esempio n. 31
0
 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));
 }