Beispiel #1
0
        public static Packet Create(Party party)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY);

            pWriter.WriteEnum(PartyPacketMode.Create);
            pWriter.WriteByte(1);
            pWriter.WriteInt(party.Id);
            pWriter.WriteLong(party.Leader.CharacterId);
            pWriter.WriteByte((byte)party.Members.Count);

            foreach (Player member in party.Members)
            {
                pWriter.WriteByte(0);
                CharacterListPacket.WriteCharacter(member, pWriter);
                pWriter.WriteInt(1); // dungeon info from player. Dungeon count (loop every dungeon)
                pWriter.WriteInt();  // dungeonID
                pWriter.WriteByte(); // dungeon clear count
            }

            pWriter.WriteByte();
            pWriter.WriteInt();
            pWriter.WriteByte();
            pWriter.WriteByte();
            pWriter.WriteByte();
            return(pWriter);
        }
Beispiel #2
0
        public static Packet Join(Player player)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY);

            pWriter.WriteEnum(PartyPacketMode.Join);
            CharacterListPacket.WriteCharacter(player, pWriter);
            pWriter.WriteInt();
            JobPacket.WriteSkills(pWriter, player);
            pWriter.WriteLong();
            return(pWriter);
        }
Beispiel #3
0
        public static Packet UpdateGroupMembers(Player member, Player invitee, GroupChat groupChat)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.GROUP_CHAT);

            pWriter.WriteEnum(GroupChatPacketMode.UpdateGroupMembers);
            pWriter.WriteInt(groupChat.Id);
            pWriter.WriteUnicodeString(member.Name);
            pWriter.WriteByte(0x1);
            CharacterListPacket.WriteCharacter(invitee, pWriter);
            return(pWriter);
        }
        public static Packet UpdatePlayer(Player player)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY);

            pWriter.WriteEnum(PartyPacketMode.UpdatePlayer);
            pWriter.WriteLong(player.CharacterId);

            CharacterListPacket.WriteCharacter(player, pWriter);
            WritePartyDungeonInfo(pWriter);
            return(pWriter);
        }
        public static Packet Join(Player player)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY)
                                   .WriteByte(0x2); //Add player to party UI

            CharacterListPacket.WriteCharacter(player, pWriter);
            pWriter.WriteInt();
            WriteSkills(pWriter, player);
            pWriter.WriteLong();
            return(pWriter);
        }
Beispiel #6
0
        public static Packet UpdatePlayer(Player player)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY)
                                   .WriteByte((byte)PartyPacketMode.UpdatePlayer)
                                   .WriteLong(player.CharacterId);

            CharacterListPacket.WriteCharacter(player, pWriter);
            pWriter.WriteInt();
            JobPacket.WriteSkills(pWriter, player);
            pWriter.WriteLong();
            return(pWriter);
        }
Beispiel #7
0
        public static Packet LoginNotice(Player player)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY);

            pWriter.WriteEnum(PartyPacketMode.LoginNotice);
            CharacterListPacket.WriteCharacter(player, pWriter);
            pWriter.WriteLong();
            pWriter.WriteInt();
            pWriter.WriteShort();
            pWriter.WriteByte();
            return(pWriter);
        }
        public static Packet UpdatePlayer(Player player)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY)
                                   .WriteByte(0xD) //Pretty sure this is the party update function, call after Join to update their location, afk status, etc.
                                   .WriteLong(player.CharacterId);

            CharacterListPacket.WriteCharacter(player, pWriter);
            pWriter.WriteInt();
            WriteSkills(pWriter, player);
            pWriter.WriteLong();
            return(pWriter);
        }
Beispiel #9
0
        public static Packet UpdatePlayer(Player player)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY);

            pWriter.WriteEnum(PartyPacketMode.UpdatePlayer);
            pWriter.WriteLong(player.CharacterId);

            CharacterListPacket.WriteCharacter(player, pWriter);
            pWriter.WriteInt(1); // dungeon info from player. Dungeon count (loop every dungeon)
            pWriter.WriteInt();  // dungeonID
            pWriter.WriteByte(); // dungeon clear count
            return(pWriter);
        }
