Example #1
0
        public void SendCopy(PacketOut Out)
        {
            Out.WritePacketLength();
            PacketOut packet = new PacketOut(0);

            packet.Position = 0;
            packet.Write(Out.ToArray(), 0, Out.ToArray().Length);
            SendPacket(packet);
        }
Example #2
0
 public byte[] Encrypt(PacketOut packet)
 {
     byte[] data = packet.ToArray();
     Log.Info("[SERVER PRE-ENCRYPT]", this.DumpData(data));
     encryption.Process(data, 4, data.Length - 4);
     return(data);
 }
Example #3
0
 public void Send(PacketOut packet)
 {
     Console.Write("Sent:");
     for (int i = 0; i < packet.ToArray().Length; i++) Console.Write(" " + packet.ToArray()[i]);
     Console.WriteLine();
     byte[] toSend = Crypto.Encrypt(packet);
     MemoryStream tcpOut = new MemoryStream();
     tcpOut.WriteByte((Byte)((toSend.Length & 0xffff) & 0xff));
     tcpOut.WriteByte((Byte)((toSend.Length & 0xffff) >> 8));
     tcpOut.WriteByte((Byte)((toSend.Length >> 16) & 0xff));
     tcpOut.WriteByte((Byte)(toSend.Length >> 24));
     tcpOut.Write(toSend, 4, toSend.Length - 4);
     SendTCP(tcpOut.ToArray());
     tcpOut.Dispose();
     toSend = null;
 }
Example #4
0
        public void Send(PacketOut packet)
        {
            try
            {
                if (!Connected)
                {
                    return;
                }
                Log.WriteLine(LogType.Network, "Sending packet: {0}", packet.packetId);
                if (!Connected)
                {
                    return;
                }
                Byte[] Data = packet.ToArray();

                int    Length = Data.Length;
                byte[] Packet = new byte[2 + Length];
                Packet[0] = (byte)(Length >> 8);
                Packet[1] = (byte)(Length & 0xff);
                Data.CopyTo(Packet, 2);
                mCrypt.Encrypt(Packet, 0, 6);
                //While writing this part of code I had a strange feeling of Deja-Vu or whatever it's called :>

                Log.WriteLine(LogType.Packet, "{0}", packet.ToHex());
                mSocket.Send(Packet);
            }
            catch (Exception ex)
            {
                Log.WriteLine(LogType.Error, "Exception Occured");
                Log.WriteLine(LogType.Error, "Message: {0}", ex.Message);
                Log.WriteLine(LogType.Error, "Stacktrace: {0}", ex.StackTrace);
            }
        }
Example #5
0
 public byte[] Encrypt(PacketOut packet)
 {
     byte[] data = packet.ToArray();
     Log.Info("[SERVER PRE-ENCRYPT]", this.DumpData(data));
     encryption.Process(data, 4, data.Length - 4);
     return data;
 }
Example #6
0
        private void SendBuffer(Player Plr, ref PacketOut Buffer, ref byte Count)
        {
            // On Envoi le Packet des items
            PacketOut Packet = new PacketOut((byte)Opcodes.F_GET_ITEM);

            Packet.WriteByte(Count);
            Packet.Fill(0, 3);
            Packet.Write(Buffer.ToArray(), 0, Buffer.ToArray().Length);
            Plr.SendPacket(Packet);

            // On Remet le compteur a zero
            Count = 0;

            // On Initalise un nouveau buffer
            Buffer          = new PacketOut(0);
            Buffer.Position = 0;
        }
        public void SendFriends(List <Character_social> Socials)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_SOCIAL_NETWORK);

            Out.WriteUInt16(0);
            Out.WriteByte(1);
            Out.WriteByte((byte)Socials.Count);
            Out.WriteByte(0);

            foreach (Character_social Social in Socials)
            {
                BuildPlayerInfo(ref Out, Social);
            }

            Log.Dump("Friends", Out.ToArray(), 0, Out.ToArray().Length);
            GetPlayer().SendPacket(Out);
        }
