示例#1
0
 // 0 = public
 // 1 = lime
 // 2 = pink
 // 3 = orange
 // 4 = purple
 // 5 = green
 // 6 = magenta
 // 7 = gray
 // 8 = yellow
 // 9 = light yellow
 // A = cyan
 // B = white background
 // C = red
 // D = ligt blue background
 public static byte[] ChatMessage(short type, string message)
 {
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.ChatMsg);
     packet.WriteShort(type);
     packet.WriteMapleString(message);
     return packet.ToArray();
 }
示例#2
0
 public static byte[] CheckDuplicatedID(string name, byte valid)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.CheckDuplicatedID);
     packet.WriteMapleString(name);
     packet.WriteByte(valid);
     return packet.ToArray();
 }
示例#3
0
 public static byte[] NpcLeaveField(Npc npc)
 {
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.NpcLeaveField);
     packet.WriteInt(npc.mObjectID);
     return packet.ToArray();
 }
示例#4
0
        public static byte[] WorldInformation(byte serverId, string worldName, byte flag, string eventmessage, short expPercent, short dropPercent, Dictionary<int, int> channels)
        {
            PacketWriter packet = new PacketWriter();
            packet.WriteOpcode(SendOps.WorldInformation);
            packet.WriteByte(serverId);
            packet.WriteMapleString(worldName);
            packet.WriteByte(flag); // 1 = event, 2 = new, 3 = hot time
            packet.WriteMapleString(eventmessage);
            packet.WriteShort(expPercent);
            packet.WriteShort(dropPercent);
            packet.WriteByte(0);
            packet.WriteByte(channels.Count);

            foreach (KeyValuePair<int, int> channel in channels)
            {
                packet.WriteMapleString(worldName + "-" + (channel.Key + 1));
                packet.WriteInt(channel.Value * 100); // max is 1000
                packet.WriteByte(0);
                packet.WriteByte(channel.Key);
                packet.WriteByte(0);
            }

            Dictionary<Point, string> chatBubbles = new Dictionary<Point, string>();
            chatBubbles.Add(new Point(0, 265), "왛라오! ㅇㅇ");
            chatBubbles.Add(new Point(500, 370), "ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ");
            packet.WriteShort(chatBubbles.Count);

            foreach (KeyValuePair<Point, string> pair in chatBubbles)
            {
                packet.WriteShort(pair.Key.X);
                packet.WriteShort(pair.Key.Y);
                packet.WriteMapleString(pair.Value);
            }

            packet.WriteInt(0);
            return packet.ToArray();
        }
示例#5
0
 public static byte[] SelectCharacter(byte primary, byte secondary, byte[] IP = null, ushort port = 0, int clientID = 0)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.SelectCharacter);
     packet.WriteByte(primary);
     packet.WriteByte(secondary);
     packet.WriteBytes(IP);
     packet.WriteShort(port);
     packet.WriteInt(clientID);
     packet.WriteByte(0);
     packet.WriteInt(0);
     packet.WriteByte(0);
     packet.WriteShort(0);
     packet.WriteShort(0);
     return packet.ToArray();
 }
示例#6
0
 public static byte[] NewCharacter(Character chr)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.CreateNewCharacter);
     packet.WriteByte(0);
     AddCharacterEntry(packet, chr, true, false);
     return packet.ToArray();
 }
示例#7
0
 public static byte[] LoginFailed(byte reason)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.CheckPassword);
     packet.WriteByte(reason);
     packet.WriteByte(0);
     packet.WriteInt(0);
     return packet.ToArray();
 }
示例#8
0
 public static byte[] KeepAlive()
 {
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.AliveReq);
     return packet.ToArray();
 }
示例#9
0
 public static byte[] GMBoard(string url)
 {
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.GMBoard);
     packet.WriteInt(Environment.TickCount); // actually object id of some sort
     packet.WriteMapleString(url);
     return packet.ToArray();
 }
