Exemplo n.º 1
0
        public static void DeleteItem(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook deleteItem while not being ingame.");
                c.Close();
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            byte[] decrypted = p.ReadBytes(2);
            if (!chr.getInventory().removeItem(decrypted[1]))
            {
                Console.WriteLine("qq cant remove");
                return;
            }

            OutPacket op = new OutPacket(20);

            op.WriteInt(20);
            op.WriteShort(0x04);
            op.WriteShort(0x15);
            op.WriteInt();
            op.WriteInt(chr.getuID());
            op.WriteShort(0x01);
            op.WriteByte(decrypted[0]);
            op.WriteByte(decrypted[1]);
            c.WriteRawPacket(op.ToArray());
        }
Exemplo n.º 2
0
        public static void UnknownStatimizer(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked playerState with null of activeCharacter");
                c.Close();
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            OutPacket op = new OutPacket(24);

            op.WriteInt(24);
            op.WriteShort(4);
            op.WriteShort(47);
            op.WriteInt(1);
            op.WriteInt(chr.getuID());
            op.WriteByte();
            op.WriteByte();
            op.WriteByte(1);
            op.WriteByte();
            op.WriteByte();
            op.WriteByte();
            op.WriteByte();
            op.WriteByte();             // ok, there's some magic on those bytes, for ex. 3rd byte tells you, if you're able to trade in wild zone
            chr.getAccount().mClient.WriteRawPacket(op.ToArray());
        }
Exemplo n.º 3
0
        public static void ServerList_Ack(Client c)
        {
            using (var plew = new OutPacket(LoginServerOpcode.SERVERLIST_ACK))
            {
                for (int i = 0; i < 13; i++)
                {
                    plew.WriteByte(0xFF);
                }
                plew.WriteInt(LoginServer.Worlds.Count); // 伺服器數量
                foreach (World world in LoginServer.Worlds)
                {
                    plew.WriteShort(world.ID);    // 伺服器順序
                    plew.WriteInt(world.Channel); // 頻道數量

                    for (int i = 0; i < 18; i++)
                    {
                        plew.WriteShort(i + 1);
                        plew.WriteShort(i + 1);
                        plew.WriteString(ServerConstants.SERVER_IP);
                        plew.WriteInt(14101 + i);
                        plew.WriteInt(i < world.Count ? world[i].LoadProportion : 0); // 玩家數量
                        plew.WriteInt(ServerConstants.CHANNEL_LOAD);                  // 頻道人數上限
                        plew.WriteInt(12);                                            // 標章類型
                        plew.WriteInt(0);
                        plew.WriteByte(i < world.Count ? 1 : 2);
                        plew.WriteInt(14199);
                    }
                }

                c.Send(plew);
            }
        }
Exemplo n.º 4
0
        public static void getCharactersData(OutPacket plew, Character chr)
        {
            plew.WriteString(chr != null ? chr.Name : "", 20);
            plew.WriteString(chr != null ? chr.Title : "", 20);
            plew.WriteByte(chr != null ? chr.Gender : 0);
            plew.WriteByte(chr != null ? chr.Level : 0);
            plew.WriteByte(chr != null ? chr.Class : 0);
            plew.WriteByte(chr != null ? chr.ClassLevel : 0);
            plew.WriteByte(0);
            plew.WriteByte(0);
            plew.WriteByte(0);
            plew.WriteByte(0);
            plew.WriteShort(0);
            plew.WriteShort(0);
            Dictionary <InventoryType.EquipType, int> equip = getEquip(chr);

            plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Weapon) ? equip[InventoryType.EquipType.Weapon] : 0); // 武器[Weapon] 8010101
            plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Outfit) ? equip[InventoryType.EquipType.Outfit] : 0); // [Outfit]     8160351
            plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Face) ? equip[InventoryType.EquipType.Face] : 0);     // 臉下[face2]  9410021
            plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Face2) ? equip[InventoryType.EquipType.Face2] : 0);   // 臉上[face]   8710013
            plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Hat) ? equip[InventoryType.EquipType.Hat] : 0);       // 帽子[hat]    8610011
            plew.WriteInt(chr != null ? chr.Eyes : 0);                                                                    // 眼睛[eye]    9110011
            plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Mantle) ? equip[InventoryType.EquipType.Mantle] : 0); // 服裝[outfit] 9510081
            plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Dress) ? equip[InventoryType.EquipType.Dress] : 0);   // 披風[mantle] 8493122
            plew.WriteInt(chr != null ? chr.Hair : 0);                                                                    // 頭髮[Hair]   9010011
        }
Exemplo n.º 5
0
 public static void spawnMonster(Client c, Monster Monster, int CharacterID, int Damage, short HitX, short HitY)
 {
     using (OutPacket plew = new OutPacket(ServerOpcode.MON_SPAWN))
     {
         plew.WriteInt(0); // length + CRC
         plew.WriteInt(0);
         plew.WriteInt(Monster.State);
         plew.WriteInt(Monster.OriginalID);
         plew.WriteShort(0);
         plew.WriteShort(0);
         plew.WriteInt(Monster.Direction);
         plew.WriteFloat(Monster.Speed);
         plew.WriteShort(Monster.PositionX);
         plew.WriteShort(Monster.PositionY);
         plew.WriteShort(0);
         plew.WriteShort(0);
         plew.WriteByte(0);
         plew.WriteHexString("00 00 00");
         plew.WriteInt(0);
         plew.WriteInt(CharacterID);
         plew.WriteShort(Damage);
         plew.WriteShort(Monster.Effect); // 怪物受到的效果(0: 無、1: 無法移動、2: 中毒、3: 黑暗、4: 未知、5: 冰凍)
         plew.WriteInt(0);
         plew.WriteInt(Monster.HP);
         plew.WriteShort(HitX);
         plew.WriteShort(HitY);
         c.Send(plew);
     }
 }
Exemplo n.º 6
0
        public static void ServerList_Ack(Client c)
        {
            using (var plew = new OutPacket(LoginServerOpcode.SERVERLIST_ACK))
            {
                for (int i = 0; i < 13; i++)
                {
                    plew.WriteByte(0xFF);
                }
                plew.WriteInt(LoginServer.Worlds.Count); // 伺服器數量 Number of servers
                Log.Inform("Number of servers LoginServer.Worlds.Count : {0}", LoginServer.Worlds.Count);
                foreach (World world in LoginServer.Worlds)
                {
                    Log.Inform("Server order world.ID : {0}", world.ID);
                    Log.Inform("Number of channels world.Channel : {0}", world.Channel);
                    plew.WriteShort(world.ID);    // 伺服器順序 Server order
                    plew.WriteInt(world.Channel); // 頻道數量 Number of channels

                    for (int i = 0; i < 18; i++)
                    {
                        plew.WriteShort(i + 1);
                        plew.WriteShort(i + 1);
                        plew.WriteString(ServerConstants.SERVER_IP);
                        plew.WriteInt(15101 + i);
                        plew.WriteInt(i < world.Count ? world[i].LoadProportion : 0); // Number of players
                        plew.WriteInt(ServerConstants.CHANNEL_LOAD);                  // Maximum number of channels
                        plew.WriteInt(12);                                            // 標章類型 Stamp type
                        plew.WriteInt(0);
                        plew.WriteByte(i < world.Count ? 1 : 2);
                        plew.WriteInt(15199);
                    }
                }

                c.Send(plew);
            }
        }
Exemplo n.º 7
0
        public static OutPacket ServerList(int[] channelUserLogged)
        {
            using (var packet = new OutPacket(SendOpcodes.Serverlist))
            {
                packet.WriteByte(0);                                //serverid
                packet.WriteMapleString(ServerSettings.ServerName);
                packet.WriteByte(0x03);                             //0: 正常 1: 火爆 2: 热 3: 新开
                packet.WriteMapleString(ServerSettings.ServerName); //eventmsg
                packet.WriteByte(0x64);
                packet.WriteByte(0x00);
                packet.WriteByte(0x64);
                packet.WriteByte(0x00);

                packet.WriteByte(ServerSettings.ChannelCount);
                packet.WriteInt(500);

                for (var i = 0; i < ServerSettings.ChannelCount; i++)
                {
                    var load = channelUserLogged[i];
                    packet.WriteMapleString(ServerSettings.ServerName + "-" + (i + 1));
                    packet.WriteInt(load);
                    packet.WriteByte(0x00); //serverid
                    packet.WriteShort((short)i);
                }
                packet.WriteShort(0);

                return(packet);
            }
        }
