package tools.packet; import client.MapleCharacter; import handling.SendPacketOpcode; import handling.channel.MapleGuildRanking; import handling.world.WorldGuildService; import handling.world.guild.MapleBBSReply; import handling.world.guild.MapleBBSThread; import handling.world.guild.MapleGuild; import handling.world.guild.MapleGuildCharacter; import handling.world.guild.MapleGuildSkill; import java.util.Collection; import java.util.List; import org.apache.log4j.Logger; import server.ServerProperties; import tools.MaplePacketCreator; import tools.data.output.MaplePacketLittleEndianWriter; public class GuildPacket { private static final Logger log = Logger.getLogger(GuildPacket.class); public static byte[] showGuildInfo(MapleCharacter chr) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x30); mplew.write(0); if ((chr == null) || (chr.getMGC() == null)) { mplew.write(0); return mplew.getPacket(); } MapleGuild guild = WorldGuildService.getInstance().getGuild(chr.getGuildId()); if (guild == null) { mplew.write(0); return mplew.getPacket(); } mplew.write(1); getGuildInfo(mplew, guild); mplew.writeInt(25); //size mplew.writeInt(0); mplew.writeInt(15000); mplew.writeInt(60000); mplew.writeInt(135000); mplew.writeInt(240000); mplew.writeInt(375000); mplew.writeInt(540000); mplew.writeInt(735000); mplew.writeInt(960000); mplew.writeInt(1215000); mplew.writeInt(1500000); mplew.writeInt(1815000); mplew.writeInt(2160000); mplew.writeInt(2535000); mplew.writeInt(2940000); mplew.writeInt(3375000); mplew.writeInt(3840000); mplew.writeInt(4335000); mplew.writeInt(4860000); mplew.writeInt(5415000); mplew.writeInt(6000000); mplew.writeInt(6615000); mplew.writeInt(7260000); mplew.writeInt(7935000); mplew.writeInt(8640000); return mplew.getPacket(); } private static void getGuildInfo(MaplePacketLittleEndianWriter mplew, MapleGuild guild) { mplew.writeInt(guild.getId()); mplew.writeMapleAsciiString(guild.getName()); for (int i = 1; i <= 5; i++) { mplew.writeMapleAsciiString(guild.getRankTitle(i)); } guild.addMemberData(mplew); guild.addMemberForm(mplew);//118+ mplew.writeInt(guild.getCapacity()); mplew.writeShort(guild.getLogoBG()); mplew.write(guild.getLogoBGColor()); mplew.writeShort(guild.getLogo()); mplew.write(guild.getLogoColor()); mplew.writeMapleAsciiString(guild.getNotice()); mplew.writeInt(guild.getGP()); //家族经验 mplew.writeInt(guild.getGP()); mplew.writeInt(guild.getAllianceId() > 0 ? guild.getAllianceId() : 0); mplew.write(guild.getLevel()); mplew.writeShort(0); mplew.writeInt(0); //GP mplew.write(0); // 升级经验 mplew.writeInt(25); //size mplew.writeInt(0); mplew.writeInt(15000); mplew.writeInt(60000); mplew.writeInt(135000); mplew.writeInt(240000); mplew.writeInt(375000); mplew.writeInt(540000); mplew.writeInt(735000); mplew.writeInt(960000); mplew.writeInt(1215000); mplew.writeInt(1500000); mplew.writeInt(1815000); mplew.writeInt(2160000); mplew.writeInt(2535000); mplew.writeInt(2940000); mplew.writeInt(3375000); mplew.writeInt(3840000); mplew.writeInt(4335000); mplew.writeInt(4860000); mplew.writeInt(5415000); mplew.writeInt(6000000); mplew.writeInt(6615000); mplew.writeInt(7260000); mplew.writeInt(7935000); mplew.writeInt(8640000); } public static byte[] guildSkillPurchased(int guildId, int skillId, int level, long expiration, String purchase, String activate) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x55); mplew.writeInt(guildId); mplew.writeInt(skillId); mplew.writeShort(level); mplew.writeLong(PacketHelper.getTime(expiration)); mplew.writeMapleAsciiString(purchase); mplew.writeMapleAsciiString(activate); return mplew.getPacket(); } public static byte[] guildLeaderChanged(int guildId, int oldLeader, int newLeader, int allianceId) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x59); mplew.writeInt(guildId); mplew.writeInt(oldLeader); mplew.writeInt(newLeader); mplew.write(allianceId > 0 ? 1 : 0); if (allianceId > 0) { mplew.writeInt(allianceId); } return mplew.getPacket(); } public static byte[] guildMemberOnline(int guildId, int chrId, boolean isOnline) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x5C); mplew.writeInt(guildId); mplew.writeInt(chrId); mplew.write(isOnline ? 1 : 0); return mplew.getPacket(); } public static byte[] guildContribution(int guildId, int cid, int c) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x61); mplew.writeInt(guildId); mplew.writeInt(cid); mplew.writeInt(c); mplew.writeInt(500); //117 mplew.writeInt(350); //117 mplew.writeLong(PacketHelper.getTime(System.currentTimeMillis())); //117 return mplew.getPacket(); } public static byte[] createGuildNotice(String Name) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x05); mplew.writeMapleAsciiString(Name); return mplew.getPacket(); } public static byte[] guildInvite(int guildId, String charName, int levelFrom, int jobFrom) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x07); mplew.writeInt(guildId); mplew.writeMapleAsciiString(charName); mplew.writeInt(levelFrom); mplew.writeInt(jobFrom); mplew.writeInt(0); return mplew.getPacket(); } public static byte[] denyGuildInvitation(String charname) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x3d); mplew.writeMapleAsciiString(charname); return mplew.getPacket(); } public static byte[] genericGuildMessage(byte code) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(code); if (code == 87) { mplew.writeInt(0); } if ((code == 3) || (code == 0x30) || (code == 59) || (code == 60) || (code == 61) || (code == 84) || (code == 87)) { mplew.writeMapleAsciiString(""); } return mplew.getPacket(); } public static Object GuildReceipt(int guildId) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x31); mplew.writeInt(guildId); MapleGuild guild = WorldGuildService.getInstance().getGuild(guildId); getGuildInfo(mplew, guild); return mplew.getPacket(); } public static byte[] newGuildInfo(MapleCharacter c) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x37); if ((c == null) || (c.getMGC() == null)) { return genericGuildMessage((byte) 37); } MapleGuild g = WorldGuildService.getInstance().getGuild(c.getGuildId()); if (g == null) { return genericGuildMessage((byte) 37); } getGuildInfo(mplew, g); return mplew.getPacket(); } public static byte[] newGuildMember(MapleGuildCharacter mgc) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x3E); // 0x2D mplew.writeInt(mgc.getGuildId()); guildMemberInfo(mplew, mgc); return mplew.getPacket(); } public static byte[] newGuildJoinMember(MapleGuildCharacter mgc) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x44); mplew.writeInt(mgc.getGuildId()); guildMemberInfo(mplew, mgc); return mplew.getPacket(); } public static byte[] removeGuildJoin(int cid) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x49); mplew.writeInt(cid); return mplew.getPacket(); } private static void guildMemberInfo(MaplePacketLittleEndianWriter mplew, MapleGuildCharacter mgc) { mplew.writeInt(mgc.getId()); mplew.writeAsciiString(mgc.getName(), 13); mplew.writeInt(mgc.getJobId()); mplew.writeInt(mgc.getLevel()); mplew.writeInt(mgc.getGuildRank()); mplew.writeInt(mgc.isOnline() ? 1 : 0); mplew.writeInt(mgc.getAllianceRank()); mplew.writeInt(mgc.getGuildContribution()); mplew.writeInt(0);//可能是GP+IGP mplew.writeInt(0);//IGP mplew.writeLong(PacketHelper.getTime(System.currentTimeMillis())); } public static byte[] showSearchGuilds(List<MapleGuild> guilds) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_SEARCH.getValue()); mplew.writeInt(guilds.size()); for (MapleGuild guild : guilds) { mplew.writeInt(guild.getId()); mplew.writeInt(guild.getLevel()); mplew.writeMapleAsciiString(guild.getName()); mplew.writeMapleAsciiString(guild.getMGC(guild.getLeaderId()).getName()); mplew.writeInt(guild.getMembers().size()); mplew.writeInt(guild.getAverageLevel()); } return mplew.getPacket(); } public static byte[] memberLeft(MapleGuildCharacter mgc, boolean isExpelled) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(isExpelled ? 0x4D : 0x4A); //0x35 : 0x32 mplew.writeInt(mgc.getGuildId()); mplew.writeInt(mgc.getId()); mplew.writeMapleAsciiString(mgc.getName()); return mplew.getPacket(); } public static byte[] changeRank(MapleGuildCharacter mgc) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x46); mplew.writeInt(mgc.getGuildId()); mplew.writeInt(mgc.getId()); mplew.write(mgc.getGuildRank()); return mplew.getPacket(); } public static byte[] guildNotice(int guildId, String notice) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x4b); mplew.writeInt(guildId); mplew.writeMapleAsciiString(notice); return mplew.getPacket(); } public static byte[] guildMemberLevelJobUpdate(MapleGuildCharacter mgc) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x5B); mplew.writeInt(mgc.getGuildId()); mplew.writeInt(mgc.getId()); mplew.writeInt(mgc.getLevel()); mplew.writeInt(mgc.getJobId()); return mplew.getPacket(); } public static byte[] rankTitleChange(int guildId, String[] ranks) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x5B); //0x44 mplew.writeInt(guildId); for (String r : ranks) { mplew.writeMapleAsciiString(r); } return mplew.getPacket(); } public static byte[] guildDisband(int guildId) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x50); // 家族解散 mplew.writeInt(guildId); // mplew.write(1); return mplew.getPacket(); } public static byte[] guildEmblemChange(int guildId, short bg, byte bgcolor, short logo, byte logocolor) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x60); //0x49 mplew.writeInt(guildId); mplew.writeShort(bg); mplew.write(bgcolor); mplew.writeShort(logo); mplew.write(logocolor); return mplew.getPacket(); } public static byte[] guildCapacityChange(int guildId, int capacity) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x40); mplew.writeInt(guildId); mplew.write(capacity); return mplew.getPacket(); } public static byte[] changeAllianceLeader(int allianceid, int newLeader, int oldLeader) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.ALLIANCE_OPERATION.getValue()); mplew.write(2); mplew.writeInt(allianceid); mplew.writeInt(oldLeader); mplew.writeInt(newLeader); return mplew.getPacket(); } public static byte[] updateAllianceLeader(int allianceid, int newLeader, int oldLeader) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.ALLIANCE_OPERATION.getValue()); mplew.write(25); mplew.writeInt(allianceid); mplew.writeInt(oldLeader); mplew.writeInt(newLeader); return mplew.getPacket(); } public static byte[] sendAllianceInvite(String allianceName, MapleCharacter inviter) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.ALLIANCE_OPERATION.getValue()); mplew.write(3); mplew.writeInt(inviter.getGuildId()); mplew.writeMapleAsciiString(inviter.getName()); mplew.writeMapleAsciiString(allianceName); return mplew.getPacket(); } public static byte[] changeAllianceRank(int allianceid, MapleGuildCharacter player) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.ALLIANCE_OPERATION.getValue()); mplew.write(5); mplew.writeInt(allianceid); mplew.writeInt(player.getId()); mplew.writeInt(player.getAllianceRank()); return mplew.getPacket(); } public static byte[] allianceMemberOnline(int alliance, int gid, int id, boolean online) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.ALLIANCE_OPERATION.getValue()); mplew.write(14); mplew.writeInt(alliance); mplew.writeInt(gid); mplew.writeInt(id); mplew.write(online ? 1 : 0); return mplew.getPacket(); } public static byte[] updateAlliance(MapleGuildCharacter mgc, int allianceid) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.ALLIANCE_OPERATION.getValue()); mplew.write(24); mplew.writeInt(allianceid); mplew.writeInt(mgc.getGuildId()); mplew.writeInt(mgc.getId()); mplew.writeInt(mgc.getLevel()); mplew.writeInt(mgc.getJobId()); return mplew.getPacket(); } public static byte[] updateAllianceRank(int allianceid, MapleGuildCharacter mgc) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.ALLIANCE_OPERATION.getValue()); mplew.write(27); mplew.writeInt(allianceid); mplew.writeInt(mgc.getId()); mplew.writeInt(mgc.getAllianceRank()); return mplew.getPacket(); } public static byte[] disbandAlliance(int alliance) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.ALLIANCE_OPERATION.getValue()); mplew.write(29); mplew.writeInt(alliance); return mplew.getPacket(); } public static byte[] BBSThreadList(List<MapleBBSThread> bbs, int start) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.BBS_OPERATION.getValue()); mplew.write(6); if (bbs == null) { mplew.write(0); mplew.writeInt(0); return mplew.getPacket(); } int threadCount = bbs.size(); MapleBBSThread notice = null; for (MapleBBSThread b : bbs) { if (b.isNotice()) { notice = b; break; } } mplew.write(notice == null ? 0 : 1); if (notice != null) { addThread(mplew, notice); } if (threadCount < start) { start = 0; } mplew.writeInt(threadCount); int pages = Math.min(10, threadCount - start); mplew.writeInt(pages); for (int i = 0; i < pages; i++) { addThread(mplew, (MapleBBSThread) bbs.get(start + i)); } return mplew.getPacket(); } private static void addThread(MaplePacketLittleEndianWriter mplew, MapleBBSThread rs) { mplew.writeInt(rs.localthreadID); mplew.writeInt(rs.ownerID); mplew.writeMapleAsciiString(rs.name); mplew.writeLong(PacketHelper.getKoreanTimestamp(rs.timestamp)); mplew.writeInt(rs.icon); mplew.writeInt(rs.getReplyCount()); } public static byte[] showThread(MapleBBSThread thread) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.BBS_OPERATION.getValue()); mplew.write(7); mplew.writeInt(thread.localthreadID); mplew.writeInt(thread.ownerID); mplew.writeLong(PacketHelper.getKoreanTimestamp(thread.timestamp)); mplew.writeMapleAsciiString(thread.name); mplew.writeMapleAsciiString(thread.text); mplew.writeInt(thread.icon); mplew.writeInt(thread.getReplyCount()); for (MapleBBSReply reply : thread.replies.values()) { mplew.writeInt(reply.replyid); mplew.writeInt(reply.ownerID); mplew.writeLong(PacketHelper.getKoreanTimestamp(reply.timestamp)); mplew.writeMapleAsciiString(reply.content); } return mplew.getPacket(); } public static byte[] showGuildRanks(int npcid, List<MapleGuildRanking.GuildRankingInfo> all, boolean show) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x69); mplew.writeInt(npcid); mplew.writeInt(show ? all.size() : 0); if (show) { for (MapleGuildRanking.GuildRankingInfo info : all) { mplew.writeShort(0);//118+ mplew.writeMapleAsciiString(info.getName()); mplew.writeInt(info.getGP()); mplew.writeInt(info.getLogo()); mplew.writeInt(info.getLogoColor()); mplew.writeInt(info.getLogoBg()); mplew.writeInt(info.getLogoBgColor()); } } return mplew.getPacket(); } public static byte[] updateGP(int guildId, int GP, int guildlevel) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.GUILD_OPERATION.getValue()); mplew.write(0x68); mplew.writeInt(guildId); mplew.writeInt(GP); mplew.writeInt(guildlevel); mplew.writeInt(GP); return mplew.getPacket(); } public static byte[] loadGuildName(MapleCharacter chr) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.LOAD_GUILD_NAME.getValue()); mplew.writeInt(chr.getId()); if (chr.getGuildId() <= 0) { mplew.writeShort(0); } else { MapleGuild guild = WorldGuildService.getInstance().getGuild(chr.getGuildId()); if (guild != null) { mplew.writeMapleAsciiString(guild.getName()); } else { mplew.writeShort(0); } } return mplew.getPacket(); } public static byte[] loadGuildIcon(MapleCharacter chr) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.LOAD_GUILD_ICON.getValue()); mplew.writeInt(chr.getId()); if (chr.getGuildId() <= 0) { mplew.writeZero(6); } else { MapleGuild guild = WorldGuildService.getInstance().getGuild(chr.getGuildId()); if (guild != null) { mplew.writeShort(guild.getLogoBG()); mplew.write(guild.getLogoBGColor()); mplew.writeShort(guild.getLogo()); mplew.write(guild.getLogoColor()); } else { mplew.writeZero(6); } } return mplew.getPacket(); } }