示例#10
0
        public static byte[] UserEnterField(Character chr)
        {
            var packet = new PacketWriter();
            packet.WriteOpcode(SendOps.UserEnterField);
            packet.WriteInt(chr.mID);
            packet.WriteByte(chr.mPrimaryStats.Level);
            packet.WriteMapleString(chr.mName);
            packet.WriteMapleString(""); // ultimate explourer
            packet.WriteMapleString(chr.mGuild.Name);
            packet.WriteShort(chr.mGuild.EmblemBG);
            packet.WriteByte(chr.mGuild.EmblemBGColour);
            packet.WriteShort(chr.mGuild.Emblem);
            packet.WriteByte(chr.mGuild.EmblemColour);
            int[] buffs = new int[8];
            foreach (Buff buff in chr.mBuffs)
                buffs[buff.Position] |= buff.BuffID;
            //foreach (int i in buffs)
            //    packet.WriteInt(i); // buffer 32
            packet.WriteHexString("00 00 00 FE 00 00 A0 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 ");
            //buff values

            packet.WriteInt(-1); // end buff values reading ?

            //packet.WriteByte(0);
            //packet.WriteByte(0);
            //packet.WriteByte(0);
            //packet.WriteByte(0);

            //packet.WriteBytes(new byte[4]);
            //packet.WriteBytes(new byte[4]);
            //packet.WriteByte(1);

            packet.WriteHexString("00 00 00 00 00 00 00 00 00 00 00 00 01");

            packet.WriteInt(Environment.TickCount);
            packet.WriteShort(0);
            packet.WriteBytes(new byte[4]);
            packet.WriteBytes(new byte[4]);
            packet.WriteByte(1);
            packet.WriteInt(Environment.TickCount);
            packet.WriteShort(0);
            packet.WriteBytes(new byte[4]);
            packet.WriteBytes(new byte[4]);
            packet.WriteByte(1);
            packet.WriteInt(Environment.TickCount);
            packet.WriteShort(0);
            packet.WriteBytes(new byte[4]);
            packet.WriteBytes(new byte[4]);
            packet.WriteByte(1);
            packet.WriteInt(Environment.TickCount);
            packet.WriteBytes(new byte[4]);
            packet.WriteBytes(new byte[4]);
            packet.WriteByte(1);
            packet.WriteInt(Environment.TickCount);
            packet.WriteByte(1);
            packet.WriteInt(0);
            packet.WriteShort(0);
            packet.WriteBytes(new byte[4]);
            packet.WriteBytes(new byte[4]);
            packet.WriteByte(1);
            packet.WriteInt(Environment.TickCount);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteBytes(new byte[4]);
            packet.WriteBytes(new byte[4]);
            packet.WriteByte(1);
            packet.WriteInt(Environment.TickCount);
            packet.WriteShort(0);

            packet.WriteShort(chr.mPrimaryStats.Job);
            packet.WriteShort(0);
            Global.AddAvatarData(packet, chr);
            packet.WriteInt(0);
            packet.WriteBytes(new byte[12]);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteInt(0);

            packet.WriteShort(chr.mPosition.X);
            packet.WriteShort(chr.mPosition.Y);
            packet.WriteByte(chr.mStance); // chr.mStance
            packet.WriteShort(chr.mFoothold);

            packet.WriteByte(0);
            packet.WriteByte(0);

            packet.WriteByte(1);
            packet.WriteByte(0);

            packet.WriteInt(1); // mount level
            packet.WriteInt(0); // mount exp
            packet.WriteInt(0); // mount fatigue

            packet.WriteByte(0); // ``Announce Box''

            packet.WriteByte(0); // Chalk Board

            Global.AddRingData(packet, chr);
            Global.AddRingData(packet, chr);
            Global.AddRingData(packet, chr);

            packet.WriteByte(0); // berserk
            packet.WriteInt(0);
            packet.WriteByte(0); // new year cards
            packet.WriteInt(0);
            return packet.ToArray();
        }
示例#11
0
 public static byte[] PublicChatMessage(int cidfrom, string msg, bool whitebg, bool hide)
 {
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.PublicChatMsg);
     packet.WriteInt(cidfrom);
     packet.WriteBool(whitebg);
     packet.WriteMapleString(msg);
     packet.WriteBool(hide);
     return packet.ToArray();
 }
示例#12
0
 public static byte[] PlayerLeaveField(int cid)
 {
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.PlayerLeaveField);
     packet.WriteInt(cid);
     return packet.ToArray();
 }