Exemplo n.º 8
0
 public static void getInvenOther4(Client c)
 {
     using (OutPacket plew = new OutPacket(ServerOpcode.INVEN_OTHER4))
     {
         var chr = c.Character;
         plew.WriteInt(0); // length + CRC
         plew.WriteInt(0);
         for (byte i = 0; i < 24; i++)
         {   // 物品編號
             plew.WriteInt(chr.Items.ItemID(InventoryType.ItemType.Other4, i));
         }
         for (byte i = 0; i < 24; i++)
         {   // 物品數量
             plew.WriteShort(chr.Items.Quantity(InventoryType.ItemType.Other4, i));
         }
         for (byte i = 0; i < 24; i++)
         {   // 物品Lock
             plew.WriteByte(chr.Items.IsLocked(InventoryType.ItemType.Other4, i));
         }
         for (byte i = 0; i < 24; i++)
         {   // 截止日期
             plew.WriteInt(chr.Items.Term(InventoryType.ItemType.Other4, i));
         }
         for (byte i = 0; i < 24; i++)
         {   // 物品Icon
             plew.WriteShort(chr.Items.Icon(InventoryType.ItemType.Other4, i));
         }
         c.Send(plew);
     }
 }
Exemplo n.º 9
0
        public static void ServerList_Ack(Client c)
        {
            using (var plew = new OutPacket(LoginServerOpcode.SERVERLIST_ACK))
            {
                for (int i = 0; i < 13; i++)
                {
                    plew.WriteByte(0xFF);
                }
                plew.WriteInt(LoginServer.Worlds.Count);                 // Number of servers
                foreach (World world in LoginServer.Worlds)
                {
                    plew.WriteShort(world.ID);                     // Server order
                    plew.WriteInt(world.Channel);                  // Number of channels

                    for (int i = 0; i < 8; i++)
                    {
                        plew.WriteShort(i + 1);
                        plew.WriteShort(i + 1);
                        plew.WriteString(ServerConstants.SERVER_IP);
                        plew.WriteInt(15101 + i);
                        plew.WriteInt(i < world.Count ? world[i].LoadProportion : 0); // Number of players
                        plew.WriteInt(ServerConstants.CHANNEL_LOAD);                  // Maximum number of channels
                        plew.WriteInt(2);                                             // Type of seal
                        plew.WriteInt(0);
                        plew.WriteByte(i < world.Count ? 1 : 4);                      // Channel open
                        plew.WriteInt(15199);
                    }
                }

                c.Send(plew);
            }
        }
Exemplo n.º 10
0
        public static void ViewInventory(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked viewInventory with null of activeCharacter");
                c.Close();
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            OutPacket op = new OutPacket(28);

            op.WriteInt(28);
            op.WriteShort(0x04);
            op.WriteShort(0x1e);
            op.WriteInt(0x01);
            op.WriteInt(chr.getuID());
            op.WriteShort(0x01);
            op.WriteByte(0xf8);
            op.WriteByte(0x01);

            p.Skip(4);

            op.WriteBytes(p.ReadBytes(4));
            op.WriteByte(0x9e);
            op.WriteByte(0x0f);
            op.WriteByte(0xbf);
            c.WriteRawPacket(op.ToArray());
        }
Exemplo n.º 11
0
 public static OutPacket GetCharInfo(MapleCharacter chr)
 {
     using (var packet = new OutPacket(SendOpcodes.WarpToMap))
     {
         packet.WriteInt(chr.Client.ChannelId);
         packet.WriteByte(0x00);
         packet.WriteByte(0x01);
         packet.WriteByte(0x01);
         packet.WriteShort(0);
         packet.WriteInt((int)(Randomizer.NextDouble() * 10));
         packet.WriteLong(DateUtiliy.GetFileTimestamp(DateTime.Now.GetTimeMilliseconds()));
         packet.WriteLong(-1);
         packet.WriteByte(0x00);
         LoginPacket.AddCharStats(packet, chr);
         packet.WriteByte((byte)chr.Buddies.Capacity);
         PacketCreator.AddInventoryInfo(packet, chr);
         PacketCreator.AddSkillRecord(packet, chr);
         PacketCreator.AddQuestRecord(packet, chr);
         PacketCreator.AddRingInfo(packet, chr);
         PacketCreator.AddTeleportRockRecord(packet, chr);
         packet.WriteShort(0);
         packet.WriteLong(0);
         packet.WriteByte(0x00);
         packet.WriteInt(0);
         packet.WriteLong(DateUtiliy.GetFileTimestamp(DateTime.Now.GetTimeMilliseconds()));
         return(packet);
     }
 }