Example #8
0
 public void Send(PacketOut packet)
 {
     if (Connected)
     {
         Log.WriteLine(LogType.Network, "Sending packet {0}. Length: {1}", packet.packetId.ToString(), packet.Lenght());
         Log.WriteLine(LogType.Packet, "{0}", packet.ToHex());
         Byte[] Data = packet.ToArray();
         mSocket.Send(Data);
     }
 }
Example #9
0
File: Player.cs Project: uvbs/DoR
        public void SendCopy(PacketOut Out)
        {
            Out.WritePacketLength();
            byte[]    Buf    = Out.ToArray();
            PacketOut packet = new PacketOut(0);

            packet.Position = 0;
            packet.Write(Buf, 0, Buf.Length);
            SendPacket(packet);
        }
Example #10
0
        public void Send(PacketOut packet)
        {
            Console.Write("Sent:");
            for (int i = 0; i < packet.ToArray().Length; i++)
            {
                Console.Write(" " + packet.ToArray()[i]);
            }
            Console.WriteLine();
            byte[]       toSend = Crypto.Encrypt(packet);
            MemoryStream tcpOut = new MemoryStream();

            tcpOut.WriteByte((byte)((toSend.Length & 0xffff) & 0xff));
            tcpOut.WriteByte((byte)((toSend.Length & 0xffff) >> 8));
            tcpOut.WriteByte((byte)((toSend.Length >> 16) & 0xff));
            tcpOut.WriteByte((byte)(toSend.Length >> 24));
            tcpOut.Write(toSend, 4, toSend.Length - 4);
            SendTCP(tcpOut.ToArray());
            tcpOut.Dispose();
            toSend = null;
        }
Example #11
0
        private void LogOutPacket(PacketOut packet)
        {
            if (_logThread == null)
            {
                _logThread = new Thread(new ThreadStart(PacketLogThread));
                _logThread.Start();
            }

            lock (_packetLog)
            {
                _packetLog.Add(Utils.ToLogHexString((byte)packet.Opcode, true, packet.ToArray()));
            }
        }
        public void SendCampaignStatus(Player plr, VictoryPointProgress vpp, Realms realm)
        {
            _logger.Trace("Send Campaign Status");
            _logger.Warn("F_CAMPAIGN_STATUS");
            PacketOut Out = new PacketOut((byte)Opcodes.F_CAMPAIGN_STATUS, 159);

            Out.WriteHexStringBytes("0005006700CB00"); // 7

            // Dwarfs vs Greenskins T1
            BuildCaptureStatus(Out, WorldMgr.GetRegion(1, false), realm);

            // Dwarfs vs Greenskins T2
            BuildCaptureStatus(Out, WorldMgr.GetRegion(12, false), realm);

            // Dwarfs vs Greenskins T3
            BuildCaptureStatus(Out, WorldMgr.GetRegion(10, false), realm);

            // Dwarfs vs Greenskins T4
            BuildCaptureStatus(Out, WorldMgr.GetRegion(2, false), realm);

            // Empire vs Chaos T1
            BuildCaptureStatus(Out, WorldMgr.GetRegion(8, false), realm);

            // Empire vs Chaos T2
            BuildCaptureStatus(Out, WorldMgr.GetRegion(14, false), realm);

            // Empire vs Chaos T3
            BuildCaptureStatus(Out, WorldMgr.GetRegion(6, false), realm);

            // Empire vs Chaos T4
            BuildCaptureStatus(Out, WorldMgr.GetRegion(11, false), realm);

            // High Elves vs Dark Elves T1
            BuildCaptureStatus(Out, WorldMgr.GetRegion(3, false), realm);

            // High Elves vs Dark Elves T2
            BuildCaptureStatus(Out, WorldMgr.GetRegion(15, false), realm);

            // High Elves vs Dark Elves T3
            BuildCaptureStatus(Out, WorldMgr.GetRegion(16, false), realm);

            // High Elves vs Dark Elves T4
            BuildCaptureStatus(Out, WorldMgr.GetRegion(4, false), realm);

            Out.Fill(0, 83);

            // RB   4/24/2016   Added logic for T4 campaign progression.
            //gs t4
            // 0 contested 1 order controled 2 destro controled 3 notcontroled locked
            Out.WriteByte(3);                                          //dwarf fort
            BuildBattleFrontStatus(Out, WorldMgr.GetRegion(2, false)); //kadrin valley
            Out.WriteByte(3);                                          //orc fort

            //chaos t4
            Out.WriteByte(3);   //empire fort

            Out.WriteByte((byte)3);
            BuildBattleFrontStatus(Out, WorldMgr.GetRegion(11, false)); //reikland
            Out.WriteByte(3);                                           //chaos fort

            //elf
            Out.WriteByte(3);                                          //elf fort
            BuildBattleFrontStatus(Out, WorldMgr.GetRegion(4, false)); //etaine
            Out.WriteByte(3);                                          //delf fort

            Out.WriteByte(0);                                          // Order underdog rating
            Out.WriteByte(0);                                          // Destruction underdog rating

            if (plr == null)
            {
                byte[] buffer = Out.ToArray();

                if (Player._Players.Count == 0)
                {
                    plr.SendPacket(Out);
                }
                else
                {
                    lock (Player._Players)
                    {
                        foreach (Player player in Player._Players)
                        {
                            if (player == null || player.IsDisposed || !player.IsInWorld())
                            {
                                continue;
                            }

                            PacketOut playerCampaignStatus = new PacketOut(0, 159)
                            {
                                Position = 0
                            };
                            playerCampaignStatus.Write(buffer, 0, buffer.Length);

                            if (player.Region?.Campaign != null)
                            {
                                WriteVictoryPoints(player.Realm, playerCampaignStatus, vpp);
                            }

                            else
                            {
                                playerCampaignStatus.Fill(0, 9);
                            }

                            playerCampaignStatus.Fill(0, 4);

                            player.SendPacket(playerCampaignStatus);
                        }
                    }
                }
            }
            else
            {
                if (plr.Region?.Campaign != null)
                {
                    WriteVictoryPoints(plr.Realm, Out, vpp);
                }

                else
                {
                    Out.Fill(0, 9);
                }

                Out.Fill(0, 4);

                plr.SendPacket(Out);
            }
        }
