Exemple #1
0
        public static void MoveFromInv(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook cargo -> inv while not being ingame.");
                c.Close();
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            byte managementType = p.ReadByte();
            byte fromInvIndex   = p.ReadByte();
            byte toCargoSlot    = p.ReadByte();
            byte toCargoLine    = p.ReadByte();
            byte toCargoRow     = p.ReadByte();

            Cargo cargo = chr.getCargo();

            Console.WriteLine("Cargo > {0} | {1} | {2} | {3} | {4}", managementType, fromInvIndex, toCargoSlot, toCargoLine, toCargoRow);
            if (!cargo.insertItemFromInventory(chr.getInventory(), fromInvIndex, toCargoRow, toCargoLine))
            {
                Console.WriteLine("da fuaaark");
                return;
            }

            OutPacket op = new OutPacket(24);

            op.WriteInt(24);
            op.WriteShort(4);
            op.WriteShort(44);
            op.WriteInt(1);
            op.WriteInt(chr.getuID());
            op.WriteShort(1);
            op.WriteByte(managementType);
            op.WriteByte(fromInvIndex);
            op.WriteByte(toCargoSlot);
            op.WriteByte(toCargoLine);
            op.WriteByte(toCargoRow);
            op.WriteByte(42);
            c.WriteRawPacket(op.ToArray());
        }
Exemple #2
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);
            }
        }
Exemple #3
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);
        }
Exemple #4
0
        public static void HandleCheckUserLimit(MapleClient client, InPacket iPacket)
        {
            byte        worldID = iPacket.ReadByte();
            WorldServer world   = MasterServer.Instance.Worlds[worldID];

            using (OutPacket oPacket = new OutPacket(SendOps.CheckUserLimitResult))
            {
                oPacket.WriteShort((short)world.Status);

                client.Send(oPacket);
            }
        }
Exemple #5
0
        protected void HandleLogoutResponse(InPacket packet)
        {
            bool logoutOk = packet.ReadUInt32() == 0;
            bool instant  = packet.ReadByte() != 0;

            if (instant || !logoutOk)
            {
                Connected = false;
                LoggedIn  = false;
                Running   = false;
            }
        }
Exemple #6
0
 public override void Handle(User sender, InPacket packetReader)
 {
     if (sender.Authenticated && sender.Room != null)
     {
         // [0] = ROOM SLOT
         // [1] = ROOM ID
         byte roomSlot = packetReader.ReadByte(0);
         if (roomSlot < sender.Room.MaximumPlayers)
         {
             ushort roomId = packetReader.ReadUshort(1);
             if (roomId == sender.Room.ID)
             {
                 byte   unknown = packetReader.ReadByte(2); // Seems to be 2 or 0?
                 ushort subType = packetReader.ReadUshort(3);
                 // HANDLE PACKET IN A SEPERATED CLASS //
                 GameDataHandler handler = NetworkTable.Instance.GetHandler(subType);
                 if (handler != null)
                 {
                     try
                     {
                         handler.Process(sender, packetReader);
                     }
                     catch { /* error? */ }
                 }
                 else
                 {
                     Log.Instance.WriteLine("UNKNOWN SUBPACKET :: " + packetReader);
                 }
             }
             else
             {
                 sender.Disconnect(); // Wrong room targeted - Cheating?
             }
         }
         else
         {
             sender.Disconnect(); // Room slot over maximum players - Cheating?
         }
     }
 }
Exemple #7
0
        public static void Move(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook cargo movement while not being ingame.");
                c.Close();
                return;
            }

            byte      fromCargoIndex  = p.ReadByte();
            short     unknownMovement = p.ReadShort();
            byte      toCargoSlot     = p.ReadByte();
            byte      toCargoLine     = p.ReadByte();
            byte      toCargoRow      = p.ReadByte();
            Character chr             = c.getAccount().activeCharacter;
            Cargo     cargo           = chr.getCargo();

            Console.WriteLine("Cargo > {0} | {1} | {2} | {3}", fromCargoIndex, toCargoSlot, toCargoLine, toCargoRow);

            if (!cargo.moveItem(fromCargoIndex, toCargoSlot, toCargoRow, toCargoLine))
            {
                Console.WriteLine("problem with move item");
                return;
            }

            OutPacket op = new OutPacket(24);

            op.WriteInt(24);
            op.WriteShort(4);
            op.WriteShort(46);
            op.WriteInt(1);
            op.WriteInt(chr.getuID());
            op.WriteShort(1);
            op.WriteByte(fromCargoIndex);
            op.WriteShort(unknownMovement);
            op.WriteByte(toCargoSlot);
            op.WriteByte(toCargoLine);
            op.WriteByte(toCargoRow);
            c.WriteRawPacket(op.ToArray());
        }
