spawnmonster packet log
E2 01 0A EC 22 00 01 F6 76 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 13 00 00 00 00 00 88 00 00 00 00 00 00 00 00 79 1B 00 00 00 00 00 00 00 00 79 1B 00 00 00 00 00 00 00 00 79 1B 00 00 00 00 00 00 00 00 79 1B 00 00 00 00 00 7C 05 C9 FF 03 3F 00 3F 00 FF FF 7D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF
spawnmonster
public static byte[] spawnMonster(MapleMonster life, int spawnType, int link) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.SPAWN_MONSTER.getValue());
mplew.writeInt(life.getObjectId());
mplew.write(1);
mplew.writeInt(life.getId());
addMonsterStatus(mplew, life);
mplew.writePos(life.getTruePosition());
mplew.write(life.getStance());
mplew.writeShort(0);
mplew.writeShort(life.getFh());
mplew.write(spawnType);
if ((spawnType == -3) || (spawnType >= 0)) {
mplew.writeInt(link);
}
mplew.write(life.getCarnivalTeam());
mplew.writeInt(63000);
mplew.writeLong(0);//v125 change
mplew.writeLong(0);//v125 change
mplew.writeInt(0);//v125
mplew.write(-1);
return mplew.getPacket();
}
addMonsterStatus
public static void addMonsterStatus(MaplePacketLittleEndianWriter mplew, MapleMonster life) {
/* 290 */ if (life.getStati().size() <= 1) {
/* 291 */ life.addEmpty();
}
/* 293 */ mplew.write(life.getChangedStats() != null ? 1 : 0);
/* 294 */ if (life.getChangedStats() != null) {
/* 295 */ mplew.writeInt(life.getChangedStats().hp > 2147483647 ? 2147483647 : (int) life.getChangedStats().hp);
/* 296 */ mplew.writeInt(life.getChangedStats().mp);
/* 297 */ mplew.writeInt(life.getChangedStats().exp);
/* 298 */ mplew.writeInt(life.getChangedStats().watk);
/* 299 */ mplew.writeInt(life.getChangedStats().matk);
/* 300 */ mplew.writeInt(life.getChangedStats().PDRate);
/* 301 */ mplew.writeInt(life.getChangedStats().MDRate);
/* 302 */ mplew.writeInt(life.getChangedStats().acc);
/* 303 */ mplew.writeInt(life.getChangedStats().eva);
/* 304 */ mplew.writeInt(life.getChangedStats().pushed);
/* 305 */ mplew.writeInt(life.getChangedStats().level);
}
/* 307 */ boolean ignore_imm = (life.getStati().containsKey(MonsterStatus.WEAPON_DAMAGE_REFLECT)) || (life.getStati().containsKey(MonsterStatus.MAGIC_DAMAGE_REFLECT));
/* 308 */ Collection<MonsterStatusEffect> buffs = life.getStati().values();
/* 309 */ getLongMask_NoRef(mplew, buffs, ignore_imm);
for (MonsterStatusEffect buff : buffs) {
if ((buff != null) && (buff.getStati() != MonsterStatus.WEAPON_DAMAGE_REFLECT) && (buff.getStati() != MonsterStatus.MAGIC_DAMAGE_REFLECT) && ((!ignore_imm) || ((buff.getStati() != MonsterStatus.WEAPON_IMMUNITY) && (buff.getStati() != MonsterStatus.MAGIC_IMMUNITY) && (buff.getStati() != MonsterStatus.DAMAGE_IMMUNITY)))) {
if ((buff.getStati() != MonsterStatus.SUMMON) && (buff.getStati() != MonsterStatus.EMPTY_3)) {
if ((buff.getStati() == MonsterStatus.EMPTY_1) || (buff.getStati() == MonsterStatus.EMPTY_2) || (buff.getStati() == MonsterStatus.EMPTY_3) || (buff.getStati() == MonsterStatus.EMPTY_4) || (buff.getStati() == MonsterStatus.EMPTY_5) || (buff.getStati() == MonsterStatus.EMPTY_6)) {
mplew.writeShort(Integer.valueOf((int) System.currentTimeMillis()).shortValue());
mplew.writeShort(0);
} else if (buff.getStati() == MonsterStatus.EMPTY_7) {
mplew.write(0);
} else {
mplew.writeInt(buff.getX().intValue());
}
if (buff.getMobSkill() != null) {
mplew.writeShort(buff.getMobSkill().getSkillId());
mplew.writeShort(buff.getMobSkill().getSkillLevel());
} else if (buff.getSkill() > 0) {
mplew.writeInt(buff.getSkill());
}
}
if (buff.getStati() != MonsterStatus.EMPTY_7) {
mplew.writeShort(buff.getStati().isEmpty() ? 0 : buff.getStati() == MonsterStatus.HYPNOTIZE ? 40 : 1);
if ((buff.getStati() == MonsterStatus.EMPTY_1) || (buff.getStati() == MonsterStatus.EMPTY_3)) {
mplew.writeShort(0);
} else if ((buff.getStati() == MonsterStatus.EMPTY_4) || (buff.getStati() == MonsterStatus.EMPTY_5)) {
mplew.writeInt(0);
}
}
}
}
}
getLongMask_NoRef
private static void getLongMask_NoRef(MaplePacketLittleEndianWriter mplew, Collection<MonsterStatusEffect> ss, boolean ignore_imm) {
int[] mask = new int[8];
for (MonsterStatusEffect statup : ss) {
if ((statup != null) && (statup.getStati() != MonsterStatus.WEAPON_DAMAGE_REFLECT) && (statup.getStati() != MonsterStatus.MAGIC_DAMAGE_REFLECT) && ((!ignore_imm) || ((statup.getStati() != MonsterStatus.WEAPON_IMMUNITY) && (statup.getStati() != MonsterStatus.MAGIC_IMMUNITY) && (statup.getStati() != MonsterStatus.DAMAGE_IMMUNITY)))) {
mask[(statup.getStati().getPosition() - 1)] |= statup.getStati().getValue();
}
}
for (int i = mask.length; i >= 1; i--) {
mplew.writeInt(mask[(i - 1)]);
}
}
E2 01 0A EC 22 00 01 F6 76 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 13 00 00 00 00 00 88 00 00 00 00 00 00 00 00 79 1B 00 00 00 00 00 00 00 00 79 1B 00 00 00 00 00 00 00 00 79 1B 00 00 00 00 00 00 00 00 79 1B 00 00 00 00 00 7C 05 C9 FF 03 3F 00 3F 00 FF FF 7D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF
spawnmonster
public static byte[] spawnMonster(MapleMonster life, int spawnType, int link) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.SPAWN_MONSTER.getValue());
mplew.writeInt(life.getObjectId());
mplew.write(1);
mplew.writeInt(life.getId());
addMonsterStatus(mplew, life);
mplew.writePos(life.getTruePosition());
mplew.write(life.getStance());
mplew.writeShort(0);
mplew.writeShort(life.getFh());
mplew.write(spawnType);
if ((spawnType == -3) || (spawnType >= 0)) {
mplew.writeInt(link);
}
mplew.write(life.getCarnivalTeam());
mplew.writeInt(63000);
mplew.writeLong(0);//v125 change
mplew.writeLong(0);//v125 change
mplew.writeInt(0);//v125
mplew.write(-1);
return mplew.getPacket();
}
addMonsterStatus
public static void addMonsterStatus(MaplePacketLittleEndianWriter mplew, MapleMonster life) {
/* 290 */ if (life.getStati().size() <= 1) {
/* 291 */ life.addEmpty();
}
/* 293 */ mplew.write(life.getChangedStats() != null ? 1 : 0);
/* 294 */ if (life.getChangedStats() != null) {
/* 295 */ mplew.writeInt(life.getChangedStats().hp > 2147483647 ? 2147483647 : (int) life.getChangedStats().hp);
/* 296 */ mplew.writeInt(life.getChangedStats().mp);
/* 297 */ mplew.writeInt(life.getChangedStats().exp);
/* 298 */ mplew.writeInt(life.getChangedStats().watk);
/* 299 */ mplew.writeInt(life.getChangedStats().matk);
/* 300 */ mplew.writeInt(life.getChangedStats().PDRate);
/* 301 */ mplew.writeInt(life.getChangedStats().MDRate);
/* 302 */ mplew.writeInt(life.getChangedStats().acc);
/* 303 */ mplew.writeInt(life.getChangedStats().eva);
/* 304 */ mplew.writeInt(life.getChangedStats().pushed);
/* 305 */ mplew.writeInt(life.getChangedStats().level);
}
/* 307 */ boolean ignore_imm = (life.getStati().containsKey(MonsterStatus.WEAPON_DAMAGE_REFLECT)) || (life.getStati().containsKey(MonsterStatus.MAGIC_DAMAGE_REFLECT));
/* 308 */ Collection<MonsterStatusEffect> buffs = life.getStati().values();
/* 309 */ getLongMask_NoRef(mplew, buffs, ignore_imm);
for (MonsterStatusEffect buff : buffs) {
if ((buff != null) && (buff.getStati() != MonsterStatus.WEAPON_DAMAGE_REFLECT) && (buff.getStati() != MonsterStatus.MAGIC_DAMAGE_REFLECT) && ((!ignore_imm) || ((buff.getStati() != MonsterStatus.WEAPON_IMMUNITY) && (buff.getStati() != MonsterStatus.MAGIC_IMMUNITY) && (buff.getStati() != MonsterStatus.DAMAGE_IMMUNITY)))) {
if ((buff.getStati() != MonsterStatus.SUMMON) && (buff.getStati() != MonsterStatus.EMPTY_3)) {
if ((buff.getStati() == MonsterStatus.EMPTY_1) || (buff.getStati() == MonsterStatus.EMPTY_2) || (buff.getStati() == MonsterStatus.EMPTY_3) || (buff.getStati() == MonsterStatus.EMPTY_4) || (buff.getStati() == MonsterStatus.EMPTY_5) || (buff.getStati() == MonsterStatus.EMPTY_6)) {
mplew.writeShort(Integer.valueOf((int) System.currentTimeMillis()).shortValue());
mplew.writeShort(0);
} else if (buff.getStati() == MonsterStatus.EMPTY_7) {
mplew.write(0);
} else {
mplew.writeInt(buff.getX().intValue());
}
if (buff.getMobSkill() != null) {
mplew.writeShort(buff.getMobSkill().getSkillId());
mplew.writeShort(buff.getMobSkill().getSkillLevel());
} else if (buff.getSkill() > 0) {
mplew.writeInt(buff.getSkill());
}
}
if (buff.getStati() != MonsterStatus.EMPTY_7) {
mplew.writeShort(buff.getStati().isEmpty() ? 0 : buff.getStati() == MonsterStatus.HYPNOTIZE ? 40 : 1);
if ((buff.getStati() == MonsterStatus.EMPTY_1) || (buff.getStati() == MonsterStatus.EMPTY_3)) {
mplew.writeShort(0);
} else if ((buff.getStati() == MonsterStatus.EMPTY_4) || (buff.getStati() == MonsterStatus.EMPTY_5)) {
mplew.writeInt(0);
}
}
}
}
}
getLongMask_NoRef
private static void getLongMask_NoRef(MaplePacketLittleEndianWriter mplew, Collection<MonsterStatusEffect> ss, boolean ignore_imm) {
int[] mask = new int[8];
for (MonsterStatusEffect statup : ss) {
if ((statup != null) && (statup.getStati() != MonsterStatus.WEAPON_DAMAGE_REFLECT) && (statup.getStati() != MonsterStatus.MAGIC_DAMAGE_REFLECT) && ((!ignore_imm) || ((statup.getStati() != MonsterStatus.WEAPON_IMMUNITY) && (statup.getStati() != MonsterStatus.MAGIC_IMMUNITY) && (statup.getStati() != MonsterStatus.DAMAGE_IMMUNITY)))) {
mask[(statup.getStati().getPosition() - 1)] |= statup.getStati().getValue();
}
}
for (int i = mask.length; i >= 1; i--) {
mplew.writeInt(mask[(i - 1)]);
}
}