Exemplo n.º 12
0
        public byte[] npcSpawn(Character character)
        {
            OutPacket initNPCData = new OutPacket(615);

            initNPCData.WriteInt(615);
            initNPCData.WriteShort(0x04);
            initNPCData.WriteShort(0x04);
            initNPCData.WriteByte(0x01);
            initNPCData.WriteInt(character.getuID());
            initNPCData.WriteInt(character.getArea().getaID());
            initNPCData.WriteFloat(character.getPosition()[0]);
            initNPCData.WriteFloat(character.getPosition()[1]);
            initNPCData.WriteByte(3);
            initNPCData.WriteInt(this.uID);
            initNPCData.WriteInt();
            initNPCData.WritePaddedString(this.getName(), 16);
            initNPCData.Skip(18);
            initNPCData.WriteInt(this.getModule());
            initNPCData.Skip(10);
            initNPCData.WriteInt(this.getmID());
            initNPCData.Skip(16);
            initNPCData.WriteFloat(this.npcPosition[0]);
            initNPCData.WriteFloat(this.npcPosition[1]);
            initNPCData.Skip(502);
            initNPCData.WriteByte(0x22);
            initNPCData.WriteByte(0x08);
            return(initNPCData.ToArray());
        }
Exemplo n.º 13
0
 public static void PartyUpdate(Client c)
 {
     using (OutPacket plew = new OutPacket(ServerOpcode.PARTY_UPDATE))
     {
         var chr = c.Character;
         plew.WriteInt(0); // length + CRC
         plew.WriteInt(0);
         for (int i = 0; i < 6; i++)
         {
             // 個人 + 其他 5 名隊員
             plew.WriteInt(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.CharacterID : -1);
             plew.WriteShort(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.Level : 0);
             plew.WriteString((i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.Name : ""), 20);
             plew.WriteShort(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.MaxHp : 0);
             plew.WriteShort(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.Hp : 0);
             plew.WriteShort(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.MaxMp : 0);
             plew.WriteShort(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.Mp : 0); // 尚未確認
             plew.WriteHexString("1F 40");
             plew.WriteByte(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.IP.GetAddressBytes()[0] : 0);
             plew.WriteByte(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.IP.GetAddressBytes()[1] : 0);
             plew.WriteByte(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.IP.GetAddressBytes()[2] : 0);
             plew.WriteByte(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.IP.GetAddressBytes()[3] : 0);
             plew.WriteByte(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.IP.GetAddressBytes()[0] : 0);
             plew.WriteByte(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.IP.GetAddressBytes()[1] : 0);
             plew.WriteByte(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.IP.GetAddressBytes()[2] : 0);
             plew.WriteByte(i < chr.Party.getMembers().Count ? chr.Party.getMembers()[i].Character.IP.GetAddressBytes()[3] : 0);
         }
         c.Send(plew);
     }
 }
