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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }