Beispiel #1
0
        public static void LootItem(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            //byte[] b;

            var uid    = packet.ReadInt();
            var unk    = packet.ReadShort();
            var itemID = packet.ReadShort();
            var slot   = packet.ReadShort();

            var database = client.Metadata["database"] as IDatabaseContracts;
            var server   = (int)client.Metadata["server"];
            var id       = (uint)client.Metadata["id"];
            var map      = client.Metadata["map"] as IMap;

            var   item  = map.LootItem(client, (uint)uid);
            var   ditem = (DItem)item.ToStructure <DItem>();
            CItem citem = ditem.ToClient(slot);

            database.AddItem(server, (int)id, (int)slot, item, 0);

            builder.New(0x99);
            {
                builder += (byte)96;                    // ?
                builder += citem.ToByteArray();

                //b = builder.Data;
            }

            client.Send(builder, "ItemLooting");
        }
        public static void SubPasswordDelRequest(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            packet.Skip(4);
            var pass = packet.ReadString(10).Trim('\0');

            var syncServer = client.Metadata["syncServer"] as SyncReceiver;
            var checksub   = SubpassManagement.CheckSubPw(syncServer, client.AccountID, pass);

            var tries = 0;

            builder.New(0x410);
            {
                if (checksub)
                {
                    client.Metadata["subTries"] = 0;
                    builder += 1;          // success
                    builder += (byte)0x00; // failed times
                }
                else
                {
                    client.Metadata["subTries"] = (int)client.Metadata["subTries"] + 1;
                    tries    = (int)client.Metadata["subTries"];
                    builder += 0;           // failed
                    builder += (byte)tries; // failed times
                }
                builder += 1;
            }

            client.Send(builder, "SubPasswordDelRequest");

            if ((int)client.Metadata["subTries"] > 3)
            {
                client.Disconnect();
            }
        }
Beispiel #3
0
        public static void PetInfo(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0x0389);
            {
                builder += (int)1;
                builder += (int)1;      //petserial
                builder += (int)0;
                builder += (byte)0;
                builder += (int)34;
                builder += (int)1;      //petserial
                builder += (int)1;      //PetID
                builder += (int)8;      //PetOwner
                builder += (int)11241;  //PetIdx
                builder += (byte)10;    //PetLevel
                builder += (int)0;      //PetExp
                builder += (byte)0;
                builder += (byte)11;
                builder += (int)0;
                builder += (int)0;
                builder += (int)0;
                builder += (int)0;
                builder += (byte)0;
                builder += new byte[40];
            }

            client.Send(builder, "PetInfo");
        }
Beispiel #4
0
        public static void VerifyLinks(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            //byte[] b;

            var timestamp = packet.ReadInt();
            var count     = packet.ReadShort();

            var key = ((ulong)count << 32) + (ulong)timestamp;

            var proxy = client.Metadata["proxy"] as ILoginContracts;

            proxy.AddUser(key, client.AccountID);

            builder.New(0x66);
            {
                builder += (byte)1;                     // server
                builder += (byte)1;                     // channel

                //b = builder.Data;
            }

            client.Send(builder, "VerifyLinks");

            (client.Metadata["timer"] as System.Timers.Timer).Stop();
        }
Beispiel #5
0
        public static void ChangeChannel(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            var newServer  = packet.ReadByte();
            var newChannel = packet.ReadByte();

            builder.New(0x085D);
            {
                builder += (int)1;
            }

            /*
             * client.Metadata["server"] = newServer;
             * client.Metadata["channel"] = newChannel;
             *
             * var clients = client.Metadata["clients"] as Dictionary<ulong, ClientHandler>;
             * foreach (var c in clients.Values)
             * {
             *  if(c.AccountID == client.AccountID)
             *  {
             *      var key = (ulong)c.Metadata["magic"];
             *      clients.Remove(key);
             *  }
             * }
             *
             * client.Metadata["clients"] = clients;
             * var port = Global.Config.getChannelPort(newServer,newChannel);*/

            client.Send(builder, "ChangeChannel");
        }