Exemplo n.º 14
0
        /// <summary>
        /// Sends the initial patch data packet to the socket.
        /// </summary>
        /// <param name="version">The version's information</param>
        /// <param name="patchLocation">The patch data URL</param>
        public void SendPatchData(Version version, string patchLocation)
        {
            //F**k!!!!!
            Random rnd = new Random();

            uint val_first  = 0; //(uint)rnd.Next();
            uint val_second = 0; //(uint)rnd.Next() ;

            using (OutPacket outPacket = new OutPacket())
            {
                outPacket.WriteHexString("80 05 2B 28"); // NOTE: Header. Do not change. Probably typeid() of handler.
                outPacket.WriteShort(version.Localisation);
                outPacket.WriteShort(version.Major);
                outPacket.WriteShort(version.Minor);
                outPacket.WriteString(patchLocation);
                outPacket.WriteInt((int)val_first); // NOTE: IV Keys. Should we do random stuffs?
                outPacket.WriteInt((int)val_second);
                outPacket.WriteByte(0xE0);          // NOTE: Some stuff used on Region / Service Area.
                outPacket.WriteHexString("03 00 09 03 00 00 03 00 00 00 00 00 83 A3 E5 47 00 00 15 00 0D 00 00 00 03 00 00 00 00 00 65");

                this.Send(outPacket);
            }

            riv = val_first ^ val_second;
            siv = val_first ^ val_second;
        }
Exemplo n.º 15
0
        public static void AttackDefendState(MartialClient c, InPacket p)
        {
            if (c.getAccount().activeCharacter == null)
            {
                Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked playerState with null of activeCharacter");
                c.Close();
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            OutPacket op = new OutPacket(24);

            op.WriteInt(24);
            op.WriteShort(0x05);
            op.WriteShort(0x06);
            op.WriteByte(0x01);
            op.WriteByte(0x33);
            op.WriteByte(0x15);
            op.WriteByte(0x08);
            op.WriteInt(chr.getuID());
            op.WriteShort(p.ReadByte());
            op.WriteByte(0x10);
            op.WriteByte(0x29);

            WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), op.ToArray());
        }
Exemplo n.º 16
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());
        }
Exemplo n.º 17
0
        public static void getInvenPet5(Client c)
        {
            using (OutPacket plew = new OutPacket(ServerOpcode.INVEN_PET5))
            {
                var chr = c.Character;
                plew.WriteInt(0); // length + CRC
                plew.WriteInt(0);
                for (byte i = 0; i < 24; i++)
                {   // 寵物編號
                    plew.WriteInt(chr.Pets.ItemID((byte)InventoryType.ItemType.Pet5, i));
                }
                for (byte i = 0; i < 24; i++)
                {   // 寵物名稱
                    plew.WriteString(chr.Pets.Name((byte)InventoryType.ItemType.Pet5, i), 20);
                }
                for (byte i = 0; i < 24; i++)
                {   // 寵物等級
                    plew.WriteByte(chr.Pets.Level((byte)InventoryType.ItemType.Pet5, i));
                }
                for (byte i = 0; i < 24; i++)
                {   // 寵物血量
                    plew.WriteInt(chr.Pets.Hp((byte)InventoryType.ItemType.Pet5, i));
                }
                for (byte i = 0; i < 24; i++)
                {    // 寵物經驗值
                    plew.WriteInt(chr.Pets.Exp((byte)InventoryType.ItemType.Pet5, i));
                }
                for (int i = 0; i < 24; i++)
                {    //
                    plew.WriteInt(chr.Pets.Mp((byte)InventoryType.ItemType.Pet5, i));
                }
                for (int i = 0; i < 24; i++)
                {    // 截止日期
                    plew.WriteInt(-1);
                }
                for (byte i = 0; i < 24; i++)
                {   //
                    plew.WriteShort(chr.Pets.ItemID((byte)InventoryType.ItemType.Pet5, i) == 0 ? 0 : 1);
                }
                for (int i = 0; i < 24; i++)
                {   //
                    plew.WriteInt(0);
                }
                for (int i = 0; i < 24; i++)
                {   // 物品Lock
                    plew.WriteByte(0);
                }
                for (int i = 0; i < 24; i++)
                {   //
                    plew.WriteInt(0);
                }
                for (int i = 0; i < 24; i++)
                {   // 物品Icon
                    plew.WriteShort(0);
                }

                c.Send(plew);
            }
        }
Exemplo n.º 18
0
 public override void Serialize(OutPacket packet)
 {
     packet.WriteByte(Type);
     packet.WriteShort((short)Position.X);
     packet.WriteShort((short)Position.Y);
     packet.WriteByte(Newstate);
     packet.WriteShort((byte)Duration);
 }