Exemple #8
0
        public static void Equip(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook equip while not being ingame.");
                c.Close();
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            byte changeType = p.ReadByte();

            byte[] swapSlots = p.ReadBytes(2);

            if (changeType == (byte)0x00)
            {
                if (!chr.getEquipment().swapEquips(swapSlots[0], swapSlots[1]))
                {
                    Logger.LogCheat(Logger.HackTypes.Equip, c, "Attempted to swap weapons, while one of them or even both are null.");
                    c.Close();
                    return;
                }

                WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), CharacterPackets.getExtEquipPacket(chr, swapSlots[0], chr.getEquipment().getEquipments()[swapSlots[0]].getItemID()));
                WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), CharacterPackets.getExtEquipPacket(chr, swapSlots[1], chr.getEquipment().getEquipments()[swapSlots[1]].getItemID()));
            }
            else
            {
                if (!chr.getInventory().equipItem(swapSlots[0], swapSlots[1], chr.getEquipment()))
                {
                    Console.WriteLine("so sorz : >");
                    return;
                }

                WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), CharacterPackets.getExtEquipPacket(chr, swapSlots[1], chr.getEquipment().getEquipments()[swapSlots[1]].getItemID()));
            }

            OutPacket op = new OutPacket(24);

            op.WriteInt(24);
            op.WriteShort(0x04);
            op.WriteShort(0x0c);
            op.WriteInt(135593729);
            op.WriteInt(c.getAccount().activeCharacter.getuID());
            op.WriteShort(0x01);
            op.WriteByte(changeType);
            op.WriteBytes(swapSlots);
            c.WriteRawPacket(op.ToArray());

            CharacterFunctions.calculateCharacterStatistics(chr);
        }
Exemple #9
0
        protected void HandleCharCreate(InPacket packet)
        {
            var response = (CommandDetail)packet.ReadByte();

            if (response == CommandDetail.CHAR_CREATE_SUCCESS)
            {
                SendPacket(new OutPacket(WorldCommand.CMSG_CHAR_ENUM));
            }
            else
            {
                NoCharactersFound();
            }
        }
Exemple #10
0
        public static void HandleLogin(MapleConnection connection, InPacket packet)
        {
            LoginStatus status = (LoginStatus)packet.ReadByte();

            if (status == LoginStatus.Valid)
            {
                packet.Reset(packet.Length - 8);

                MapleConnection.User.SessionID = packet.ReadLong();

                connection.Send(LoginPacket.RequestWorldList());
            }
        }
Exemple #11
0
        protected override void OnPacket(byte[] packet)
        {
            var           p       = new InPacket(packet);
            PacketHandler handler = m_processor[p.ReadByte()];

            if (handler != null)
            {
                handler(this, p);
            }
            else
            {
                MainForm.Instance.Log(BitConverter.ToString(packet).Replace('-', ' '));
            }
        }
		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));
			}
		}
Exemple #13
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);
            }
        }
