/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package tools.packet; import client.MapleBuffStat; import client.MapleCharacter; import constants.ServerConfig; import handling.SendPacketOpcode; import java.awt.Point; import java.util.ArrayList; import java.util.EnumMap; import java.util.List; import java.util.Map; import server.MapleStatInfo; import server.Randomizer; import tools.Pair; import tools.data.MaplePacketLittleEndianWriter; /** * * @author Itzik */ public class JobPacket { public static class PhantomPacket { public static byte[] addStolenSkill(int jobNum, int index, int skill, int level) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.UPDATE_STOLEN_SKILLS.getValue()); mplew.write(1); mplew.write(0); mplew.writeInt(jobNum); mplew.writeInt(index); mplew.writeInt(skill); mplew.writeInt(level); mplew.writeInt(0); mplew.write(0); return mplew.getPacket(); } public static byte[] removeStolenSkill(int jobNum, int index) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.UPDATE_STOLEN_SKILLS.getValue()); mplew.write(1); mplew.write(3); mplew.writeInt(jobNum); mplew.writeInt(index); mplew.write(0); return mplew.getPacket(); } public static byte[] replaceStolenSkill(int base, int skill) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.REPLACE_SKILLS.getValue()); mplew.write(1); mplew.write(skill > 0 ? 1 : 0); mplew.writeInt(base); mplew.writeInt(skill); return mplew.getPacket(); } public static byte[] gainCardStack(MapleCharacter chr, int runningId, int color, int skillid, int damageTo, int count) { List<Integer> mobid = new ArrayList<>(); mobid.add(damageTo); List<Pair<Integer, Integer>> forceinfo = new ArrayList<>(); for (int i = 0; i < count; i++) { if (damageTo == 0) { forceinfo.add(new Pair<>(runningId + i, color)); } else { forceinfo.add(new Pair<>(runningId, color)); } } return CField.gainForce(false, chr, mobid, 1, skillid, forceinfo); } public static byte[] updateCardStack(final int total) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.PHANTOM_CARD.getValue()); mplew.write(total); return mplew.getPacket(); } public static byte[] getCarteAnimation(MapleCharacter chr, int oid, int job, int total, int numDisplay) { List<Integer> mobid = new ArrayList<>(); mobid.add(oid); List<Pair<Integer, Integer>> forceinfo = new ArrayList<>(); for (int i = 1; i <= numDisplay; i++) { forceinfo.add(new Pair<>(total - (numDisplay - i), job == 2412 ? 2 : 1)); } return CField.gainForce(false, chr, mobid, 1, job == 2412 ? 24120002 : 24100003, forceinfo); } public static byte[] giveAriaBuff(int bufflevel, int buffid, int bufflength) { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); Map<MapleBuffStat, Integer> statups = new EnumMap<>(MapleBuffStat.class); statups.put(MapleBuffStat.DAMAGE_RATE, 0); statups.put(MapleBuffStat.INDIE_DAM_R, 0); PacketHelper.writeBuffMask(mplew, statups); for (int i = 0; i < 2; i++) { mplew.writeShort(bufflevel); mplew.writeInt(buffid); mplew.writeInt(bufflength); } mplew.writeZeroBytes(3); mplew.writeShort(0); mplew.write(0); return mplew.getPacket(); } } public static class AngelicPacket { public static byte[] DressUpTime(byte type) { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.SHOW_STATUS_INFO.getValue()); mplew.write(type); mplew.writeShort(7707); mplew.write(2); mplew.writeLong(PacketHelper.getTime(System.currentTimeMillis())); return mplew.getPacket(); } public static byte[] updateDress(int transform, MapleCharacter chr) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.ANGELIC_CHANGE.getValue()); mplew.writeInt(chr.getId()); mplew.writeInt(transform); return mplew.getPacket(); } public static byte[] lockSkill(int skillid) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.LOCK_CHARGE_SKILL.getValue()); mplew.writeInt(skillid); return mplew.getPacket(); } public static byte[] unlockSkill() { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.UNLOCK_CHARGE_SKILL.getValue()); mplew.writeInt(0); return mplew.getPacket(); } public static byte[] absorbingSoulSeeker(int characterid, int size, Point essence1, Point essence2, int skillid, boolean creation) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GAIN_FORCE.getValue()); mplew.write(!creation ? 0 : 1); mplew.writeInt(characterid); if (!creation) { // false mplew.writeInt(3); mplew.write(1); mplew.write(size); mplew.writeZeroBytes(3); mplew.writeShort(essence1.x); mplew.writeShort(essence1.y); mplew.writeShort(essence2.y); mplew.writeShort(essence2.x); } else { // true mplew.writeShort(essence1.x); mplew.writeShort(essence1.y); mplew.writeInt(4); mplew.write(1); mplew.writeShort(essence1.y); mplew.writeShort(essence1.x); } mplew.writeInt(skillid); if (!creation) { for (int i = 0; i < 2; i++) { mplew.write(1); mplew.writeInt(Randomizer.rand(19, 20)); mplew.writeInt(1); mplew.writeInt(Randomizer.rand(18, 19)); mplew.writeInt(Randomizer.rand(20, 23)); mplew.writeInt(Randomizer.rand(36, 55)); mplew.writeInt(540); mplew.writeShort(0);//new 142 mplew.writeZeroBytes(6);//new 143 } } else { mplew.write(1); mplew.writeInt(Randomizer.rand(6, 21)); mplew.writeInt(1); mplew.writeInt(Randomizer.rand(42, 45)); mplew.writeInt(Randomizer.rand(4, 7)); mplew.writeInt(Randomizer.rand(267, 100)); mplew.writeInt(0);//540 mplew.writeInt(0); mplew.writeInt(0); } mplew.write(0); return mplew.getPacket(); } public static byte[] SoulSeekerRegen(MapleCharacter chr, int sn) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GAIN_FORCE.getValue()); mplew.write(1); mplew.writeInt(chr.getId()); mplew.writeInt(sn); mplew.writeInt(4); mplew.write(1); mplew.writeInt(sn); mplew.writeInt(65111007); // hide skills mplew.write(1); mplew.writeInt(Randomizer.rand(0x06, 0x10)); mplew.writeInt(1); mplew.writeInt(Randomizer.rand(0x28, 0x2B)); mplew.writeInt(Randomizer.rand(0x03, 0x04)); mplew.writeInt(Randomizer.rand(0xFA, 0x49)); mplew.writeInt(0); mplew.writeLong(0); mplew.write(0); return mplew.getPacket(); } public static byte[] SoulSeeker(MapleCharacter chr, int skillid, int sn, int sc1, int sc2) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GAIN_FORCE.getValue()); mplew.write(0); mplew.writeInt(chr.getId()); mplew.writeInt(3); mplew.write(1); mplew.writeInt(sn); if (sn >= 1) { mplew.writeInt(sc1);//SHOW_ITEM_GAIN_INCHAT if (sn == 2) { mplew.writeInt(sc2); } } mplew.writeInt(65111007); // hide skills for (int i = 0; i < 2; i++) { mplew.write(1); mplew.writeInt(i + 2); mplew.writeInt(1); mplew.writeInt(Randomizer.rand(0x0F, 0x10)); mplew.writeInt(Randomizer.rand(0x1B, 0x22)); mplew.writeInt(Randomizer.rand(0x1F, 0x24)); mplew.writeInt(540); mplew.writeInt(0);//wasshort new143 mplew.writeInt(0);//new143 } mplew.write(0); return mplew.getPacket(); } } public static class LuminousPacket { public static byte[] updateLuminousGauge(int gauge, int type) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.LUMINOUS_COMBO.getValue()); mplew.writeInt(gauge); mplew.write(type); return mplew.getPacket(); } } public static class XenonPacket { public static byte[] giveXenonSupply(short amount) { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); PacketHelper.writeSingleMask(mplew, MapleBuffStat.SUPPLY_SURPLUS); mplew.writeShort(amount); mplew.writeInt(30020232); //skill id mplew.writeInt(-1); //duration mplew.writeZeroBytes(18); return mplew.getPacket(); } public static byte[] giveAmaranthGenerator() { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); Map<MapleBuffStat, Integer> statups = new EnumMap<>(MapleBuffStat.class); statups.put(MapleBuffStat.SUPPLY_SURPLUS, 0); statups.put(MapleBuffStat.AMARANTH_GENERATOR, 0); PacketHelper.writeBuffMask(mplew, statups); mplew.writeShort(20); //gauge fill mplew.writeInt(30020232); //skill id mplew.writeInt(-1); //duration mplew.writeShort(1); mplew.writeInt(36121054); //skill id mplew.writeInt(10000); //duration mplew.writeZeroBytes(5); mplew.writeInt(1000); mplew.writeInt(1); mplew.writeZeroBytes(1); mplew.writeZeroBytes(69); //for no dc return mplew.getPacket(); } } public static class AvengerPacket { public static byte[] giveAvengerHpBuff(int hp) { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); PacketHelper.writeSingleMask(mplew, MapleBuffStat.LUNAR_TIDE); mplew.writeShort(3); mplew.writeInt(0); mplew.writeInt(2100000000); mplew.writeZeroBytes(5); mplew.writeInt(hp); mplew.writeZeroBytes(13); mplew.writeZeroBytes(69); //for no dc return mplew.getPacket(); } public static byte[] giveExceed(short amount) { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); PacketHelper.writeSingleMask(mplew, MapleBuffStat.EXCEED); mplew.writeShort(amount); mplew.writeInt(30010230); //skill id mplew.writeInt(-1); //duration mplew.writeZeroBytes(18); mplew.writeZeroBytes(69); //for no dc return mplew.getPacket(); } public static byte[] giveExceedAttack(int skill, short amount) { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); PacketHelper.writeSingleMask(mplew, MapleBuffStat.EXCEED_ATTACK); mplew.writeShort(amount); mplew.writeInt(skill); //skill id mplew.writeInt(15000); //duration mplew.writeZeroBytes(18); mplew.writeZeroBytes(69); //for no dc return mplew.getPacket(); } public static byte[] cancelExceed() { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.CANCEL_BUFF.getValue()); Map<MapleBuffStat, Integer> statups = new EnumMap<>(MapleBuffStat.class); statups.put(MapleBuffStat.EXCEED, 0); statups.put(MapleBuffStat.EXCEED_ATTACK, 0); PacketHelper.writeBuffMask(mplew, statups); return mplew.getPacket(); } } public static class BeastTamerPacket { public static byte[] ModeCancel() { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.CANCEL_BUFF.getValue()); Map<MapleBuffStat, Integer> statups = new EnumMap<>(MapleBuffStat.class); statups.put(MapleBuffStat.ANIMAL_SELECT, 0); PacketHelper.writeBuffMask(mplew, statups); return mplew.getPacket(); } public static byte[] BearMode() { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); Map<MapleBuffStat, Integer> statups = new EnumMap<>(MapleBuffStat.class); statups.put(MapleBuffStat.ANIMAL_SELECT, 0); PacketHelper.writeBuffMask(mplew, statups); mplew.writeShort(1); mplew.writeInt(110001501); mplew.writeInt(-419268850); mplew.writeLong(0); mplew.writeInt(0); mplew.write(0); mplew.write(1); mplew.writeInt(0); mplew.writeZeroBytes(69); //for no dc return mplew.getPacket(); } public static byte[] LeopardMode() { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); Map<MapleBuffStat, Integer> statups = new EnumMap<>(MapleBuffStat.class); statups.put(MapleBuffStat.ANIMAL_SELECT, 0); PacketHelper.writeBuffMask(mplew, statups); mplew.writeShort(2); mplew.writeInt(110001502); mplew.writeInt(-419263978); mplew.writeLong(0); mplew.writeInt(0); mplew.write(0); mplew.write(1); mplew.writeInt(0); mplew.writeZeroBytes(69); //for no dc return mplew.getPacket(); } public static byte[] HawkMode() { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); Map<MapleBuffStat, Integer> statups = new EnumMap<>(MapleBuffStat.class); statups.put(MapleBuffStat.ANIMAL_SELECT, 0); PacketHelper.writeBuffMask(mplew, statups); mplew.writeShort(3); mplew.writeInt(110001503); mplew.writeInt(-419263978); mplew.writeLong(0); mplew.writeInt(0); mplew.write(0); mplew.write(1); mplew.writeInt(0); mplew.writeZeroBytes(69); //for no dc return mplew.getPacket(); } public static byte[] CatMode() { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); Map<MapleBuffStat, Integer> statups = new EnumMap<>(MapleBuffStat.class); statups.put(MapleBuffStat.ANIMAL_SELECT, 0); PacketHelper.writeBuffMask(mplew, statups); mplew.writeShort(4); mplew.writeInt(110001504); mplew.writeInt(-419263978); mplew.writeLong(0); mplew.writeInt(0); mplew.write(0); mplew.write(1); mplew.writeInt(0); mplew.writeZeroBytes(69); //for no dc return mplew.getPacket(); } public static byte[] LeopardRoar() { if (ServerConfig.LOG_PACKETS) { System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]); } MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); Map<MapleBuffStat, Integer> statups = new EnumMap<>(MapleBuffStat.class); statups.put(MapleBuffStat.INDIE_MAX_DAMAGE_OVER, statups.get(MapleStatInfo.indieDamR)); statups.put(MapleBuffStat.INDIE_DAM_R, statups.get(MapleStatInfo.indieMaxDamageOver)); PacketHelper.writeBuffMask(mplew, statups); mplew.writeShort(4); mplew.writeInt(110001504); mplew.writeInt(-419263978); mplew.writeLong(0); mplew.writeInt(0); mplew.write(0); mplew.write(1); mplew.writeInt(0); mplew.writeZeroBytes(69); //for no dc return mplew.getPacket(); } } }