Exemplo n.º 19
0
 public new void Serialize(OutPacket packet)
 {
     packet.WriteByte(Type);
     packet.WriteShort((short)Position.X);
     packet.WriteShort((short)Position.Y);
     packet.WriteShort((short)PixelsPerSecond.X);
     packet.WriteShort((short)PixelsPerSecond.Y);
     packet.WriteByte(Newstate);
 }
Exemplo n.º 20
0
        public static void getQuestInfo(Client c, List <Quest> quest)
        {
            using (OutPacket plew = new OutPacket(ServerOpcode.QUEST_ALL))
            {
                plew.WriteInt(0);                 // length + CRC
                plew.WriteInt(0);
                int value = 0;
                foreach (Quest q in quest)
                {
                    if (value >= 15)
                    {
                        break;
                    }
                    if (q.QuestState == 0x20)
                    {
                        continue;
                    }
                    plew.WriteInt(q.CompleteMonster);
                    plew.WriteInt(0);
                    plew.WriteInt(0);
                    plew.WriteShort(q.QuestID);
                    plew.WriteByte(1);
                    plew.WriteByte(q.QuestStage);
                    value++;
                }

                for (int i = value; i < 15; i++)
                {
                    plew.WriteInt(0);
                    plew.WriteInt(0);
                    plew.WriteInt(0);
                    plew.WriteShort(0);
                    plew.WriteByte(0);
                    plew.WriteByte(0);
                }

                for (int i = 0; i < 999; i++)
                {
                    int questState = 0x20;
                    foreach (Quest q in quest)
                    {
                        questState = (q.QuestState != 0x20 && (q.QuestID - 1) == i ? q.QuestState : 0x20);
                        if (questState != 0x20)
                        {
                            break;
                        }
                    }

                    plew.WriteByte(questState);
                }

                plew.WriteByte(0);
                c.Send(plew);
            }
        }
Exemplo n.º 21
0
        public static void MHShop(MartialClient c, InPacket p)
        {
            byte[] decrypted = p.ReadBytes(80);

            int itemIdentificator = BitConverter.ToInt32(decrypted, 0);

            ShopItem shopItem = ItemShop.Instance.getShopItemData(itemIdentificator);

            if (shopItem == null)
            {
                Console.WriteLine("wrong id selected..");
                return;
            }

            if (c.getAccount().MHPoints < shopItem.getPrice())
            {
                Console.WriteLine("teh hacksorz..");
                return;
            }

            Character chr = c.getAccount().activeCharacter;

            Console.WriteLine("si: {0} | {1} | {2} | {3}", itemIdentificator, shopItem.getItemID(), shopItem.getItemQuantity(), shopItem.getPrice());

            OutPacket op = new OutPacket(156);

            op.WriteInt(156);
            op.WriteShort(0x04);
            op.WriteShort(0x4b);
            op.WriteInt(1);
            op.WriteInt(chr.getuID());
            op.WriteInt(1);
            op.WriteRepeatedByte(1, 4);
            op.WriteRepeatedByte(1, 4);
            op.WriteInt(shopItem.getItemID());
            op.WriteInt(shopItem.getItemQuantity());
            op.WriteInt(shopItem.getItemID());
            op.WriteInt(shopItem.getItemQuantity());
            op.WriteInt(shopItem.getItemID());
            op.WriteInt(shopItem.getItemQuantity());
            op.WriteInt(shopItem.getItemID());
            op.WriteInt(shopItem.getItemQuantity());             // item quantity
            op.WriteRepeatedByte(1, 112);
            //op.Position = 152;
            //c.getAccount().MHPoints -= shopItem.getPrice();
            //op.WriteInt(shopItem.getPrice());
            c.WriteRawPacket(op.ToArray());

            Console.WriteLine(BitConverter.ToString(op.ToArray()));

            //TODO: Delivery items

            //System.Console.WriteLine("sent: {0}", System.BitConverter.ToString(op.ToArray()));
        }
Exemplo n.º 22
0
 public static void Hide(Client c, Character chr, int Active)
 {
     using (OutPacket plew = new OutPacket(ServerOpcode.CHAR_HIDE))
     {
         plew.WriteInt(0);                 // length + CRC
         plew.WriteInt(0);
         plew.WriteShort(chr.CharacterID);
         plew.WriteShort(Active);
         c.Send(plew);
     }
 }