Exemple #14
0
        protected override void Dispatch(InPacket inPacket)
        {
            try
            {
                if (inPacket.OperationCode == (ushort)ClientOpcode.LOGIN_SERVER)
                {
                    inPacket.ReadUShort();                     // 原始長度
                    var Header = inPacket.ReadByte();          // Read header

#if DEBUG
                    Log.Hex("Received (0x{0:X2}) packet from {1}: ", inPacket.Content, Header, this.Title);
#endif
                    switch ((LoginClientOpcode)Header)
                    {
                    case LoginClientOpcode.LOGIN_REQ:
                        LoginHandler.Login_Req(inPacket, this);
                        break;

                    case LoginClientOpcode.SERVERLIST_REQ:
                        LoginHandler.ServerList_Req(inPacket, this);
                        break;

                    case LoginClientOpcode.GAME_REQ:
                        LoginHandler.Game_Req(inPacket, this);
                        break;

                    case LoginClientOpcode.WORLD_REQ:
                        LoginHandler.World_Req(inPacket, this);
                        break;

                    case LoginClientOpcode.GAME_VERSIONINFO_REQ:
                        LoginHandler.PatchVersion_Req(inPacket, this);
                        break;

                    case LoginClientOpcode.TWOFACTOR_REQ:
                        LoginHandler.TWOFACTOR_REQ(inPacket, this);
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error("Unhandled Packet Exception from {0}: \n{1}", this.Title, e.ToString());
            }
        }
Exemple #15
0
        public static void UseItem(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook useItem while not being ingame.");
                c.Close();
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            p.Skip(1);
            byte usingIndex = p.ReadByte();
            Item item       = chr.getInventory().getItemBySeqIndexing(usingIndex);

            if (item == null)
            {
                Logger.LogCheat(Logger.HackTypes.Items, c, "Tried to use not existing item.");
                return;
            }

            ItemData itemData = ItemDataCache.Instance.getItemData(item.getItemID());

            if (!itemData.getClassUsable()[chr.getcClass() - 1])
            {
                Console.WriteLine("not for teh class..");
                return;
            }

            if (itemData.getMinLvl() > chr.getLevel() || itemData.getMaxLvl() < chr.getLevel())
            {
                Console.WriteLine("not for yar level..");
                return;
            }

            if (itemData.getFaction() != 0 && chr.getFaction() != itemData.getFaction())
            {
                Console.WriteLine("not for yah faction..");
                return;
            }

            p.Skip(2);
            MainItemUsage.useItem(chr, item, usingIndex, p);
        }
Exemple #16
0
        public static void Movement(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked Movement with null of activeCharacter");
                c.Close();
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            p.Skip(4);
            byte[] locationToX = p.ReadBytes(4);
            byte[] locationToY = p.ReadBytes(4);
            p.Skip(1);
            byte movingMode = p.ReadByte();

            MoveCharacterPacket.HandleMovement(chr, locationToX, locationToY, movingMode);
        }
Exemple #17
0
        public MovementInfo(InPacket packet)
        {
            Flags    = (MovementFlags)packet.ReadUInt32();
            Flags2   = (MovementFlags2)packet.ReadUInt16();
            Time     = packet.ReadUInt32();
            Position = packet.ReadVector3();
            O        = packet.ReadSingle();

            if (Flags.HasFlag(MovementFlags.MOVEMENTFLAG_ONTRANSPORT))
            {
                TransportGuid     = packet.ReadPackedGuid();
                TransportPosition = packet.ReadVector3();
                TransportO        = packet.ReadSingle();
                TransportTime     = packet.ReadUInt32();
                TransportSeat     = packet.ReadByte();
                if (Flags2.HasFlag(MovementFlags2.MOVEMENTFLAG2_INTERPOLATED_MOVEMENT))
                {
                    TransportTime2 = packet.ReadUInt32();
                }
            }

            if (Flags.HasFlag(MovementFlags.MOVEMENTFLAG_SWIMMING) || Flags.HasFlag(MovementFlags.MOVEMENTFLAG_FLYING) ||
                Flags2.HasFlag(MovementFlags2.MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING))
            {
                Pitch = packet.ReadSingle();
            }

            FallTime = packet.ReadUInt32();

            if (Flags.HasFlag(MovementFlags.MOVEMENTFLAG_FALLING))
            {
                JumpZSpeed   = packet.ReadSingle();
                JumpSinAngle = packet.ReadSingle();
                JumpCosAngle = packet.ReadSingle();
                JumpXYSpeed  = packet.ReadSingle();
            }

            if (Flags.HasFlag(MovementFlags.MOVEMENTFLAG_SPLINE_ELEVATION))
            {
                SplineElevation = packet.ReadSingle();
            }
        }
Exemple #18
0
        public void OnChat(ClientSession cs, InPacket ip)
        {
            ip.ReadByte(); // 01
            ip.ReadInt();  // 00 00 00 00
            int    WhereLen = ip.ReadInt();
            string Where    = ip.ReadUnicodeString(WhereLen);

            ip.ReadInt(); // 00 00 00 00
            ip.ReadInt(); // 00 00 00 00
            ip.ReadInt(); // FF FF FF FF
            int    ChatLen = ip.ReadInt();
            string Chat    = ip.ReadUnicodeString(ChatLen);

            //LogFactory.GetLog("Main").LogInfo("Chat: {0}", Chat);

            using (OutPacket op = new OutPacket(GameOpcodes.EVENT_CHAT_NOT))
            {
                op.WriteByte(1);
                op.WriteInt(cs.LoginUID);
                op.WriteInt(cs.Nick.Length * 2);
                op.WriteUnicodeString(cs.Nick);
                op.WriteInt(0);
                op.WriteInt(0);
                op.WriteInt(-1);
                op.WriteInt(ChatLen);
                op.WriteUnicodeString(Chat);
                op.WriteInt(0);
                op.WriteInt(0);

                // 채널에 있는 모든 유저중 같은 방 (null이면 로비실이니까.)
                foreach (ClientSession u in UsersList)
                {
                    if (u.CurrentRoom == cs.CurrentRoom)
                    {
                        op.Assemble(u.CRYPT_KEY, u.CRYPT_HMAC, u.CRYPT_PREFIX, u.CRYPT_COUNT);
                        u.Send(op);
                        op.CancelAssemble(); // 버퍼 되돌리기
                    }
                }
            }
        }
Exemple #19
0
            private void ReadValuesUpdateData(InPacket packet)
            {
                byte blockCount = packet.ReadByte();

                int[] updateMask = new int[blockCount];
                for (var i = 0; i < blockCount; i++)
                {
                    updateMask[i] = packet.ReadInt32();
                }
                var mask = new BitArray(updateMask);

                for (var i = 0; i < mask.Count; ++i)
                {
                    if (!mask[i])
                    {
                        continue;
                    }

                    updateFields[i] = packet.ReadUInt32();
                }
            }
        private void OnGamePortRequest(InPacket inPacket)
        {
            byte id = inPacket.ReadByte();

            using (OutPacket outPacket = new OutPacket(InteroperabilityMessage.GamePortResponse))
            {
                outPacket.WriteByte(id);

                if (this.World.Contains(id))
                {
                    InteroperabilityClient game = this.World[id];

                    outPacket.WriteUShort((ushort)game.RemoteEndPoint.Port);
                }
                else
                {
                    outPacket.WriteUShort();
                }

                this.Send(outPacket);
            }
        }
Exemple #21
0
        public static void OnSelectWorld(MapleClient c, InPacket p)
        {
            p.Skip(1); // world id
            c.Channel = p.ReadByte();

            using (OutPacket packet = new OutPacket(SendOps.SelectWorldResult))
            {
                packet.WriteByte(); //some error

                packet.WriteByte((byte)c.Characters.Count);

                foreach (var character in c.Characters)
                {
                    PacketCreator.Helper.AddCharacterData(packet, character);
                    PacketCreator.Helper.AddCharaterLook(packet, character);
                    packet.WriteBool(false); //rank
                }

                packet.WriteZero(64); //padding
                c.Send(packet);
            }
        }
Exemple #22
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();
            }
        }
