public static MaplePacket spawnPlayerMapobject(MapleCharacter chr) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.SPAWN_PLAYER.getValue());
mplew.writeInt(chr.getId());
mplew.write(chr.getLevel()); //v83
mplew.writeMapleAsciiString(chr.getName());
mplew.writeShort(0);
if (chr.getGuildId() < 1) { // for now
mplew.writeMapleAsciiString("");
mplew.write(new byte[6]);
} else {
MapleGuildSummary gs = chr.getClient().getChannelServer().getGuildSummary(chr.getGuildId());
if (gs != null) {
mplew.writeMapleAsciiString(gs.getName());
mplew.writeShort(gs.getLogoBG());
mplew.write(gs.getLogoBGColor());
mplew.writeShort(gs.getLogo());
mplew.write(gs.getLogoColor());
} else {
mplew.writeMapleAsciiString("");
mplew.write(new byte[6]);
}
}
mplew.write(3); // v97
mplew.writeInt(0);
mplew.writeShort(0);
mplew.write(0xF8);
if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
mplew.writeInt(2);
} else {
mplew.writeInt(0);
}
long buffmask = 0;
Integer buffvalue = null;
if (chr.getBuffedValue(MapleBuffStat.DARKSIGHT) != null || chr.isHidden()) {
buffmask |= MapleBuffStat.DARKSIGHT.getValue();
}
// if (chr.getBuffedValue(MapleBuffStat.COMBO) != null) {
// buffmask |= MapleBuffStat.COMBO.getValue();
// buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.COMBO).intValue());
//}
if (chr.getBuffedValue(MapleBuffStat.SHADOWPARTNER) != null) {
buffmask |= MapleBuffStat.SHADOWPARTNER.getValue();
}
if (chr.getBuffedValue(MapleBuffStat.SOULARROW) != null) {
buffmask |= MapleBuffStat.SOULARROW.getValue();
}
/* if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.MORPH).intValue());
}
if (chr.getBuffedValue(MapleBuffStat.ENERGY_CHARGE) != null) {
buffmask |= MapleBuffStat.ENERGY_CHARGE.getValue();
buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.ENERGY_CHARGE).intValue());
}//FIX THIS^*/
mplew.writeInt((int) ((buffmask >> 32) & 0xffffffffL));
if (buffvalue != null) {
// if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { //TEST
// mplew.writeShort(buffvalue);
// } else {
mplew.write(buffvalue.byteValue());
// }
}
mplew.writeInt((int) (buffmask & 0xffffffffL));
int CHAR_MAGIC_SPAWN = Randomizer.nextInt(5000000);
mplew.writeLong(0);
mplew.writeShort(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeLong(0);
mplew.writeShort(0);
mplew.write(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);//v74
mplew.writeLong(0);
mplew.writeShort(0);
mplew.write(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeShort(0);
mplew.write(0);
if (chr.getBuffedValue(MapleBuffStat.MONSTER_RIDING) != null && chr.getMount() != null) {
mplew.writeInt(chr.getMount().getItemId());
mplew.writeInt(chr.getMount().getSkillId()); // TODO: mechanic support :o
} else {
mplew.writeLong(0);
}
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeLong(0);
mplew.write(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeLong(0);
mplew.writeLong(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeLong(0);
mplew.writeInt(0);
mplew.write(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeShort(0);
mplew.write(0);
mplew.writeShort(chr.getJob().getId());
addCharLook(mplew, chr, false); // 31 old; 28 b4 writePos
mplew.writeLong(0);
mplew.writeInt(0);
mplew.writeInt(0);
mplew.writeInt(0); // item effect
mplew.writeInt(chr.getChair()); // chair
mplew.writePos(chr.getPosition());
mplew.write(chr.getStance());
mplew.writeShort(0); // fh?
mplew.writeShort(0);
if (chr.getMount() == null) {
mplew.writeInt(1); // mob level
mplew.writeLong(0); // mob exp + tiredness
} else {
mplew.writeInt(chr.getMount().getLevel());
mplew.writeInt(chr.getMount().getExp());
mplew.writeInt(chr.getMount().getTiredness());
}
mplew.write(0); // announce box, our method is hackish
if (chr.getChalkboard() != null) {
mplew.write(1);
mplew.writeMapleAsciiString(chr.getChalkboard());
} else {
mplew.write(0);
}
addRingLook(mplew, chr, true);
addRingLook(mplew, chr, false);
addMarriageRingLook(mplew, chr);
mplew.writeShort(0);
mplew.writeInt(0);
return mplew.getPacket();
}