Example #13
0
        public byte[] BuildCharacters()
        {
            PacketOut Out = new PacketOut((byte)0);
            Out.Position = 0;
            Out.WriteUInt16(GetCharacterCount());

            Character Char = null;
            for (int i = 0; i < MAX_CHARS; ++i)
            {
                Char = Chars[i];

                if (Char == null)
                    Out.Write(new byte[280], 0, 280);
                else
                {
                    Out.FillString(Char.Name, 48);
                    Out.WriteByte(Char.Info[0].Level);
                    Out.WriteByte(Char.Career);
                    Out.WriteByte(Char.Realm);
                    Out.WriteByte(Char.Sex);
                    Out.WriteByte(Char.ModelId);
                    Out.WriteUInt16(Char.Info[0].ZoneId);
                    Out.Write(new byte[5], 0, 5);

                    Character_items Item = null;
                    for (UInt16 SlotId = 14; SlotId < 30; ++SlotId)
                    {
                        Item = Char.GetItemInSlot(SlotId);
                        if (Item == null)
                            Out.WriteUInt16(0);
                        else
                            Out.WriteUInt16Reverse(Item.ModelId);

                        Out.Write(new byte[6], 0, 6);
                    }

                    Out.Write(new byte[6], 0, 6);

                    for (int j = 0; j < 5; ++j)
                    {
                        Out.Write(new byte[6], 0, 6);
                        Out.WriteUInt16(0xFF00);
                    }

                    for (UInt16 SlotId = 10; SlotId < 13; ++SlotId)
                    {
                        Item = Char.GetItemInSlot(SlotId);
                        Out.WriteUInt16(0);
                        if (Item == null)
                            Out.WriteUInt16(0);
                        else
                            Out.WriteUInt16Reverse(Item.ModelId);
                    }

                    Out.Write(new byte[10], 0, 10);
                    Out.WriteUInt16(0xFF00);
                    Out.WriteByte(0);
                    Out.WriteByte(Char.Race);
                    Out.WriteUInt16(0);
                    Out.Write(Char.bTraits, 0, Char.bTraits.Length);
                    Out.Write(new byte[10], 0, 10);
                }
            }
            return Out.ToArray();
        }