Exemplo n.º 23
0
        public void Encode(OutPacket oPacket)
        {
            oPacket.WriteShort((short)mSkills.Count);

            foreach (Skill skill in mSkills)
            {
                skill.Encode(oPacket);
            }

            oPacket.WriteShort(); // NOTE: Cooldowns.
        }
Exemplo n.º 24
0
 public static void SubPassError(Client c)
 {
     using (var plew = new OutPacket(LoginServerOpcode.SubPasswordACK))
     {
         plew.WriteShort(0);
         plew.WriteShort(0);
         plew.WriteShort(0);
         plew.WriteShort(0);
         c.Send(plew);
     }
 }
Exemplo n.º 25
0
 public static void Fury(Client c, Character chr, int Type)
 {
     using (OutPacket plew = new OutPacket(ServerOpcode.CHAR_USERSP_ACK))
     {
         plew.WriteInt(0);                 // length + CRC
         plew.WriteInt(0);
         plew.WriteShort(chr.CharacterID);
         plew.WriteShort(Type);
         plew.WriteInt(0);
         c.Send(plew);
     }
 }
Exemplo n.º 26
0
 public static OutPacket GetServerIp(IPAddress address, short port, int clientId)
 {
     using (var packet = new OutPacket(SendOpcodes.ServerIp))
     {
         packet.WriteShort(0);
         packet.WriteBytes(address.GetAddressBytes());
         packet.WriteShort(port);
         packet.WriteInt(clientId);
         packet.WriteBytes(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00 });
         return(packet);
     }
 }
Exemplo n.º 27
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);
        }
Exemplo n.º 28
0
        public static void MoveToInv(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 fromCargoIndex = p.ReadByte();
            byte toInvSlot      = p.ReadByte();
            byte toInvLine      = p.ReadByte();
            byte toInvRow       = p.ReadByte();

            Cargo     cargo = chr.getCargo();
            Inventory inv   = chr.getInventory();

            Console.WriteLine("Cargo > {0} | {1} | {2} | {3}", fromCargoIndex, toInvSlot, toInvLine, toInvRow);

            cargo.updateCargo();

            if (!cargo.getCargoSaved().ContainsKey((byte)fromCargoIndex))
            {
                Console.WriteLine("Cannot moveItemToInv [item missing]");
                return;
            }
            Item itemF = cargo.getCargoSaved()[(byte)fromCargoIndex];

            if (!inv.moveFromCargo(itemF, fromCargoIndex, toInvRow, toInvLine))
            {
                StaticPackets.sendSystemMessageToClient(c, 1, "do kurwy nendzy");
                return;
            }
            cargo.saveCargo();

            OutPacket op = new OutPacket(24);

            op.WriteInt(24);
            op.WriteShort(4);
            op.WriteShort(45);
            op.WriteInt(1);
            op.WriteInt(chr.getuID());
            op.WriteShort(1);
            op.WriteByte(fromCargoIndex);
            op.WriteByte(toInvSlot);
            op.WriteByte(toInvLine);
            op.WriteByte(toInvRow);
            op.WriteShort(-16625);
            c.WriteRawPacket(op.ToArray());
        }
Exemplo n.º 29
0
 public static byte[] Handshake()
 {
     using (OutPacket p = new OutPacket())
     {
         p.WriteShort(14);
         p.WriteShort(Constants.MajorVersion);
         p.WriteMapleString(Constants.MinorVersion);
         p.WriteBytes(Constants.RIV);
         p.WriteBytes(Constants.SIV);
         p.WriteByte(Constants.Locale);
         return(p.ToArray());
     }
 }
Exemplo n.º 30
0
 public static void UpdateHpMp(Client c, int updateHp, short updateMp, short updateFury, short updateMaxFury)
 {
     using (OutPacket plew = new OutPacket(ServerOpcode.CHAR_HPSP))
     {
         plew.WriteInt(0);                 // length + CRC
         plew.WriteInt(0);
         plew.WriteShort(updateHp);
         plew.WriteShort(updateMp);
         plew.WriteShort(updateFury);
         plew.WriteShort(updateMaxFury);
         c.Send(plew);
     }
 }