Exemple #23
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));
        }
Exemple #24
0
        public void create_pet(ClientSession cs, InPacket ip)
        {
            byte Bind   = ip.ReadByte();
            int  PetID  = ip.ReadInt();
            int  Evo    = ip.ReadInt();
            int  PetUID = ip.ReadInt();

            DataSet ds = new DataSet();

            Database.Query(ref ds, "INSERT INTO `gc`.`pet` (  `LoginUID`,  `PetItemID`,  `Exp`,  `Health`,  `Name`,  `Slot1`,  `Slot2`,  `Level`,  `Bind`,  `Evo`) VALUES  (    '{0}',    '{1}',    '0',    '0',    '',    '0',    '0',    '0',    '0',    '0'  )", cs.LoginUID, PetID);

            using (OutPacket oPacket = new OutPacket(GameOpcodes.EVENT_CREATE_PET_ACK))
            {
                /*oPacket.WriteInt(0);
                 * oPacket.WriteByte(0xFF);
                 * oPacket.WriteInt(1);
                 * oPacket.WriteInt(PetUID);
                 * oPacket.WriteInt(PetID);*/
                oPacket.WriteHexString("00 00 00 00 FF 00 00 00 01 35 3C CC AB 00 02 E4 82 00 00 00 1A 53 00 71 00 75 00 69 00 72 00 65 00 20 00 47 00 61 00 69 00 6B 00 6F 00 7A 00 00 00 00 03 00 00 00 00 64 01 00 00 00 64 02 00 00 00 64 00 00 00 64 00 00 00 00 00 FF FF FF FF 00 00 03 E8 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 01 00 02 E4 8C 00 00 00 01 35 3C CC BF 00 00 00 64 00 00 00 64 00 00 FF FF 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 00 00 00 00 00 00 00 00");
                oPacket.Assemble(cs.CRYPT_KEY, cs.CRYPT_HMAC, cs.CRYPT_PREFIX, ++cs.CRYPT_COUNT);
                cs.Send(oPacket);
            }
        }