Beispiel #6
0
        static void NFY_MobList(PacketBuilder builder, ClientHandler client, List <MobEntity> mobs, int start, int end, int count)
        {
            var map = client.Metadata["map"] as IMap;

            builder.New(0xCA);
            {
                builder += (byte)(count);       // count

                for (int i = start; i < end; i++)
                {
                    var m = mobs[i];
                    builder += (ushort)m.Id;    // uniq id?
                    builder += (byte)0x02;      //
                    builder += (byte)map.ID;    // Map id
                    builder += m.CurrentPosX;   // start x
                    builder += m.CurrentPosY;   // start y
                    builder += m.EndPosX;       // end x
                    builder += m.EndPosY;       // end y
                    builder += m.SId;           // mob species id
                    builder += m.MaxHP;         // max hp
                    builder += m.CurrentHP;     // current hp
                    builder += (byte)0;         // moving speed multiplier?
                    builder += m.Level;         // level
                    builder += new byte[7];
                }
            }

            client.Send(builder, "NFY_NewMobsList");
        }
Beispiel #7
0
        public static void CharacterDeleteCheckSubPassword(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            var subpw = packet.ReadString(10).Trim('\0');

            var syncServer = client.Metadata["syncServer"] as SyncReceiver;
            var verify     = SubpassManagement.CheckSubPw(syncServer, client.AccountID, subpw);
            var tries      = 0;

            builder.New(0x870);
            {
                if (verify)
                {
                    client.Metadata["subTries"] = 0;
                    builder += 1;           // success
                    builder += (byte)0;     // failed times
                }
                else
                {
                    client.Metadata["subTries"] = (int)client.Metadata["subTries"] + 1;
                    tries    = (int)client.Metadata["subTries"];
                    builder += 0;           // failed
                    builder += (byte)tries; // failed times
                }
            }

            client.Send(builder, "CharacterDeleteCheckSubPassword");

            if ((int)client.Metadata["subTries"] > 3)
            {
                client.Disconnect();
            }
        }
Beispiel #8
0
        public static void MeritSystem(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            var unk1 = packet.ReadByte();
            var unk2 = packet.ReadByte();
            var unk3 = packet.ReadByte();
            var unk4 = packet.ReadByte();
            var unk5 = packet.ReadByte();
            var unk6 = packet.ReadByte();
            var unk7 = packet.ReadByte();
            var unk8 = packet.ReadByte();/*
                                          * var unk9 = packet.ReadByte();
                                          * var unk10 = packet.ReadByte();
                                          * var unk11 = packet.ReadByte();
                                          * var unk12 = packet.ReadByte();*/

#if DEBUG
            Log.Notice("" + unk1 + " " + unk2 + " " + unk3 + " " + unk3 + " " + unk4 + " " + unk5 + " " + unk6 + " " + unk7 + " " + unk8 + "");
#endif



            builder.New(0x9F3);
            {
                builder += 1;
                builder += (ushort)0;
            }

            client.Send(builder, "MeritSystem");
        }
Beispiel #9
0
        public static void KeyMoveBegined(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            var unk1 = packet.ReadShort();
            var unk2 = packet.ReadShort();
            var unk3 = packet.ReadShort();
            var unk4 = packet.ReadLong();

            packet.Skip(8);
            var unk5 = packet.ReadShort();
            //var unk6 = packet.ReadByte();

            //var id = (int)client.Metadata["id"];
            var timestamp = (uint)client.Metadata["timestamp"];

            //var clients = (client.Metadata["map"] as IMap).GetSurroundingClients(client, 2); For Now

            builder.New(0x193);
            {
                builder += 0;
                builder += Environment.TickCount - (int)timestamp;
                builder += unk1;
                builder += unk2;
                builder += unk3;
                builder += unk4;
                builder += unk5;
                //builder += unk6;
            }

            /*foreach (var c in clients)
             * {
             *  c.Send(builder, "NFY_KeyMoveBegined");
             * }*/
            client.Send(builder, "NFY_KeyMoveBegined");
        }
