Just some quick information I'm an now working with @mixtamal6 and @Novak some of the fixes will be posted here but one's that are too complex will just be added to Acernis and released with a newer revision when Novak so chooses
a huge thanks to those helping with the progression of the project for those of you not helping why not join in? :D
Changelog Public FixesSpoiler:PHP Code:15/03/2015 - Fix for Tyrant enhancing Elite heliseum gear and Nova gear to come
15/03/2015 - Finally found the right op codes for Phantom's Skill swipe
15/03/2015 - Dual Blade character creation fix (Luminous is staying private for now ._. it's super easy though)
16/03/2015 - Nova gear fix added (Heliseum still to come)
16/03/2015 - Nx prepaid fix
17/03/2015 - Cancelbuff fix
Changelog Fixes in sourceSpoiler:PHP Code:Trifling Wind
Dawn Warriors
This is a suuuuuuuuuuper hacky fix for Dawn WarriorSpoiler:PHP Code:in MapleCharacter change your changeWarriorStance to this
NOTE* This only allows you to use Falling Moon if you use any other stance YOU WILL STILL DC
public void changeWarriorStance(final int skillid) {
if (skillid == 11101022) {
//dispelBuff(11111022);
List<MapleBuffStat> statups = new LinkedList();
statups.add(MapleBuffStat.CRITICAL_PERCENT_UP);
statups.add(MapleBuffStat.MOON_STANCE2);
statups.add(MapleBuffStat.WARRIOR_STANCE);
//client.getSession().write(BuffPacket.cancelBuff(statups));*/
// client.getSession().write(JobPacket.DawnWarriorPacket.giveMoonfallStance(getSkillLevel(skillid)));
SkillFactory.getSkill(skillid).getEffect(1).applyTo(this);
} else if (skillid == 11111022) {
// dispelBuff(11101022);
System.out.println("Start of buff");
List<MapleBuffStat> statups = new LinkedList();
statups.add(MapleBuffStat.ATTACK_SPEED);
System.out.println("ATT Speed");
statups.add(MapleBuffStat.DAMAGE_PERCENT);
System.out.println("DMG Perc");
statups.add(MapleBuffStat.WARRIOR_STANCE);
System.out.println("WAR Stance");
//client.getSession().write(BuffPacket.cancelBuff(statups));*/
// client.getSession().write(JobPacket.DawnWarriorPacket.giveSunriseStance(getSkillLevel(skillid)));
SkillFactory.getSkill(skillid).getEffect(1).applyTo(this);
} else if (skillid == 11121005) {
//equinox
} else if (skillid == 11121011) {
dispelBuff(11101022);
// client.getSession().write(DawnWarriorPacket.giveEquinox_Moon(getSkillLevel(skillid), Integer.MAX_VALUE));
SkillFactory.getSkill(skillid).getEffect(1).applyTo(this);
} else if (skillid == 11121012) {
dispelBuff(11101022);
// client.getSession().write(DawnWarriorPacket.giveEquinox_Sun(getSkillLevel(skillid), Integer.MAX_VALUE));
SkillFactory.getSkill(skillid).getEffect(1).applyTo(this);
}
}
A few classes don't get their shields when they should then can't attack to fix thisSpoiler:PHP Code:public void checkForceShield() {
final MapleItemInformationProvider li = MapleItemInformationProvider.getInstance();
Equip equip;
boolean potential = false;
switch (job) {
case 508:
equip = (Equip) li.getEquipById(1352300);
break;
case 572:
potential = true;
case 570:
case 571:
equip = (Equip) li.getEquipById(1352301 + job % 10);
break;
case 3001:
equip = (Equip) li.getEquipById(1099000);
break;
case 3112:
potential = true;
case 3100:
case 3110:
case 3111:
equip = (Equip) li.getEquipById(1099001 + job % 10 + ((job % 100) / 10));
break;
case 3122:
potential = true;
case 3101:
case 3120:
case 3121:
equip = (Equip) li.getEquipById(1099000 + job % 10 + ((job % 100) / 10));
break;
case 5112:
potential = true;
case 5100:
case 5110:
case 5111:
equip = (Equip) li.getEquipById(1098000 + job % 10 + ((job % 100) / 10));
break;
case 6001:
equip = (Equip) li.getEquipById(1352600);
break;
case 6512:
potential = true;
case 6500:
case 6510:
case 6511:
equip = (Equip) li.getEquipById(1352601 + job % 10 + ((job % 100) / 10));
break;
case 6000:
equip = (Equip) li.getEquipById(1352500);
break;
case 6112:
potential = true;
case 6100:
case 6110:
case 6111:
equip = (Equip) li.getEquipById(1352500 + job % 10 + ((job % 100) / 10));
break;
case 3002:
equip = (Equip) li.getEquipById(1353000);
break;
case 3612:
potential = true;
case 3600:
case 3610:
case 3611:
equip = (Equip) li.getEquipById(1353001 + job % 10 + ((job % 100) / 10));
break;
default:
equip = null;
}
if (equip != null) {
if (potential) {
equip.resetPotential();
}
equip.setPosition((short) -10);
equip.setQuantity((short) 1);
equip.setGMLog("Job Advance");
forceReAddItem_NoUpdate(equip, MapleInventoryType.EQUIPPED);
client.getSession().write(InventoryPacket.updateEquippedItem(this, equip, (short) -10));
equipChanged();
}
}
A slighty more accurate hp /mp gain on level upSpoiler:PHP Code:add this to your Levelup function in MapleCharacter
if (GameConstants.isBeginnerJob(job)) { // Beginner
maxhp += Randomizer.rand(12, 16);
maxmp += Randomizer.rand(10, 12);
} else if (job >= 3100 && job <= 3112) { // Warrior
maxhp += Randomizer.rand(48, 52);
} else if ((job >= 100 && job <= 132) || (job >= 1100 && job <= 1111)) { // Warrior
maxhp += Randomizer.rand(48, 52);
maxmp += Randomizer.rand(4, 6);
} else if ((job >= 200 && job <= 232) || (job >= 1200 && job <= 1211)) { // Magician
maxhp += Randomizer.rand(10, 14);
maxmp += Randomizer.rand(48, 52);
} else if ((job >= 2700 && job <= 2712)) {
maxhp += Randomizer.rand(40, 56);
maxmp += Randomizer.rand(210, 230);
}
else if (job >= 3200 && job <= 3212) { //battle mages get their own little neat thing
maxhp += Randomizer.rand(40, 44);
maxmp += Randomizer.rand(42, 44);
} else if ((job >= 300 && job <= 322) || (job >= 400 && job <= 434) || (job >= 1300 && job <= 1311) || (job >= 1400 && job <= 1411) || (job >= 3300 && job <= 3312) || (job >= 2300 && job <= 2312)) { // Bowman, Thief, Wind Breaker and Night Walker
maxhp += Randomizer.rand(20, 24);
maxmp += Randomizer.rand(14, 16);
} else if ((job >= 510 && job <= 512) || (job >= 1510 && job <= 1512)) { // Pirate
maxhp += Randomizer.rand(37, 41);
maxmp += Randomizer.rand(18, 22);
} else if ((job >= 500 && job <= 532) || (job >= 3500 && job <= 3512) || job == 1500) { // Pirate
maxhp += Randomizer.rand(20, 24);
maxmp += Randomizer.rand(18, 22);
} else if (job >= 2100 && job <= 2112) { // Aran
maxhp += Randomizer.rand(50, 52);
maxmp += Randomizer.rand(4, 6);
} else if (job >= 2200 && job <= 2218) { // Evan
maxhp += Randomizer.rand(12, 16);
maxmp += Randomizer.rand(50, 52);
} else if (job >= 5100 && job <= 5112) { // Evan
maxhp += Randomizer.rand(48, 52);
maxmp += Randomizer.rand(4, 6);
} else if (job >= 3120 && job <= 3122) {
maxhp += Randomizer.rand(300, 370);
} else if (job == 3101) {
maxhp += Randomizer.rand(100, 125);
} else { // GameMaster
maxhp += Randomizer.rand(50, 100);//its already there lol
maxmp += Randomizer.rand(50, 100);
}
Proper sockets ._.Spoiler:PHP Code:Equip.java line 25 socket1 = -1, socket2 = -1, socket3 = -1;
and line 782
public short getSocketState() {
int flag = 0;
if (socket1 != -1 || socket2 != -1 || socket3 != -1) { // Got empty sockets show msg
flag |= SocketFlag.DEFAULT.getValue();
}
if (socket1 != -1) {
flag |= SocketFlag.SOCKET_BOX_1.getValue();
}
if (socket1 > 0) {
flag |= SocketFlag.USED_SOCKET_1.getValue();
}
if (socket2 != -1) {
flag |= SocketFlag.SOCKET_BOX_2.getValue();
}
if (socket2 > 0) {
flag |= SocketFlag.USED_SOCKET_2.getValue();
}
if (socket3 != -1) {
flag |= SocketFlag.SOCKET_BOX_3.getValue();
}
if (socket3 > 0) {
flag |= SocketFlag.USED_SOCKET_3.getValue();
}
return (short) flag;
}
OpCodeSpoiler:PHP Code:Taken from my previous post
USE_UPGRADE_SCROLL(true, (short) 0xC0),//BD
USE_FLAG_SCROLL(false, (short) 0xC1),//BE
USE_EQUIP_SCROLL(true, (short) 0xC2),//BF
USE_ABYSS_SCROLL(true, (short) 0xC7),//C4
USE_CARVED_SEAL(true, (short) 0xC9),//C5
USE_BONUS_POTENTIAL(true, (short) 0xC8),
USE_CRAFTED_CUBE(true, (short) 0xCA),
SKILL_MACRO(true, (short) 0xF5),
USE_NEBULITE(true, (short) 0xA0),//9E
USE_ALIEN_SOCKET(true, (short) 0xA1),//A1
USE_ALIEN_SOCKET_RESPONSE(true, (short) 0xA2),//A0
SendOps
MULTICHAT((short) 0x133),//118
Confirmed correct
CHOOSE_SKILL(true, (short) 0x16B),
SKILL_SWIPE(true, (short) 0x16C),
VIEW_SKILLS(true, (short) 0x16D),//161
CANCEL_OUT_SWIPE(true, (short) 0x16F),
Tyrant enhance fixSpoiler:PHP Code:in GameConstants.Java add this
public static boolean isTyrant(final int itemId) {
switch (itemId) {
//Boots
case 1072743:
case 1072744:
case 1072745:
case 1072746:
case 1072747:
//Capes
case 1102481:
case 1102482:
case 1102483:
case 1102484:
case 1102485:
//Belts
case 1132174:
case 1132175:
case 1132176:
case 1132177:
case 1132178:
// case 1082543: Warrior Gloves
// case 1082544: Mage Gloves
// case 1082545: Bowman Gloves
// case 1082546: Thief Gloves
// case 1082547: Pirate Gloves
//Gloves Are not in 144.3 so they're commented out
return true;
}
return false;
in Mapleiteminformationprovider.Java replace this line 828 in Acernis source
else if (GameConstants.isEquipScroll(scrollId.getItemId())) {
final int chanc = Math.max((scrollId.getItemId() == 2049300 || scrollId.getItemId() == 2049303 || scrollId.getItemId() == 2049306 ? 100 : (scrollId.getItemId() == 2049308 ? 50 : scrollId.getItemId() == 2049305 ? 60 : 80)) - (nEquip.getEnhance() * 10), 10) + added;
if (Randomizer.nextInt(100) > chanc) {
return null; //destroyed, nib
}
for (int i = 0; i < (scrollId.getItemId() == 2049308 ? 5 : (scrollId.getItemId() == 2049305 ? 4 : (scrollId.getItemId() == 2049304 ? 3 : scrollId.getItemId() == 2049309 ? 2 : 1))); i++) {
if (nEquip.getStr() > 0 || Randomizer.nextInt(50) == 1) { //1/50
nEquip.setStr((short) (nEquip.getStr() + Randomizer.nextInt(5)));
}
if (nEquip.getStr() > 0 && (GameConstants.isTyrant(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setStr((short) (nEquip.getStr() + 22));
}
if (nEquip.getDex() > 0 || Randomizer.nextInt(50) == 1) { //1/50
nEquip.setDex((short) (nEquip.getDex() + Randomizer.nextInt(5)));
}
if (nEquip.getDex() > 0 && (GameConstants.isTyrant(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setDex((short) (nEquip.getDex() + 22));
}
if (nEquip.getInt() > 0 || Randomizer.nextInt(50) == 1) { //1/50
nEquip.setInt((short) (nEquip.getInt() + Randomizer.nextInt(5)));
}
if (nEquip.getInt() > 0 && (GameConstants.isTyrant(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setInt((short) (nEquip.getInt() + 22));
}
if (nEquip.getLuk() > 0 || Randomizer.nextInt(50) == 1) { //1/50
nEquip.setLuk((short) (nEquip.getLuk() + Randomizer.nextInt(5)));
}
if (nEquip.getLuk() > 0 && (GameConstants.isTyrant(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setLuk((short) (nEquip.getLuk() + 22));
}
if (nEquip.getWatk() > 0 && GameConstants.isWeapon(nEquip.getItemId())) {
nEquip.setWatk((short) (nEquip.getWatk() + (nEquip.getWatk() / 50 + 1)));
}
if (nEquip.getWatk() > 0 && !GameConstants.isWeapon(nEquip.getItemId()) && Randomizer.nextInt(5) == 1 || Randomizer.nextInt(5) == 1 && !GameConstants.isWeapon(nEquip.getItemId())) {
nEquip.setWatk((short) (nEquip.getWatk() + Randomizer.nextInt(5)));
}
if (nEquip.getWatk() > 0 && GameConstants.isTyrant(nEquip.getItemId()) && nEquip.getEnhance() > 3) {
nEquip.setWatk((short) (nEquip.getWatk() + 5));
}
if (nEquip.getWdef() > 0 || Randomizer.nextInt(40) == 1) { //1/40
nEquip.setWdef((short) (nEquip.getWdef() + Randomizer.nextInt(5)));
}
if (nEquip.getMatk() > 0 && GameConstants.isWeapon(nEquip.getItemId())) {
nEquip.setMatk((short) (nEquip.getMatk() + (nEquip.getMatk() / 50 + 1)));
}
if (nEquip.getMatk() > 0 && GameConstants.isTyrant(nEquip.getItemId()) && nEquip.getEnhance() > 3) {
nEquip.setMatk((short) (nEquip.getMatk() + 5));
}
if (nEquip.getMdef() > 0 || Randomizer.nextInt(40) == 1) { //1/40
nEquip.setMdef((short) (nEquip.getMdef() + Randomizer.nextInt(5)));
}
if (nEquip.getAcc() > 0 || Randomizer.nextInt(20) == 1) { //1/20
nEquip.setAcc((short) (nEquip.getAcc() + Randomizer.nextInt(5)));
}
if (nEquip.getAvoid() > 0 || Randomizer.nextInt(20) == 1) { //1/20
nEquip.setAvoid((short) (nEquip.getAvoid() + Randomizer.nextInt(5)));
}
if (nEquip.getSpeed() > 0 || Randomizer.nextInt(10) == 1) { //1/10
nEquip.setSpeed((short) (nEquip.getSpeed() + Randomizer.nextInt(5)));
}
if (nEquip.getJump() > 0 || Randomizer.nextInt(10) == 1) { //1/10
nEquip.setJump((short) (nEquip.getJump() + Randomizer.nextInt(5)));
}
if (nEquip.getHp() > 0 || Randomizer.nextInt(5) == 1) { //1/5
nEquip.setHp((short) (nEquip.getHp() + Randomizer.nextInt(5)));
}
if (nEquip.getMp() > 0 || Randomizer.nextInt(5) == 1) { //1/5
nEquip.setMp((short) (nEquip.getMp() + Randomizer.nextInt(5)));
}
nEquip.setEnhance((byte) (nEquip.getEnhance() + 1));
}
break;
}
}
Dual Blade Character creation fixSpoiler:PHP Code:Line 48 in LoginInformationProvider.java
DualBlade(8, 0, 103050900, false, true, false, false, false, false),
Nova gear fixSpoiler:PHP Code:
in GameConstants.java
public static boolean isNovaGear(final int itemId) {
switch (itemId) {
//Boots
case 1072737: // Nova Hyades Boots
case 1072738: // Nova Hermes Boots
case 1072739: // Nova Charon Boots
case 1072740: // Nova Lycaon Boots
case 1072741: // Nova Altair Boots
//Cape
case 1102476: // Nova Hyades Cloak
case 1102477: // Nova Hermes Cloak
case 1102478: // Nova Charon Cloak
case 1102479: // Nova Lycaon Cloak
case 1102480: // Nova Altair Cloak
//Belt
case 1132169: // Nova Hyades Belt
case 1132170: // Nova Hermes Belt
case 1132171: // Nova Charon Belt
case 1132172: // Nova Lycaon Belt
case 1132173: // Nova Altair Belt
return true;
}
return false;
}
in MapleIteminformationprovider
(same as Tyrant fix just replace with this I added the entire method again for lazy leechers :D)
else if (GameConstants.isEquipScroll(scrollId.getItemId())) {
final int chanc = Math.max((scrollId.getItemId() == 2049300 || scrollId.getItemId() == 2049303 || scrollId.getItemId() == 2049306 ? 100 : (scrollId.getItemId() == 2049308 ? 50 : scrollId.getItemId() == 2049305 ? 60 : 80)) - (nEquip.getEnhance() * 10), 10) + added;
if (Randomizer.nextInt(100) > chanc) {
return null; //destroyed, nib
}
for (int i = 0; i < (scrollId.getItemId() == 2049308 ? 5 : (scrollId.getItemId() == 2049305 ? 4 : (scrollId.getItemId() == 2049304 ? 3 : scrollId.getItemId() == 2049309 ? 2 : 1))); i++) {
if (nEquip.getStr() > 0 || Randomizer.nextInt(50) == 1) { //1/50
nEquip.setStr((short) (nEquip.getStr() + Randomizer.nextInt(5)));
}
if (nEquip.getStr() > 0 && (GameConstants.isTyrant(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setStr((short) (nEquip.getStr() + 22));
} if (nEquip.getStr() > 0 && (GameConstants.isNovaGear(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setStr((short) (nEquip.getStr() + 12));
}
if (nEquip.getDex() > 0 || Randomizer.nextInt(50) == 1) { //1/50
nEquip.setDex((short) (nEquip.getDex() + Randomizer.nextInt(5)));
}
if (nEquip.getDex() > 0 && (GameConstants.isTyrant(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setDex((short) (nEquip.getDex() + 22));
} if (nEquip.getDex() > 0 && (GameConstants.isNovaGear(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setDex((short) (nEquip.getDex() + 12));
}
if (nEquip.getInt() > 0 || Randomizer.nextInt(50) == 1) { //1/50
nEquip.setInt((short) (nEquip.getInt() + Randomizer.nextInt(5)));
}
if (nEquip.getInt() > 0 && (GameConstants.isTyrant(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setInt((short) (nEquip.getInt() + 22));
}if (nEquip.getInt() > 0 && (GameConstants.isTyrant(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setInt((short) (nEquip.getInt() + 12));
}
if (nEquip.getLuk() > 0 || Randomizer.nextInt(50) == 1) { //1/50
nEquip.setLuk((short) (nEquip.getLuk() + Randomizer.nextInt(5)));
}
if (nEquip.getLuk() > 0 && (GameConstants.isTyrant(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setLuk((short) (nEquip.getLuk() + 22));
}if (nEquip.getLuk() > 0 && (GameConstants.isNovaGear(nEquip.getItemId()) || Randomizer.nextInt(1) == 1)) {
nEquip.setLuk((short) (nEquip.getLuk() + 12));
}
if (nEquip.getWatk() > 0 && GameConstants.isWeapon(nEquip.getItemId())) {
nEquip.setWatk((short) (nEquip.getWatk() + (nEquip.getWatk() / 50 + 1)));
}
if (nEquip.getWatk() > 0 && !GameConstants.isWeapon(nEquip.getItemId()) && Randomizer.nextInt(5) == 1 || Randomizer.nextInt(5) == 1 && !GameConstants.isWeapon(nEquip.getItemId())) {
nEquip.setWatk((short) (nEquip.getWatk() + Randomizer.nextInt(5)));
}
if (nEquip.getWatk() > 0 && GameConstants.isTyrant(nEquip.getItemId()) && nEquip.getEnhance() > 3) {
nEquip.setWatk((short) (nEquip.getWatk() + 5));
} if (nEquip.getWatk() > 0 && GameConstants.isNovaGear(nEquip.getItemId()) && nEquip.getEnhance() > 5) {
nEquip.setWatk((short) (nEquip.getWatk() + 2));
}
if (nEquip.getWdef() > 0 || Randomizer.nextInt(40) == 1) { //1/40
nEquip.setWdef((short) (nEquip.getWdef() + Randomizer.nextInt(5)));
}
if (nEquip.getMatk() > 0 && GameConstants.isWeapon(nEquip.getItemId())) {
nEquip.setMatk((short) (nEquip.getMatk() + (nEquip.getMatk() / 50 + 1)));
}
if (nEquip.getMatk() > 0 && GameConstants.isTyrant(nEquip.getItemId()) && nEquip.getEnhance() > 3) {
nEquip.setMatk((short) (nEquip.getMatk() + 5));
} if (nEquip.getMatk() > 0 && GameConstants.isNovaGear(nEquip.getItemId()) && nEquip.getEnhance() > 5) {
nEquip.setMatk((short) (nEquip.getMatk() + 2));
}
if (nEquip.getMdef() > 0 || Randomizer.nextInt(40) == 1) { //1/40
nEquip.setMdef((short) (nEquip.getMdef() + Randomizer.nextInt(5)));
}
if (nEquip.getAcc() > 0 || Randomizer.nextInt(20) == 1) { //1/20
nEquip.setAcc((short) (nEquip.getAcc() + Randomizer.nextInt(5)));
}
if (nEquip.getAvoid() > 0 || Randomizer.nextInt(20) == 1) { //1/20
nEquip.setAvoid((short) (nEquip.getAvoid() + Randomizer.nextInt(5)));
}
if (nEquip.getSpeed() > 0 || Randomizer.nextInt(10) == 1) { //1/10
nEquip.setSpeed((short) (nEquip.getSpeed() + Randomizer.nextInt(5)));
}
if (nEquip.getJump() > 0 || Randomizer.nextInt(10) == 1) { //1/10
nEquip.setJump((short) (nEquip.getJump() + Randomizer.nextInt(5)));
}
if (nEquip.getHp() > 0 || Randomizer.nextInt(5) == 1) { //1/5
nEquip.setHp((short) (nEquip.getHp() + Randomizer.nextInt(5)));
}
if (nEquip.getMp() > 0 || Randomizer.nextInt(5) == 1) { //1/5
nEquip.setMp((short) (nEquip.getMp() + Randomizer.nextInt(5)));
}
nEquip.setEnhance((byte) (nEquip.getEnhance() + 1));
}
break;
Nx Prepaid not showing upSpoiler:PHP Code:
CSPakcet.Java line 416
public static byte[] showNXMapleTokens(MapleCharacter chr) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.CS_UPDATE.getValue());
mplew.writeInt(chr.getCSPoints(1)); // NX Credit
mplew.writeInt(chr.getCSPoints(2)); // MPoint
mplew.writeInt(chr.getCSPoints(3)); // Maple Rewards (Not in v144.3) but needed to show Nx prepaid for some reason ._.
mplew.writeInt(chr.getCSPoints(4)); // Nx Prepaid
return mplew.getPacket();
}
CancelBuff e38 fixSpoiler:PHP Code:
CWvsContext
public static byte[] cancelBuff(List<MapleBuffStat> statups) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.CANCEL_BUFF.getValue());
PacketHelper.writeMask(mplew, statups);
for (MapleBuffStat z : statups) {
if (z.canStack()) {
mplew.writeInt(0);
}
}
mplew.writeZeroBytes(2);
mplew.writeLong(0L);
mplew.writeLong(0L);
mplew.writeLong(0L);
mplew.write(0);
return mplew.getPacket();
}
updated 17/03/2015 11:35EST



Reply With Quote
(bug fix)