Example #14
0
        public byte[] BuildRealms(uint sequence)
        {
            try
            {
                PacketOut Out = new PacketOut((byte)0);
                Out.Position = 0;

                Out.WriteUInt32(sequence);
                Out.WriteUInt16(0);
                lock (_Realms)
                {
                    Log.Info("BuildRealm", "Envoi de " + _Realms.Count + " royaumes");
                    Out.WriteUInt32((uint)_Realms.Count);

                    foreach (Realm Rm in _Realms.Values)
                    {
                        Out.WriteByte(Rm.RealmId);
                        Out.WriteByte((byte)(Rm.RpcId != 0 ? 1 : 0));
                        Out.WriteUInt32(1);
                        Out.WriteByte(Rm.RealmId);
                        Out.WriteByte(Rm.RealmId);
                        Out.WriteString("[" + Rm.Language + "] " + Rm.Name);
                        Out.WriteUInt32(19);
                        Out.WriteString("setting.allow_trials");
                        Out.WriteString(Rm.AllowTrials);
                        Out.WriteString("setting.charxferavailable");
                        Out.WriteString(Rm.CharfxerAvailable);
                        Out.WriteString("setting.language");
                        Out.WriteString(Rm.Language);
                        Out.WriteString("setting.legacy");
                        Out.WriteString(Rm.Legacy);
                        Out.WriteString("setting.manualbonus.realm.destruction");
                        Out.WriteString(Rm.BonusDestruction);
                        Out.WriteString("setting.manualbonus.realm.order");
                        Out.WriteString(Rm.BonusOrder);
                        Out.WriteString("setting.name");
                        Out.WriteString(Rm.Name);
                        Out.WriteString("setting.net.address");
                        Out.WriteString(Rm.Adresse);
                        Out.WriteString("setting.net.port");
                        Out.WriteString(Rm.Port.ToString());
                        Out.WriteString("setting.redirect");
                        Out.WriteString(Rm.Redirect);
                        Out.WriteString("setting.region");
                        Out.WriteString(Rm.Region);
                        Out.WriteString("setting.retired");
                        Out.WriteString(Rm.Retired);
                        Out.WriteString("status.queue.Destruction.waiting");
                        Out.WriteString(Rm.WaitingDestruction);
                        Out.WriteString("status.queue.Order.waiting");
                        Out.WriteString(Rm.WaitingOrder);
                        Out.WriteString("status.realm.destruction.density");
                        Out.WriteString(Rm.DensityDestruction);
                        Out.WriteString("status.realm.order.density");
                        Out.WriteString(Rm.DensityOrder);
                        Out.WriteString("status.servertype.openrvr");
                        Out.WriteString(Rm.OpenRvr);
                        Out.WriteString("status.servertype.rp");
                        Out.WriteString(Rm.Rp);
                        Out.WriteString("status.status");
                        Out.WriteString(Rm.Status);
                    }
                }
                Out.WriteUInt32(0);

                return Out.ToArray();
            }
            catch (Exception e)
            {
                return new byte[0];
            }
        }
Example #15
0
        public PacketOut Crypt(PacketOut packet)
        {
            if (m_crypts.Count <= 0)
            {
                return(packet);
            }

            byte[] Packet = packet.ToArray();

            int Hpos = 0;

            Hpos += PacketOut.SizeLen;
            if (PacketOut.OpcodeInLen)
            {
                Hpos += packet.OpcodeLen;
            }

            byte[] Header  = new byte[Hpos];
            byte[] ToCrypt = new byte[(packet.Length - Hpos)];

            for (int i = 0; i < Hpos; ++i)
            {
                Header[i] = Packet[i];
            }

            for (int i = Hpos; i < Packet.Length; ++i)
            {
                ToCrypt[i - Hpos] = Packet[i];
            }

            try
            {
                foreach (KeyValuePair <ICryptHandler, CryptKey[]> Entry in m_crypts)
                {
                    ToCrypt = Entry.Key.Crypt(Entry.Value[0], ToCrypt);
                }
            }
            catch (Exception e)
            {
                Log.Error("Crypt Error : " + e.ToString());
                return(packet);
            }

            PacketOut Out = new PacketOut((byte)0);

            Out.Opcode    = packet.Opcode;
            Out.OpcodeLen = packet.OpcodeLen;
            Out.Position  = 0;
            Out.SetLength(0);

            byte[] Total = new byte[Header.Length + ToCrypt.Length];

            for (int i = 0; i < Total.Length; ++i)
            {
                if (i < Header.Length)
                {
                    Total[i] = Header[i];
                }
                else
                {
                    Total[i] = ToCrypt[i - Header.Length];
                }
            }

            Out.Write(Total, 0, Total.Length);

            return(Out);
        }