示例#13
0
 public static byte[] UpdatePrimaryStat(Dictionary<PrimaryStat, int> stats, bool itemReaction = false, Character chr = null)
 {
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.SetTemporaryStat);
     packet.WriteBool(itemReaction);
     long mask = 0;
     foreach (var stat in stats)
         mask |= ((long)stat.Key);
     packet.WriteLong(mask);
     foreach (var stat in stats)
         switch (stat.Key)
         {
             case PrimaryStat.Null:
                 break;
             default:
                 packet.WriteInt(stat.Value);
                 break;
         }
     if (mask == 0 && !itemReaction)
         packet.WriteByte(1);
     packet.WriteByte(0);
     packet.WriteByte(0);
     return packet.ToArray();
 }
示例#14
0
        public static byte[] SetField(Client c, bool connecting = false)
        {
            var packet = new PacketWriter();
            packet.WriteOpcode(SendOps.SetField);
            packet.WriteShort(2);
            packet.WriteInt(1);
            packet.WriteInt(0);
            packet.WriteInt(2);
            packet.WriteInt(0);
            packet.WriteInt(Program.mServer.ServerId);
            packet.WriteByte(0);
            packet.WriteInt(0);
            packet.WriteByte(1);
            packet.WriteInt(0);
            packet.WriteBool(connecting);
            if (!connecting)
            {
                packet.WriteInt(c.mCharacter.mField);
                packet.WriteByte(c.mCharacter.mFieldPosition);
                packet.WriteInt(c.mCharacter.mPrimaryStats.HP);
                packet.WriteByte(0);
                packet.WriteLong(c.mAccount.SessionID);
                packet.WriteInt(100);
                packet.WriteByte(0);
                packet.WriteByte(0);
                return packet.ToArray();
            }
            packet.WriteShort(0);
            packet.WriteInt(unchecked((int)(0xF05A5CB3))); // rand
            packet.WriteInt(unchecked((int)(0xF05A5CB3))); // rand
            packet.WriteInt(unchecked((int)(0xF05A5CB3))); // rand

            ulong flagmask = (unchecked((ulong)-1));
            flagmask = (flagmask & 0xFFFFFFFFF0FFFFFF) | ((ulong)0x01 << 24);
            flagmask = (flagmask & 0xFFFFFFF0FFFFFFFF) | ((ulong)0x0D << 32);
            flagmask = (flagmask & 0x0FFFFFFFFFFFFFFF) | ((ulong)0x01 << 60);
            packet.WriteLong(unchecked((long)flagmask)); // flags?

            packet.WriteByte(0);
            packet.WriteByte(0);
            packet.WriteInt(0);
            packet.WriteByte(0);

            Global.AddCharacterData(packet, c.mCharacter);
            packet.WriteByte(0x0A); // buddylist cap
            packet.WriteByte(0); // blessing of fairy
            packet.WriteByte(0); // blessing of empress
            packet.WriteByte(0); // ultimate explorer
            Global.AddInventoryData(packet, c.mCharacter);
            Global.AddSkillData(packet, c.mCharacter);

            Global.AddQuestData(packet, c.mCharacter);
            //Global.AddRingData(packet, c.mCharacter);//01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00
            packet.WriteShort(0); // rings...something like that ?
            packet.WriteShort(0); // rings...something like that ?
            packet.WriteShort(0); // rings...something like that ?
            packet.WriteShort(0); // rings...something like that ?
            //FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B FF C9 9A 3B
            Global.AddRockData(packet, c.mCharacter);
            //00 00 00 00 00 00 00 FF FF FF FF
            Global.AddMonsterBookData(packet, c.mCharacter);
            packet.WriteShort(0);
            packet.WriteShort(0);
            //AddPartyQuestData(packet, c.mCharacter);
            packet.WriteShort(0);
            packet.WriteShort(0);
            packet.WriteShort(0);
            for (int i = 0; i < 17; ++i)
                packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteByte(1);
            packet.WriteShort(0);
            packet.WriteShort(0);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteInt(0);
            packet.WriteLong(0x1CD6E06D3A75370);
            packet.WriteInt(100);
            packet.WriteByte(0);
            packet.WriteByte(1);

            return packet.ToArray();
        }