Beispiel #10
0
 public static void Unknown9D8(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
 {
     builder.New(0x09D8);
     {
     }
     client.Send(builder, "Unknown9D8");
 }
Beispiel #11
0
        public static void CashNPC(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0xA05);
            {
                builder += (ushort)0;
                builder += 1;

                builder += (ushort)0;   //ID
                builder += (ulong)1;    //itemidx
                builder += (uint)0;     //tag
                builder += (uint)0;
                builder += (uint)0;     //duration
                builder += (byte)0;
                builder += (byte)0;
                builder += (byte)0;
                builder += (uint)5357;
                builder += (uint)123;   //price
                builder += (uint)0;
                builder += (ushort)0;
                builder += (ushort)2;
                builder += (ushort)0;
            }

            client.Send(builder, "CashNPC");
        }
Beispiel #12
0
        public static void QuestNextStep(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            var questid  = packet.ReadUShort();
            var questid1 = packet.ReadUShort();

            packet.Skip(3);
            var previousstep = packet.ReadByte();
            var nextstep     = packet.ReadByte();

            /*
             * builder.New(0x0140);
             * {
             *  builder += (byte)1;
             *  builder += (byte)1;
             *  builder += (byte)1;
             *  builder += (byte)1;
             *  builder += (byte)1;
             *  builder += (byte)1;
             *  builder += (byte)1;
             *  builder += (byte)1;
             * }*/

            builder.New(0x0140);
            {
                builder += questid;
                builder += (ushort)(previousstep + nextstep);
                builder += questid1;
                builder += (ushort)0;
            }

            client.Send(builder, "QuestNextStep");
        }
Beispiel #13
0
        public static void AddStatPoints(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            var strength      = packet.ReadInt();
            var dexterity     = packet.ReadInt();
            var intellingence = packet.ReadInt();
            var strtoadd      = packet.ReadInt();
            var dextoadd      = packet.ReadInt();
            var inttoadd      = packet.ReadInt();

            builder.New(0x0A58);
            {
                builder += 0; //add or remove?
                builder += strength + strtoadd;
                builder += dexterity + dextoadd;
                builder += intellingence + inttoadd;
            }

            Character character = client.Metadata["fullchar"] as Character;
            var       id        = character.id;
            var       server    = (int)client.Metadata["server"];
            var       sync      = client.Metadata["syncServer"] as SyncReceiver;
            int       pnt       = -(strtoadd + dextoadd + inttoadd);

            CharacterManagement.UpdateStatPoints(sync, server, id, strength + strtoadd, intellingence + inttoadd, dexterity + dextoadd, pnt);

            client.Send(builder, "AddStatPoints");
        }
        public static void CheckUserPrivacyData(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            //byte[] b;

            packet.Skip(4);
            var pass = packet.ReadString(32).Trim('\0');

            pass = GenerateHash(pass);

            var database = client.Metadata["database"] as IDatabaseContracts;
            var server   = (int)client.Metadata["server"];

            bool?auth = database.VerifyPassword(server, client.AccountID, pass);

            builder.New(0x320);
            {
                if (auth != null)
                {
                    builder += (bool)(auth) ? (byte)1 : (byte)0;
                }
                else
                {
                    events.Error("world.700.CheckUserPrivacyData", "CheckUserPrivacyData: Account ID not found!");
                }

                //b = builder.Data;
            }

            client.Send(builder, "CheckUserPrivacyData");
        }
Beispiel #15
0
        public static void Ping(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0x09FE);
            client.Send(builder, "Ping");

            NewMobsList(packet, builder, client, events);
        }