Exemple #25
0
        public static void MoveToVV(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter != null)
            {
                Logger.LogCheat(Logger.HackTypes.CreateCharacter, c, "Attempted to create a character while being ingame.");
                c.Close();
                return;
            }

            byte selected_character = p.ReadByte();

            if (!c.getAccount().characters.ContainsKey(selected_character))
            {
                Logger.LogCheat(Logger.HackTypes.CharacterSelection, c, "Wrong target '{0}' has been selected by packet", selected_character);
                c.Close();
                return;
            }

            Character target = c.getAccount().characters[selected_character];

            target.setPosition(new float[] { -1660, 2344 });
            target.setMap(1);

            OutPacket op = new OutPacket(24);

            op.WriteInt(24);
            op.WriteShort(3);
            op.WriteShort(14);
            op.WriteByte(1);
            op.WriteByte(selected_character);
            op.WriteByte(6);
            op.WriteByte(8);
            op.WriteInt(1);             // map
            op.WriteFloat(-1660);       // X
            op.WriteFloat(2344);        // Y
            c.WriteRawPacket(op.ToArray());
        }
Exemple #26
0
        public static void ToggleMutationEffect(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked toggleMutationEffect with null of activeCharacter");
                c.Close();
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            byte toggleType = p.ReadByte();

            OutPacket op = new OutPacket(20);

            op.WriteInt(20);
            op.WriteShort(0x05);
            op.WriteShort(0X7c);
            op.WriteInt(140235265);
            op.WriteInt(chr.getuID());
            op.WriteInt(toggleType == 0 ? 716251136 : 716251314);

            WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr.getArea(), op.ToArray());
        }