示例#15
0
 public static byte[] CheckUserLimit(int mod0, int mod1)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.CheckUserLimit);
     packet.WriteByte(mod0); // popup         0 = none, 1 = high, 2 =max
     packet.WriteByte(mod1);
     return packet.ToArray();
 }
示例#16
0
 public static byte[] DeleteCharacter(int cid, int mode)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.DeleteCharacter);
     packet.WriteInt(cid);
     packet.WriteByte(mode); // 0 = okay, 12 = invalid birthday, 14 = invalid pic
     return packet.ToArray();
 }
示例#17
0
 //public static byte[] UserMove(int cid, Point start, List<IMovePath> movement)
 //{
 //    var packet = new PacketWriter();
 //    packet.WriteOpcode(SendOps.UserMove);
 //    packet.WriteInt(cid);
 //    packet.WritePos(start);
 //    packet.WriteBytes(new byte[4]);
 //    packet.WriteByte(movement.Count);
 //    foreach (IMovePath move in movement)
 //        move.Encode(packet);
 //    return packet.ToArray();
 //}
 public static byte[] UserMove(int cid, Point start, byte[] movement)
 {
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.UserMove);
     packet.WriteInt(cid);
     packet.WritePos(start);
     packet.WriteBytes(movement);
     return packet.ToArray();
 }
示例#18
0
 public static byte[] LastConnectedWorld(int world)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.LatestConnectedWorld);
     packet.WriteInt(world);
     return packet.ToArray();
 }
示例#19
0
 public static byte[] BadPic()
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.CheckSPW);
     packet.WriteByte(0);
     return packet.ToArray();
 }
示例#20
0
 public static byte[] LoginSuccess(Client c)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.CheckPassword);
     packet.WriteByte(0);
     packet.WriteByte(0);
     packet.WriteInt(0);
     packet.WriteInt(c.AccountId);
     packet.WriteByte(0); // Gender
     packet.WriteByte(c.Admin);
     packet.WriteShort(0); // GM Mask
     packet.WriteByte(0);
     packet.WriteMapleString(c.Username);
     packet.WriteByte(3);
     packet.WriteByte(c.TradeBlock);
     packet.WriteLong(c.TradeBlockExpiration);
     packet.WriteByte(1);
     packet.WriteLong(0); // Creation date. That's not important!
     packet.WriteInt(0x0C); // Tooltip bubble at World/Channel select
     packet.WriteByte(1); // Use SessionID
     packet.WriteByte(1);
     packet.WriteLong(c.SessionID);
     return packet.ToArray();
 }
示例#21
0
 public static byte[] Blocked(byte reason, long time)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.CheckPassword);
     packet.WriteByte(2);
     packet.WriteByte(0);
     packet.WriteInt(0);
     packet.WriteByte(reason);
     packet.WriteLong(time);
     return packet.ToArray();
 }
示例#22
0
        public static byte[] RecommendWorldMessage()
        {
            PacketWriter packet = new PacketWriter();
            packet.WriteOpcode(SendOps.RecommendWorldMessage);
            Dictionary<int, string> messages = new Dictionary<int, string>();
            messages.Add(0, "There is only one world, so I'm not sure why you are clicking this button.\r\n\r\n설치 겐투♥");

            packet.WriteByte(messages.Count);
            foreach (KeyValuePair<int, string> pair in messages)
            {
                packet.WriteInt(pair.Key);
                packet.WriteMapleString(pair.Value);
            }
            return packet.ToArray();
        }
示例#23
0
 public static byte[] BroadcastMessage(byte type, string message)
 {
     int channel = 0;
     bool megaEar = true;
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.BroadcastMsg);
     packet.WriteByte(type);
     if (type == 4)
         packet.WriteByte(1);
     if (type != 23 && type != 24)
         packet.WriteMapleString(message);
     switch (type)
     {
         case 3: // Super Megaphone
         case 22: // Skull Megaphone
         case 25:
         case 26:
             packet.WriteByte(channel - 1);
             packet.WriteByte(megaEar ? 1 : 0);
             break;
         case 9: // Like Item Megaphone (Without Item)
             packet.WriteByte(channel - 1);
             break;
         case 12: // Weather Effect
             packet.WriteInt(channel); // item id
             break;
         case 6:
         case 11:
         case 20:
             packet.WriteInt(channel >= 1000000 && channel < 6000000 ? channel : 0); // Item Id
             //E.G. All new EXP coupon {Ruby EXP Coupon} is now available in the Cash Shop!
             break;
         case 24:
             packet.WriteShort(0); // ?
             break;
     }
     return packet.ToArray();
 }
