updatePlayerStats
UpdateSPCode:public static final MaplePacket updatePlayerStats(final List<Pair<MapleStat, Integer>> stats, final int evan) { return updatePlayerStats(stats, false, evan); } public static final MaplePacket updatePlayerStats(final List<Pair<MapleStat, Integer>> stats, final boolean itemReaction, final int evan) { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.UPDATE_STATS.getValue()); mplew.write(itemReaction ? 1 : 0); int updateMask = 0; for (final Pair<MapleStat, Integer> statupdate : stats) { updateMask |= statupdate.getLeft().getValue(); } List<Pair<MapleStat, Integer>> mystats = stats; if (mystats.size() > 1) { Collections.sort(mystats, new Comparator<Pair<MapleStat, Integer>>() { @Override public int compare(final Pair<MapleStat, Integer> o1, final Pair<MapleStat, Integer> o2) { int val1 = o1.getLeft().getValue(); int val2 = o2.getLeft().getValue(); return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1)); } }); } mplew.writeInt(updateMask); Integer value; for (final Pair<MapleStat, Integer> statupdate : mystats) { value = statupdate.getLeft().getValue(); if (value >= 1) { if (value == 0x1) { mplew.writeShort(statupdate.getRight().shortValue()); } else if (value <= 0x4) { mplew.writeInt(statupdate.getRight()); } else if (value < 0x20) { mplew.write(statupdate.getRight().byteValue()); } else if (value >= 0x400 && value <= 0x2000) { mplew.writeInt(statupdate.getRight().intValue()); } else if (value == 0x8000) { if (GameConstants.isEvan(evan) || GameConstants.isResist(evan)) { throw new UnsupportedOperationException("Pass"); } else { mplew.writeShort(statupdate.getRight().shortValue()); } } else if (value < 0xFFFF) { mplew.writeShort(statupdate.getRight().shortValue()); } else { mplew.writeInt(statupdate.getRight().intValue()); } } } mplew.writeShort(0); // v104 return mplew.getPacket(); }
giveBuffCode:public static final MaplePacket updateSp(MapleCharacter chr, final boolean itemReaction) { return updateSp(chr, itemReaction, false); } public static final MaplePacket updateSp(MapleCharacter chr, final boolean itemReaction, final boolean overrideJob) { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.UPDATE_STATS.getValue()); mplew.write(itemReaction ? 1 : 0); mplew.writeInt(0x8000); if (overrideJob || GameConstants.isEvan(chr.getJob()) || GameConstants.isResist(chr.getJob())) { mplew.write(chr.getRemainingSpSize()); for (int i = 0; i < chr.getRemainingSps().length; i++) { if (chr.getRemainingSp(i) > 0) { mplew.write(i + 1); mplew.write(chr.getRemainingSp(i)); } } } else { mplew.writeShort(chr.getRemainingSp()); } mplew.writeShort(0); // After BB+ return mplew.getPacket(); }
P.SCode:public static MaplePacket giveBuff(int buffid, int bufflength, List<Pair<MapleBuffStat, Integer>> statups, MapleStatEffect effect) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendPacketOpcode.GIVE_BUFF.getValue()); writeLongMask(mplew, statups); for (Pair<MapleBuffStat, Integer> statup : statups) { mplew.writeInt(statup.getRight().intValue()); // After BB Short -> Int mplew.writeInt(buffid); mplew.writeInt(bufflength); } mplew.writeShort(0); // delay, wk charges have 600 here o.o mplew.writeShort(0); // combo 600, too if (effect == null || (!effect.isCombo() && !effect.isFinalAttack())) { mplew.write(0); // Test } return mplew.getPacket(); }
1. givebuff almost buff can but some buffstat changed you need sniff that
2. playerstats After BB HP/MP Short -> Int so some changed
3. updatesp After BB one short added but Idk what's that lol^^;



Reply With Quote![[Release] 1.06.2 Some Packet](http://ragezone.com/hyper728.png)

?

