Updating damage parsing to v97
I would use xeon one if i could, but alot of stuff is different in aurasea.
So after comparing xeon and aurasea/tetrasea damage parsing, i came up with this
PHP Code:
public static final AttackInfo parseDmgM(final LittleEndianAccessor lea, final MapleCharacter chr) {
//System.out.println(lea.toString());
final AttackInfo ret = new AttackInfo();
lea.skip(1);
boolean unkk = false;
/*if (!GameConstants.GMS) {
final int unkByte = lea.readByte();
unkk = unkByte == -1 || unkByte == 0x1B || unkByte == -64 || unkByte == 0xB7;
lea.skip(unkk ? 7 : 8);
}*/
lea.skip(8);
ret.tbyte = lea.readByte();
//System.out.println("TBYTE: " + tbyte);
ret.targets = (byte) ((ret.tbyte >>> 4) & 0xF);
ret.hits = (byte) (ret.tbyte & 0xF);
lea.skip(8);
ret.skill = lea.readInt();
if (ret.skill >= 91000000) { //guild/recipe? no
return null;
}
//lea.skip(GameConstants.GMS ? 9 : (unkk ? 17 : 13));
//lea.skip(17);// ORDER [1] byte on bigbang, [4] bytes on v.79, [4] bytes on v.80, [1] byte on v.82
lea.skip(1);
lea.skip(4);
lea.skip(4);
lea.skip(8);
switch (ret.skill) {
case 5101004: // Corkscrew
case 15101003: // Cygnus corkscrew
case 5201002: // Gernard
case 14111006: // Poison bomb
case 4341002:
case 4341003:
case 5301001:
case 5300007:
ret.charge = lea.readInt();
break;
default:
ret.charge = 0;
break;
}
ret.display = lea.readByte();
ret.unk = lea.readByte();
//if (GameConstants.isDemon(ret.skill / 10000) && (ret.skill / 1000) % 10 == 0) { //passive skill
// lea.skip(1); //1, 2, 3, or 4; which hit in the combo
//}
lea.skip(5); //big bang
lea.skip(1); // Weapon class
ret.speed = lea.readByte(); // Confirmed
ret.lastAttackTickCount = lea.readInt(); // Ticks - 4 bytes
lea.skip(4); //0
ret.allDamage = new ArrayList<AttackPair>();
if (ret.skill == 4211006) { // Meso Explosion
return parseMesoExplosion(lea, ret);
}
int damage, oid;
List<Pair<Integer, Boolean>> allDamageNumbers;
for (int i = 0; i < ret.targets; i++) {
oid = lea.readInt();
//if (chr.getMap().isTown()) {
// final MapleMonster od = chr.getMap().getMonsterByOid(oid);
//if (od != null && od.getLinkCID() > 0) {
// return null;
// }
//}
lea.skip(14); // [1] Always 6?, [3] unk, [4] Pos1, [4] Pos2, [2] seems to change randomly for some attack
allDamageNumbers = new ArrayList<Pair<Integer, Boolean>>();
for (int j = 0; j < ret.hits; j++) {
damage = lea.readInt();
// System.out.println("Damage: " + damage);
allDamageNumbers.add(new Pair<Integer, Boolean>(Integer.valueOf(damage), false));
}
lea.skip(4); // CRC of monster [Wz Editing]
ret.allDamage.add(new AttackPair(Integer.valueOf(oid), allDamageNumbers));
}
ret.position = lea.readPos();
return ret;
}
I'm sure it should work but the damages are still not being applied to the enemy. (Close range attacks)
I'm guessing it could be something else?
note that i just started learning more about packet stuff lately.
tried to get it working for the whole day but honestly i couldn't get it to so i figured that i'd make a help thread and see if anyone know what could be going on here.