示例#24
0
        public static byte[] ViewAllCharacters(List<Character> characters)
        {
            PacketWriter packet = new PacketWriter();
            packet.WriteOpcode(SendOps.ViewAllChar);

            packet.WriteByte(0x03);
            packet.WriteBool(false);
            return packet.ToArray();
            /*
            if (characters.Count < 1)
            {
                packet.WriteByte(0x04);
                return packet.ToArray();
            }
            packet.WriteByte(0x00);
            packet.WriteByte(0x00); // world id
            packet.WriteByte(characters.Count);
            for (int i = 0; i < characters.Count; ++i)
            {
                AddCharacterEntry(packet, characters[i], false, true);
            }
            packet.WriteByte(0x01); // pic
            return packet.ToArray();*/
        }
示例#25
0
 public static byte[] CharacterLoadout(User.Client client)
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.WorldSelect); //  0B 00 00 00 01 00 03 00 00 00 00 00 00 00 D0 5E CD 01 D0 CF E2 DD
     packet.WriteByte(0);
     packet.WriteByte(client.Characters.Count);
     foreach (Character chr in client.Characters)
     {
        AddCharacterEntry(packet, chr);
     }
     //packet.WriteHexString("6E B9 79 00 6D 65 72 63 65 64 65 73 65 77 00 00 00 00 0C 4D 50 00 00 AD 82 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 01 D2 07 0C 00 05 00 04 00 04 00 32 00 00 00 32 00 00 00 05 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 C9 3F 36 00 00 00 00 00 00 00 00 05 A2 ED 77 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 00 00 00 00 02 00 00 00 00 68 95 CC 02 F0 FB D7 0D 0B 3B 37 4F 01 00 40 E0 FD 00 0C 4D 50 00 00 D2 07 00 00 00 AD 82 00 00 05 50 06 10 00 07 87 5D 10 00 0B 76 39 17 00 37 20 E2 11 00 FF FF 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 01 22 7F 27 00 BB 05 00 00 94 4E 00 00 39 00 00 00 6F B9 79 00 6D 65 72 63 65 64 65 73 65 75 00 00 00 00 0C 45 50 00 00 AD 82 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 01 D2 07 0C 00 05 00 04 00 04 00 32 00 00 00 32 00 00 00 05 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 C9 3F 36 00 DB 01 00 00 00 00 00 05 A2 ED 77 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 00 00 00 00 02 00 00 00 00 00 00 00 00 58 04 00 00 BD 7D 20 CD 01 D0 54 06 40 00 0C 45 50 00 00 D2 07 00 00 00 AD 82 00 00 05 50 06 10 00 07 87 5D 10 00 0B 76 39 17 00 37 20 E2 11 00 FF FF 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 01 22 7F 27 00 BB 05 00 00 94 4E 00 00 39 00 00 00");
     packet.WriteByte(1); // second password set
     packet.WriteByte(0); // ?
     packet.WriteInt(3); // character slots
     packet.WriteInt(0); // ``click-here'' cash shop slots. overwrites free character slots, however the location vector is wrong.
     return packet.ToArray();
 }
示例#26
0
 public static byte[] WorldInformationEnd()
 {
     PacketWriter packet = new PacketWriter();
     packet.WriteOpcode(SendOps.WorldInformation);
     packet.WriteByte(0xFF);
     return packet.ToArray();
 }
示例#27
0
 public static byte[] NpcEnterField(Npc npc, bool show = true)
 {
     var packet = new PacketWriter();
     packet.WriteOpcode(SendOps.NpcEnterField);
     packet.WriteInt(npc.mObjectID);
     packet.WriteInt(npc.mID);
     packet.WriteShort(npc.mX);
     packet.WriteShort(npc.mCy);
     packet.WriteByte(Math.Abs(npc.mF - 1));
     packet.WriteShort(npc.mFh);
     packet.WriteShort(npc.mRx0);
     packet.WriteShort(npc.mRx1);
     packet.WriteBool(show); // visible
     return packet.ToArray();
 }