Beispiel #10
0
        public static Packet Update(GroupChat groupChat)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.GROUP_CHAT);

            pWriter.WriteEnum(GroupChatPacketMode.Update);
            pWriter.WriteInt(groupChat.Id);
            pWriter.WriteByte((byte)groupChat.Members.Count);
            foreach (Player member in groupChat.Members)
            {
                pWriter.WriteByte(0x1);
                CharacterListPacket.WriteCharacter(member, pWriter);
            }
            return(pWriter);
        }
        public static Packet Create(Player leader)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY);

            CreatePartyHeader(leader, pWriter, 1);

            CharacterListPacket.WriteCharacter(leader, pWriter);
            pWriter.WriteLong();
            pWriter.WriteInt();
            pWriter.WriteShort();
            pWriter.WriteByte();
            JobPacket.WriteSkills(pWriter, leader);
            pWriter.WriteLong();
            return(pWriter);
        }
Beispiel #12
0
        public static Packet CreateExisting(Player leader, List <Player> members)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY);

            CreatePartyHeader(leader, pWriter, (short)members.Count);

            foreach (Player member in members)
            {
                CharacterListPacket.WriteCharacter(member, pWriter);
                pWriter.WriteLong();
                pWriter.WriteInt();
                pWriter.WriteShort();
                pWriter.WriteByte();
                JobPacket.WriteSkills(pWriter, member);
            }
            pWriter.WriteLong();

            return(pWriter);
        }
        public static Packet Create(Party party, bool joinNotice)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.PARTY);

            pWriter.WriteEnum(PartyPacketMode.Create);
            pWriter.WriteBool(joinNotice);
            pWriter.WriteInt(party.Id);
            pWriter.WriteLong(party.Leader.CharacterId);
            pWriter.WriteByte((byte)party.Members.Count);

            foreach (Player member in party.Members)
            {
                pWriter.WriteBool(!member.Session.Connected());
                CharacterListPacket.WriteCharacter(member, pWriter);
                WritePartyDungeonInfo(pWriter);
            }

            pWriter.WriteByte(); // is in dungeon? might be a bool.
            pWriter.WriteInt();  //dungeonid for "enter dungeon"
            pWriter.WriteByte();
            pWriter.WriteByte();
            pWriter.WriteByte();
            return(pWriter);
        }
Beispiel #14
0
        public static Packet AddPlayer(IFieldObject <Player> fieldPlayer)
        {
            Player       player  = fieldPlayer.Value;
            PacketWriter pWriter = PacketWriter.Of(SendOp.FIELD_ADD_USER);

            pWriter.WriteInt(fieldPlayer.ObjectId);
            CharacterListPacket.WriteCharacter(player, pWriter);

            // Skills
            pWriter.WriteEnum(player.JobCode);
            pWriter.WriteByte(1);
            pWriter.WriteEnum(player.Job);
            JobPacket.WriteSkills(pWriter, player);

            // Coords
            pWriter.Write(fieldPlayer.Coord);
            pWriter.Write(fieldPlayer.Rotation);
            pWriter.WriteByte();

            // Stats
            StatPacket.WriteFieldStats(pWriter, player.Stats);

            pWriter.WriteBool(player.CombatCTS != null);
            pWriter.WriteBool(player.Guide?.Value.Type == 0);
            pWriter.WriteInt();
            pWriter.WriteLong();
            pWriter.WriteLong();

            // ???
            bool flagA = false;

            pWriter.WriteBool(flagA);
            if (flagA)
            {
                pWriter.WriteLong();
                pWriter.WriteUnicodeString("");
                pWriter.WriteUnicodeString("");
                pWriter.WriteByte();
                pWriter.WriteInt();
                pWriter.WriteLong();
                pWriter.WriteLong();
                pWriter.WriteUnicodeString("");
                pWriter.WriteLong();
                pWriter.WriteUnicodeString("");
                pWriter.WriteByte();
            }

            pWriter.WriteInt(1);
            pWriter.Write(player.SkinColor);
            pWriter.WriteUnicodeString(player.ProfileUrl);

            pWriter.WriteBool(player.Mount != null);
            if (player.Mount != null)
            {
                pWriter.WriteMount(player.Mount);

                // Unknown
                byte countA = 0;
                pWriter.WriteByte(countA);
                for (int i = 0; i < countA; i++)
                {
                    pWriter.WriteInt();
                    pWriter.WriteByte();
                }
            }
            pWriter.WriteInt();
            pWriter.WriteLong(DateTimeOffset.UtcNow.ToUnixTimeSeconds()); // some timestamp
            pWriter.WriteInt();
            pWriter.WriteInt();

            bool appearance = true;

            pWriter.WriteBool(appearance);
            if (appearance)
            {
                PacketWriter appearanceBuffer = new PacketWriter();
                CharacterListPacket.WriteEquipsAndCosmetics(appearanceBuffer, player);

                appearanceBuffer.WriteByte(1);
                appearanceBuffer.WriteLong();
                appearanceBuffer.WriteLong();
                appearanceBuffer.WriteByte();

                pWriter.WriteDeflated(appearanceBuffer.Buffer, 0, appearanceBuffer.Length);
            }
            else
            {
                pWriter.WriteDeflated(new byte[1], 0, 1); // Empty buffer
            }

            bool unusuedBuffer = false;

            pWriter.WriteBool(unusuedBuffer);
            if (unusuedBuffer)
            {
                // kms2 outfits? Unused buffer for gms2
            }
            else
            {
                pWriter.WriteDeflated(new byte[1], 0, 1); // Empty buffer
            }

            List <Item> badges = player.Inventory.Badges.Where(x => x != null).ToList();

            pWriter.WriteBool(badges.Count > 0);
            if (badges.Count > 0)
            {
                PacketWriter badgesBuffer = new PacketWriter();
                CharacterListPacket.WriteBadges(badgesBuffer, player);
                pWriter.WriteDeflated(badgesBuffer.Buffer, 0, badgesBuffer.Length);
            }
            else
            {
                pWriter.WriteDeflated(new byte[1], 0, 1); // Empty buffer
            }

            JobPacket.WritePassiveSkills(pWriter, fieldPlayer);

            pWriter.WriteInt();
            pWriter.WriteInt();
            pWriter.WriteByte();
            pWriter.WriteInt();
            pWriter.WriteByte();
            pWriter.WriteByte();
            pWriter.WriteInt(player.TitleId);
            pWriter.WriteShort(player.InsigniaId);
            pWriter.WriteByte();
            pWriter.WriteInt();
            pWriter.WriteByte();
            pWriter.WriteLong(); // Another timestamp
            pWriter.WriteInt(int.MaxValue);
            pWriter.WriteByte();
            pWriter.WriteInt(); // MushkingRoyale taileffect kill count
            pWriter.WriteInt();
            pWriter.WriteShort();

            return(pWriter);
        }