Beispiel #16
0
        public static void Unknown9C8(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0x09C8);
            client.Send(builder, "Unknown9C8");
            var clients = client.Metadata["clients"] as Dictionary <ulong, ClientHandler>;

            clients.Remove((ulong)client.Metadata["magic"]);

            Character character = client.Metadata["fullchar"] as Character;
            var       id        = character.id;

            if (id == -999999998)
            {
                builder.New(0xC9);
                {
                    builder += id;
                    builder += (byte)0x12;
                }

                character.id = 0;

                foreach (var c in clients.Values)
                {
                    c.Send(builder, "DelUserList");
                }
            }
        }
Beispiel #17
0
        public static void SubPasswordSet(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            var pass = packet.ReadString(10).Trim('\0');

            packet.Skip(5);
            var question = packet.ReadInt();
            var answer   = packet.ReadString(16).Trim('\0');

            packet.Skip(112);
            var changeSub = packet.ReadInt();

            var syncServer = client.Metadata["syncServer"] as SyncReceiver;

            if (changeSub == 0)
            {
                SubpassManagement.SetSubPass(syncServer, client.AccountID, pass, question, answer);
            }
            else
            {
                SubpassManagement.SetSubPass(syncServer, client.AccountID, pass, -1, string.Empty);
            }

            builder.New(0x406);
            {
                builder += 1;
                builder += 0;
                builder += 1;
                builder += 0;
            }

            SubpassManagement.SetSubPassTime(syncServer, client.AccountID, 0);
            client.Send(builder, "SubPasswordSet");
        }
Beispiel #18
0
 public static void Unknown9D6(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
 {
     builder.New(0x09D6);
     {
         builder += new byte[24];
     }
     client.Send(builder, "Unknown9D6");
 }
Beispiel #19
0
 public static void Unknown8C8(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
 {
     builder.New(0x08C8);
     {
         builder += 0x03E8;
     }
     client.Send(builder, "Unknown8C8");
 }
Beispiel #20
0
 public static void Unknown193(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
 {
     builder.New(0x0193);
     {
         builder += (byte)0;
     }
     client.Send(builder, "Unknown193");
 }
Beispiel #21
0
        public static void CreateCharacter(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            var style = packet.ReadInt();

            packet.Skip(2);
            var slot       = packet.ReadByte();
            var nameLength = packet.ReadByte();
            var name       = packet.ReadString(nameLength);

            var _class = (byte)(style & 0xFF ^ 8);

            style >>= 8;
            var colour = (byte)((style & 0xFF) >> 5);
            var face   = (byte)(style & 0x1F);

            style >>= 8;
            var hair = (byte)((style & 0xFF) >> 1);

            style >>= 8;
            var gender = (style != 0);

            var server     = (int)client.Metadata["server"];
            var syncServer = client.Metadata["syncServer"] as SyncReceiver;
            var slotorder  = (int)client.Metadata["slotorder"];

            var slots = new int[8]
            {
                slotorder / 0x10000000 % 0x10,
                slotorder / 0x1000000 % 0x10,
                slotorder / 0x100000 % 0x10,
                slotorder / 0x10000 % 0x10,
                slotorder / 0x1000 % 0x10,
                slotorder / 0x100 % 0x10,
                slotorder / 0x10 % 0x10,
                slotorder % 0x10,
            };

            for (int i = 0; i < 8; i++)
            {
                if (slots[i] == slot)
                {
                    slot = (byte)i;
                    break;
                }
            }

            slot = (byte)slots[slot];

            var status = CharacterManagement.CreateCharacter(syncServer, server, client.AccountID, slot, name, _class, gender, face, hair, colour);

            builder.New(0x86);
            {
                builder += client.AccountID * 8 + slot;
                builder += (byte)status;
            }

            client.Send(builder, "NewMyChartr");
        }
Beispiel #22
0
        public static void Unknown9E0(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0x09E0);
            {
                builder += 0;
            }

            client.Send(builder, "Unknown9E0");
        }
Beispiel #23
0
        public static void QuestStart(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0x011A);
            {
                builder += 1;
            }

            client.Send(builder, "QuestStart");
        }
Beispiel #24
0
        public static void UnknownPacket1(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            var b = new byte[0x0A] {
                0xE2, 0xB7, 0x0A, 0x00, 0x08, 0x04, 0x00, 0x00,
                0x00, 0x00
            };

            client.Send(ref b, "UnknownPacket1");
        }
Beispiel #25
0
        public static void UnknownA0B(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0x0A0B);
            {
                builder += new byte[422];
            }

            client.Send(builder, "UnknownA0B");
        }