Exemple #27
0
        protected override void Dispatch(InPacket inPacket)
        {
            try
            {
                if (inPacket.OperationCode == (ushort)ClientOpcode.LOGIN_SERVER)
                {
                    inPacket.ReadUShort();            // 原始長度
                    var Header = inPacket.ReadByte(); // 讀取包頭

                    Log.Hex("Received (0x{0:X2}) packet from {1}: ", inPacket.Content, Header, this.Title);

                    switch ((LoginClientOpcode)Header)
                    {
                    case LoginClientOpcode.LOGIN_REQ:
                        LoginHandler.Login_Req(inPacket, this);
                        break;

                    case LoginClientOpcode.SERVERLIST_REQ:
                        LoginHandler.ServerList_Req(inPacket, this);
                        break;

                    case LoginClientOpcode.GAME_REQ:
                        LoginHandler.Game_Req(inPacket, this);
                        break;

                    case LoginClientOpcode.CHAR_REQ:
                        LoginHandler.Char_Req(inPacket, this);
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error("Unhandled Packet Exception from {0}: \n{1}", this.Title, e.ToString());
            }
        }
Exemple #28
0
        public static void HandleItemMove(MapleClient client, InPacket iPacket)
        {
            iPacket.Skip(4); // NOTE: tRequestTime (ticks).
            InventoryType inventory = (InventoryType)iPacket.ReadByte();
            short         slot1     = iPacket.ReadShort();
            short         slot2     = iPacket.ReadShort();
            short         quantity  = iPacket.ReadShort();

            bool dropped       = slot2 == 0;
            bool equippedSlot1 = slot1 < 0;
            bool equippedSlot2 = slot2 < 0;

            if (dropped)
            {
            }
            else
            {
                client.Character.Items.Swap(inventory, slot1, slot2);
            }

            if (equippedSlot1 || equippedSlot2)
            {
            }
        }
Exemple #29
0
        public Character(InPacket packet)
        {
            GUID    = packet.ReadUInt64();
            Name    = packet.ReadCString();
            Race    = (Race)packet.ReadByte();
            Class   = (Class)packet.ReadByte();
            Gender  = (Gender)packet.ReadByte();
            Bytes   = packet.ReadBytes(5);
            Level   = packet.ReadByte();
            ZoneId  = packet.ReadUInt32();
            MapId   = packet.ReadUInt32();
            X       = packet.ReadSingle();
            Y       = packet.ReadSingle();
            Z       = packet.ReadSingle();
            GuildId = packet.ReadUInt32();
            Flags   = packet.ReadUInt32();
            packet.ReadUInt32();    // customize (rename, etc)
            packet.ReadByte();      // first login
            PetInfoId   = packet.ReadUInt32();
            PetLevel    = packet.ReadUInt32();
            PetFamilyId = packet.ReadUInt32();

            // read items
            for (int i = 0; i < 19; ++i)
            {
                packet.ReadUInt32();
                packet.ReadByte();
                packet.ReadUInt32();    // ???
            }

            // read bags
            for (int i = 0; i < 4; ++i)
            {
                packet.ReadUInt32();
                packet.ReadByte();
                packet.ReadUInt32();
            }
        }
Exemple #30
0
        public static void HandleCharacterCreation(MapleClient client, InPacket iPacket)
        {
            string name      = iPacket.ReadMapleString();
            int    jobType   = iPacket.ReadInt();
            int    face      = iPacket.ReadInt();
            int    hair      = iPacket.ReadInt();
            int    hairColor = iPacket.ReadInt();
            byte   skin      = (byte)iPacket.ReadInt();
            int    topID     = iPacket.ReadInt();
            int    bottomID  = iPacket.ReadInt();
            int    shoesID   = iPacket.ReadInt();
            int    weaponID  = iPacket.ReadInt();
            Gender gender    = (Gender)iPacket.ReadByte();

            bool error = false;

            // TODO: Validate name, beauty and equipment before creating the character.

            int id = Database.InsertAndReturnIdentifier("INSERT INTO `characters` (account_id, world_id, name, gender, skin, face, hair) " +
                                                        "VALUES (@account_id, @world_id, @name, @gender, @skin, @face, @hair)",
                                                        new MySqlParameter("account_id", client.Account.ID),
                                                        new MySqlParameter("world_id", client.World),
                                                        new MySqlParameter("name", name),
                                                        new MySqlParameter("gender", gender),
                                                        new MySqlParameter("skin", skin),
                                                        new MySqlParameter("face", face),
                                                        new MySqlParameter("hair", hair));

            // TODO: Validate the default equipment statistics. I'm pretty sure some of them are untradable.

            Database.Execute("INSERT INTO `items` (character_id, inventory, slot, maple_id, weapon_defense) " +
                             "VALUES (@character_id, 0, -5, @maple_id, 3)",
                             new MySqlParameter("character_id", id),
                             new MySqlParameter("maple_id", topID));

            Database.Execute("INSERT INTO `items` (character_id, inventory, slot, maple_id, weapon_defense) " +
                             "VALUES (@character_id, 0, -6, @maple_id, 2)",
                             new MySqlParameter("character_id", id),
                             new MySqlParameter("maple_id", bottomID));

            Database.Execute("INSERT INTO `items` (character_id, inventory, slot, maple_id, slots, weapon_defense) " +
                             "VALUES (@character_id, 0, -7, @maple_id, 5, 3)",
                             new MySqlParameter("character_id", id),
                             new MySqlParameter("maple_id", shoesID));

            Database.Execute("INSERT INTO `items` (character_id, inventory, slot, maple_id, slots, weapon_attack) " +
                             "VALUES (@character_id, 0, -11, @maple_id, 7, 17)",
                             new MySqlParameter("character_id", id),
                             new MySqlParameter("maple_id", weaponID));

            // TODO: Add beginner's guide (based on job).

            using (DatabaseQuery query = Database.Query("SELECT * FROM characters WHERE `character_id` = @character_id", new MySqlParameter("character_id", id)))
            {
                query.NextRow();

                using (OutPacket oPacket = new OutPacket(SendOps.CreateNewCharacterResult))
                {
                    oPacket.WriteBool(error);

                    LoginHandler.AddCharacterEntry(oPacket, query);

                    client.Send(oPacket);
                }
            }
        }