Beispiel #15
0
        public static Packet AddPlayer(IFieldObject <Player> fieldPlayer)
        {
            Player       player  = fieldPlayer.Value;
            PacketWriter pWriter = PacketWriter.Of(SendOp.FIELD_ADD_USER);

            pWriter.WriteInt(fieldPlayer.ObjectId);
            CharacterListPacket.WriteCharacter(player, pWriter);

            // Skills
            pWriter.WriteEnum(player.JobCode);
            pWriter.WriteByte(1);
            pWriter.WriteEnum(player.Job);
            JobPacket.WriteSkills(pWriter, player);

            // Coords
            pWriter.Write(fieldPlayer.Coord);
            pWriter.Write(player.Rotation);
            pWriter.WriteByte();

            // Stats
            StatPacket.WriteTotalStats(pWriter, ref player.Stats);

            pWriter.WriteByte();
            pWriter.WriteByte();
            pWriter.WriteInt();
            pWriter.WriteLong();
            pWriter.WriteLong();

            // ???
            bool flagA = false;

            pWriter.WriteBool(flagA);
            if (flagA)
            {
                pWriter.WriteLong();
                pWriter.WriteUnicodeString("");
                pWriter.WriteUnicodeString("");
                pWriter.WriteByte();
                pWriter.WriteInt();
                pWriter.WriteLong();
                pWriter.WriteLong();
                pWriter.WriteUnicodeString("");
                pWriter.WriteLong();
                pWriter.WriteUnicodeString("");
                pWriter.WriteByte();
            }

            pWriter.WriteInt(1);
            pWriter.Write <SkinColor>(player.SkinColor);
            pWriter.WriteUnicodeString(player.ProfileUrl); // Profile URL

            pWriter.WriteBool(player.Mount != null);
            if (player.Mount != null)
            {
                pWriter.WriteMount(player.Mount);

                // Unknown
                byte countA = 0;
                pWriter.WriteByte(countA);
                for (int i = 0; i < countA; i++)
                {
                    pWriter.WriteInt();
                    pWriter.WriteByte();
                }
            }
            pWriter.WriteInt();
            pWriter.WriteLong(DateTimeOffset.UtcNow.ToUnixTimeSeconds()); // some timestamp
            pWriter.WriteInt();
            pWriter.WriteInt();

            // This seems to be character appearance encoded as a blob
            pWriter.WriteBool(true);
            if (true)
            {
                PacketWriter appearanceBuffer = new PacketWriter();
                appearanceBuffer.WriteByte((byte)player.Equips.Count);  // num equips
                foreach ((ItemSlot slot, Item equip) in player.Equips)
                {
                    CharacterListPacket.WriteEquip(slot, equip, appearanceBuffer);
                }

                appearanceBuffer.WriteByte(1);
                appearanceBuffer.WriteLong();
                appearanceBuffer.WriteLong();
                appearanceBuffer.WriteByte();

                pWriter.WriteDeflated(appearanceBuffer.Buffer, 0, appearanceBuffer.Length);
                pWriter.WriteByte();                      // Separator?
                pWriter.WriteDeflated(new byte[1], 0, 1); // Unknown
                pWriter.WriteByte();                      // Separator?
                pWriter.WriteDeflated(new byte[1], 0, 1); // Badge appearances

                JobPacket.WritePassiveSkills(pWriter, fieldPlayer);

                pWriter.WriteInt();
                pWriter.WriteInt();
                pWriter.WriteByte();
                pWriter.WriteInt();
                pWriter.WriteByte();
                pWriter.WriteByte();
                pWriter.WriteInt(player.TitleId);
                pWriter.WriteShort(player.InsigniaId);
                pWriter.WriteByte();
                pWriter.WriteInt();
                pWriter.WriteByte();
                pWriter.WriteLong(); // Another timestamp
                pWriter.WriteInt(int.MaxValue);
                pWriter.WriteByte();
                pWriter.WriteInt();
                pWriter.WriteInt();
                pWriter.WriteShort();
            }
            else
            {
                //pWriter.WriteInt(); commented out to remove warning
            }

            return(pWriter);
        }
        public static Packet WriteCharacterInfo(long characterId, Player player)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.CHARACTER_INFO);

            pWriter.WriteLong(characterId);
            pWriter.WriteBool(player != null);
            if (player == null)
            {
                return(pWriter);
            }
            pWriter.WriteLong(); // unknown
            pWriter.WriteLong(player.CharacterId);
            pWriter.WriteLong(DateTimeOffset.UtcNow.ToUnixTimeSeconds());

            PacketWriter characterBuffer = new PacketWriter();

            characterBuffer.WriteLong(player.AccountId);
            characterBuffer.WriteLong(player.CharacterId);
            characterBuffer.WriteUnicodeString(player.Name);
            characterBuffer.WriteShort(player.Levels.Level);
            characterBuffer.WriteEnum(player.Job);
            characterBuffer.WriteEnum(player.JobCode);
            characterBuffer.WriteInt(player.Gender);
            characterBuffer.WriteInt(player.Levels.PrestigeLevel);
            characterBuffer.WriteByte();
            WriteStats(characterBuffer, player);

            // Unknown data
            characterBuffer.WriteZero(1300);

            characterBuffer.WriteUnicodeString(player.ProfileUrl);
            characterBuffer.WriteUnicodeString(player.Motto);

            if (player.Guild == null)
            {
                characterBuffer.WriteUnicodeString(string.Empty);
                characterBuffer.WriteUnicodeString(string.Empty);
            }
            else
            {
                characterBuffer.WriteUnicodeString(player.Guild.Name);
                characterBuffer.WriteUnicodeString(player.Guild.Ranks[player.GuildMember.Rank].Name);
            }

            characterBuffer.WriteUnicodeString(player.Account.Home?.Name ?? string.Empty);
            characterBuffer.WriteZero(12);
            characterBuffer.WriteInt(player.TitleId);
            characterBuffer.WriteInt(player.Titles.Count);
            foreach (int titleId in player.Titles)
            {
                characterBuffer.WriteInt(titleId);
            }
            characterBuffer.WriteInt(player.TrophyCount.Sum());
            characterBuffer.WriteInt();  // gear score
            characterBuffer.WriteLong(); // timestamp
            characterBuffer.WriteLong();
            characterBuffer.Write(player.SkinColor);
            characterBuffer.WriteZero(14);

            pWriter.WriteInt(characterBuffer.Length);
            pWriter.Write(characterBuffer.ToArray());

            PacketWriter appearanceBuffer = new PacketWriter();

            CharacterListPacket.WriteEquipsAndCosmetics(appearanceBuffer, player);

            appearanceBuffer.WriteByte(1);
            appearanceBuffer.WriteLong();
            appearanceBuffer.WriteLong();
            appearanceBuffer.WriteByte();

            pWriter.WriteInt(appearanceBuffer.Length);
            pWriter.Write(appearanceBuffer.ToArray());

            PacketWriter badgeBuffer = new PacketWriter();

            CharacterListPacket.WriteBadges(badgeBuffer, player);

            pWriter.WriteInt(badgeBuffer.Length);
            pWriter.Write(badgeBuffer.ToArray());

            return(pWriter);
        }