Example #16
0
 public byte[] Encrypt(PacketOut packet)
 {
     byte[] data = packet.ToArray();
     encryption.Process(data, 4, data.Length - 4);
     return(data);
 }
Example #17
0
        public static byte[] BuildCharactersList(int AccountId)
        {
            Log.Debug("BuildCharactersList", "AcocuntId = " + AccountId);
            Character[] Chars = GetAccountChar(AccountId)._Chars;
            int         count = 0;

            PacketOut Out = new PacketOut(0);

            Out.Position = 0;

            Character Char = null;

            for (int k = 0; k < MAX_SLOT; ++k)
            {
                Char = Chars[k];
                if (Char != null)
                {
                    List <Character_items> Items = CharMgr.GetItemChar(Char.CharacterId);

                    /****  char slot start ****/
                    Out.FillString(Char.Name, 48);          // name
                    Out.WriteByte(Char.Value[0].Level);     // Level
                    Out.WriteByte(Char.Career);             //career
                    Out.WriteByte(Char.Realm);              // realm
                    Out.WriteByte(Char.Sex);                // gender
                    Out.WriteUInt16R(Char.ModelId);         //model id
                    Out.WriteUInt16R(Char.Value[0].ZoneId); // zone id
                    Out.Fill(0, 12);                        // unk

                    Character_items Item = null;
                    for (UInt16 SlotId = 14; SlotId < 30; ++SlotId)
                    {
                        Item = Items.Find(item => item != null && item.SlotId == SlotId);

                        if (Item == null)
                        {
                            Out.WriteInt32(0);
                            Out.WriteInt32(0);
                        }
                        else
                        {
                            Out.WriteInt32((int)Item.ModelId);
                            Out.WriteUInt16R(0); // primary dye
                            Out.WriteUInt16R(0); // secondary dye
                        }
                    }
                    Out.WriteUInt32(0x00); // 0x00000000
                    for (int i = 0; i < 4; i++)
                    {
                        Out.WriteUInt32(0xFF000000);
                        Out.WriteUInt32(0x00);
                    }
                    Out.WriteUInt32(0xFF000000);

                    //weapons
                    for (UInt16 SlotId = 10; SlotId < 13; ++SlotId)
                    {
                        Item = Items.Find(item => item != null && item.SlotId == SlotId);

                        if (Item == null)
                        {
                            Out.WriteUInt32(0);
                        }
                        else
                        {
                            Out.WriteUInt16R((ushort)Item.ModelId);
                            Out.WriteUInt16(0);
                        }
                    }
                    Out.Fill(0, 8);
                    Out.WriteUInt16(0xFF00);
                    Out.WriteByte(0);
                    Out.WriteByte(Char.Race); // char slot position
                    Out.WriteUInt16(0x00);    //unk

                    /* //Traits [8 bytes]
                     * Out.WriteByte(1); //face
                     * Out.WriteByte(4); //jewel
                     * Out.WriteByte(4); //scar
                     * Out.WriteByte(0); //hair
                     * Out.WriteByte(3); //hair color
                     * Out.WriteByte(2); //skin color
                     * Out.WriteByte(0); //eye color
                     * Out.WriteByte(5); //metal color
                     */
                    Out.Write(Char.bTraits, 0, Char.bTraits.Length);

                    Out.Fill(0, 14); //unk

                    count++;
                }
            }

            for (int i = 0; i < (MAX_SLOT - count); ++i)
            {
                Out.Write(new byte[284], 0, 284);
            }

            return(Out.ToArray());
        }