Beispiel #26
0
        /*
         * UnknownCE9 Packet
         * -------------------------
         * Server2Client Structure:
         *
         * UnknownCE9 -> E2 B7 0C 00 E9 0C 01 00 00 00 00 00
         *
         * ushort  : magic code
         * ushort  : size
         * ushort  : opcode
         *
         * uint    : Unkn1
         * ushort  : Unkn2
         */

        public static void UnknownCE9(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0xCE9);
            {
                builder += 1;
                builder += (ushort)0;
            }

            client.Send(builder, "UnknownCE9");
        }
Beispiel #27
0
        public virtual void CheckVersion(ref byte[] message, ClientHandler client, EventHandler events)
        {
            var p = new Outgoing.CheckVersion(true);

            p.Version = BitConverter.ToUInt32(message, 0x0A);

            var b = p.ToByteArray();

            client.Send(ref b, "CheckVersion");
        }
Beispiel #28
0
        public static void ReqCraft(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0x8CA);
            {
                builder += 1;
                builder += (ushort)0;
            }

            client.Send(builder, "ReqCraft");
        }
Beispiel #29
0
        /*
         * SystemMessg Packet
         * -------------------------
         * Server2Client Structure:
         *
         * ushort   : magic code
         * ushort   : size
         * ushort   : opcode
         *
         * byte     : status    # system message status
         * short    : unk1
         */
        #endregion

        public static void SystemMessg(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0x78);
            {
                builder += (byte)SystemMsg.None;
                builder += (short)0;
            }

            client.Send(builder, "SystemMessg");
        }
Beispiel #30
0
        public static void RecvCashItem(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events)
        {
            builder.New(0x1A3);
            {
                var ID       = packet.ReadUShort();
                var unk1     = packet.ReadByte();
                var unk2     = packet.ReadByte();
                var SlotFree = packet.ReadByte();
                var unk4     = packet.ReadByte();



                Character character  = client.Metadata["fullchar"] as Character;
                var       cid        = character.id;
                var       server     = (int)client.Metadata["server"];
                var       syncServer = client.Metadata["syncServer"] as SyncReceiver;
                var       slot       = character.slot;

                var CashItens = CharacterManagement.GetCashItem(syncServer, server, cid / 8);

                for (int i = 0; i < CashItens.Length; i++)
                {
                    if (CashItens[i].ID == ID)
                    {
                        builder += (int)ID;
                        builder += (int)CashItens[i].itemid;
                        builder += CashItens[i].itemopt;
                        builder += (int)CashItens[i].itemopt2;
                        builder += (int)SlotFree;
                        builder += (int)0;
                        builder += (short)0;

                        CharacterManagement.SetCashItem(syncServer, server, CashItens[i].ID);
                    }
                }

                //Log.Message(string.Format("'{0}' '{1}' '{2}' '{3}' '{4}'", ID, unk1, unk2, SlotFree, unk4), ConsoleColor.White, "Recv: ");

                /*
                 * builder += (int)unk0;       //item cashid
                 * builder += (int)163865;         //item idx
                 * builder += (int)244;          //item opt extreme
                 * builder += (int)536871167;  //item opt old
                 * builder += (int)0;          //item opt
                 * builder += (byte)unk3;      //Slot Free
                 * builder += (byte)0;
                 * builder += (byte)0;
                 * builder += (byte)0;
                 *
                 * builder += (int)0;
                 * builder += (short)0;*/
            }

            client.Send(builder, "RecvCashItem");
        }