Beispiel #17
0
        public static Packet AddPlayer(IFieldObject <Player> fieldPlayer)
        {
            Player player  = fieldPlayer.Value;
            var    pWriter = PacketWriter.Of(SendOp.FIELD_ADD_USER);

            pWriter.WriteInt(fieldPlayer.ObjectId);
            CharacterListPacket.WriteCharacter(player, pWriter);

            // Possible skill related?
            pWriter.WriteInt((int)player.jobCode);
            pWriter.WriteByte(1);
            pWriter.WriteInt((int)player.jobType);
            WriteSkills(pWriter);

            pWriter.WriteByte();
            pWriter.WriteByte();
            pWriter.Write <CoordF>(fieldPlayer.Coord);
            pWriter.Write <CoordF>(player.UnknownCoord);
            pWriter.WriteByte();

            pWriter.WriteTotalStats(ref player.Stats);
            pWriter.WriteByte();
            pWriter.WriteByte();
            pWriter.WriteInt();
            pWriter.WriteLong();
            pWriter.WriteLong();

            // ???
            bool flagA = false;

            pWriter.WriteBool(flagA);
            if (flagA)
            {
                pWriter.WriteLong();
                pWriter.WriteUnicodeString("");
                pWriter.WriteUnicodeString("");
                pWriter.WriteByte();
                pWriter.WriteInt();
                pWriter.WriteLong();
                pWriter.WriteLong();
                pWriter.WriteUnicodeString("");
                pWriter.WriteLong();
                pWriter.WriteUnicodeString("");
                pWriter.WriteByte();
            }

            pWriter.WriteInt(1);
            pWriter.Write <SkinColor>(player.SkinColor);
            pWriter.WriteUnicodeString(player.ProfileUrl); // Profile URL

            pWriter.WriteBool(player.Mount != null);
            if (player.Mount != null)
            {
                pWriter.WriteMount(player.Mount);

                // Unknown
                byte countA = 0;
                pWriter.WriteByte(countA);
                for (int i = 0; i < countA; i++)
                {
                    pWriter.WriteInt()
                    .WriteByte();
                }
            }
            pWriter.WriteInt();
            pWriter.WriteLong(DateTimeOffset.UtcNow.ToUnixTimeSeconds()); // some timestamp
            pWriter.WriteInt();
            pWriter.WriteInt();

            // This seems to be character appearance encoded as a blob
            pWriter.WriteBool(true);
            if (true)
            {
                var appearanceBuffer = new PacketWriter();
                appearanceBuffer.WriteByte((byte)player.Equip.Count); // num equips
                foreach ((EquipSlot slot, Item equip) in player.Equip)
                {
                    CharacterListPacket.WriteEquip(slot, equip, appearanceBuffer);
                }

                appearanceBuffer.WriteByte(1)
                .WriteLong()
                .WriteLong()
                .WriteByte();

                pWriter.WriteDeflated(appearanceBuffer.Buffer, 0, appearanceBuffer.Length);
                pWriter.WriteByte();                      // Separator?
                pWriter.WriteDeflated(new byte[1], 0, 1); // Unknown
                pWriter.WriteByte();                      // Separator?
                pWriter.WriteDeflated(new byte[1], 0, 1); // Badge appearances

                WritePassiveSkills(pWriter);

                pWriter.WriteInt();
                pWriter.WriteInt();
                pWriter.WriteByte();
                pWriter.WriteInt();
                pWriter.WriteByte();
                pWriter.WriteByte();
                pWriter.WriteInt(); // TitleId
                pWriter.WriteShort();
                pWriter.WriteByte();
                pWriter.WriteInt();
                pWriter.WriteByte();
                pWriter.WriteLong(); // Another timestamp
                pWriter.WriteInt(int.MaxValue);
                pWriter.WriteByte();
                pWriter.WriteInt();
                pWriter.WriteInt();
                pWriter.WriteShort();
            }
            else
            {
                pWriter.WriteInt();
            }

            return(pWriter);
        }