Example #18
0
        public byte[] BuildCharacters()
        {
            PacketOut Out = new PacketOut((byte)0);

            Out.Position = 0;
            Out.WriteUInt16(GetCharacterCount());

            Character Char = null;

            for (int i = 0; i < MAX_CHARS; ++i)
            {
                Char = Chars[i];

                if (Char == null)
                {
                    Out.Write(new byte[280], 0, 280);
                }
                else
                {
                    Out.FillString(Char.Name, 48);
                    Out.WriteByte(Char.Info[0].Level);
                    Out.WriteByte(Char.Career);
                    Out.WriteByte(Char.Realm);
                    Out.WriteByte(Char.Sex);
                    Out.WriteByte(Char.ModelId);
                    Out.WriteUInt16(Char.Info[0].ZoneId);
                    Out.Write(new byte[5], 0, 5);

                    Character_items Item = null;
                    for (UInt16 SlotId = 14; SlotId < 30; ++SlotId)
                    {
                        Item = Char.GetItemInSlot(SlotId);
                        if (Item == null)
                        {
                            Out.WriteUInt16(0);
                        }
                        else
                        {
                            Out.WriteUInt16Reverse(Item.ModelId);
                        }

                        Out.Write(new byte[6], 0, 6);
                    }

                    Out.Write(new byte[6], 0, 6);

                    for (int j = 0; j < 5; ++j)
                    {
                        Out.Write(new byte[6], 0, 6);
                        Out.WriteUInt16(0xFF00);
                    }

                    for (UInt16 SlotId = 10; SlotId < 13; ++SlotId)
                    {
                        Item = Char.GetItemInSlot(SlotId);
                        Out.WriteUInt16(0);
                        if (Item == null)
                        {
                            Out.WriteUInt16(0);
                        }
                        else
                        {
                            Out.WriteUInt16Reverse(Item.ModelId);
                        }
                    }

                    Out.Write(new byte[10], 0, 10);
                    Out.WriteUInt16(0xFF00);
                    Out.WriteByte(0);
                    Out.WriteByte(Char.Race);
                    Out.WriteUInt16(0);
                    Out.Write(Char.bTraits, 0, Char.bTraits.Length);
                    Out.Write(new byte[10], 0, 10);
                }
            }
            return(Out.ToArray());
        }
Example #19
0
        public byte[] BuildRealms(uint sequence)
        {
            try
            {
                PacketOut Out = new PacketOut((byte)0);
                Out.Position = 0;

                Out.WriteUInt32(sequence);
                Out.WriteUInt16(0);
                lock (_Realms)
                {
                    Log.Info("BuildRealm", "Envoi de " + _Realms.Count + " royaumes");
                    Out.WriteUInt32((uint)_Realms.Count);

                    foreach (Realm Rm in _Realms.Values)
                    {
                        Out.WriteByte(Rm.RealmId);
                        Out.WriteByte((byte)(Rm.RpcId != 0 ? 1 : 0));
                        Out.WriteUInt32(1);
                        Out.WriteByte(Rm.RealmId);
                        Out.WriteByte(Rm.RealmId);
                        Out.WriteString("[" + Rm.Language + "] " + Rm.Name);
                        Out.WriteUInt32(19);
                        Out.WriteString("setting.allow_trials");
                        Out.WriteString(Rm.AllowTrials);
                        Out.WriteString("setting.charxferavailable");
                        Out.WriteString(Rm.CharfxerAvailable);
                        Out.WriteString("setting.language");
                        Out.WriteString(Rm.Language);
                        Out.WriteString("setting.legacy");
                        Out.WriteString(Rm.Legacy);
                        Out.WriteString("setting.manualbonus.realm.destruction");
                        Out.WriteString(Rm.BonusDestruction);
                        Out.WriteString("setting.manualbonus.realm.order");
                        Out.WriteString(Rm.BonusOrder);
                        Out.WriteString("setting.name");
                        Out.WriteString(Rm.Name);
                        Out.WriteString("setting.net.address");
                        Out.WriteString(Rm.Adresse);
                        Out.WriteString("setting.net.port");
                        Out.WriteString(Rm.Port.ToString());
                        Out.WriteString("setting.redirect");
                        Out.WriteString(Rm.Redirect);
                        Out.WriteString("setting.region");
                        Out.WriteString(Rm.Region);
                        Out.WriteString("setting.retired");
                        Out.WriteString(Rm.Retired);
                        Out.WriteString("status.queue.Destruction.waiting");
                        Out.WriteString(Rm.WaitingDestruction);
                        Out.WriteString("status.queue.Order.waiting");
                        Out.WriteString(Rm.WaitingOrder);
                        Out.WriteString("status.realm.destruction.density");
                        Out.WriteString(Rm.DensityDestruction);
                        Out.WriteString("status.realm.order.density");
                        Out.WriteString(Rm.DensityOrder);
                        Out.WriteString("status.servertype.openrvr");
                        Out.WriteString(Rm.OpenRvr);
                        Out.WriteString("status.servertype.rp");
                        Out.WriteString(Rm.Rp);
                        Out.WriteString("status.status");
                        Out.WriteString(Rm.Status);
                    }
                }
                Out.WriteUInt32(0);

                return(Out.ToArray());
            }
            catch (Exception e)
            {
                return(new byte[0]);
            }
        }
Example #20
0
        public static byte[] BuildCharacters(int AccountId)
        {
            Log.Debug("BuildCharacters", "AcocuntId = " + AccountId);

            Character[] Chars = GetAccountChar(AccountId)._Chars;
            UInt16      Count = 0;

            // On Compte le nombre de personnages existant du joueur
            for (UInt16 c = 0; c < Chars.Length; ++c)
            {
                if (Chars[c] != null)
                {
                    ++Count;
                }
            }

            PacketOut Out = new PacketOut(0);

            Out.Position = 0;

            Out.WriteByte(MAX_SLOT);
            Out.WriteUInt32(0xFF);
            Out.WriteByte(0x14);

            Character Char = null;

            for (int i = 0; i < MAX_SLOT; ++i)
            {
                Char = Chars[i];

                if (Char == null)
                {
                    Out.Fill(0, 284); // 284
                }
                else
                {
                    List <Character_item> Items = CharMgr.GetItemChar(Char.CharacterId);

                    Out.FillString(Char.Name, 48);
                    Out.WriteByte(Char.Value.Level);
                    Out.WriteByte(Char.Career);
                    Out.WriteByte(Char.Realm);
                    Out.WriteByte(Char.Sex);
                    Out.WriteByte(Char.ModelId);
                    Out.WriteUInt16(Char.Value.ZoneId);
                    Out.Fill(0, 5);

                    Character_item Item = null;
                    for (UInt16 SlotId = 14; SlotId < 30; ++SlotId)
                    {
                        Item = Items.Find(item => item != null && item.SlotId == SlotId);
                        if (Item == null)
                        {
                            Out.WriteUInt32(0);
                        }
                        else
                        {
                            Out.WriteUInt32R(Item.ModelId);
                        }

                        Out.Fill(0, 4);
                    }

                    Out.Fill(0, 6);

                    for (int j = 0; j < 5; ++j)
                    {
                        Out.Fill(0, 6);
                        Out.WriteUInt16(0xFF00);
                    }

                    for (UInt16 SlotId = 10; SlotId < 13; ++SlotId)
                    {
                        Item = Items.Find(item => item != null && item.SlotId == SlotId);
                        Out.WriteUInt16(0);
                        if (Item == null)
                        {
                            Out.WriteUInt16(0);
                        }
                        else
                        {
                            Out.WriteUInt16R((ushort)Item.ModelId);
                        }
                    }


                    Out.Fill(0, 10);
                    Out.WriteUInt16(0xFF00);
                    Out.WriteByte(0);
                    Out.WriteByte(Char.Race);
                    Out.WriteUInt16(0);
                    Out.Write(Char.bTraits, 0, Char.bTraits.Length);
                    Out.Fill(0, 14);// 272
                }
            }
            return(Out.ToArray());
        }
Example #21
0
 public byte[] Encrypt(PacketOut packet)
 {
     byte[] data = packet.ToArray();
     encryption.Process(data, 4, data.Length - 4);
     return data;
 }