[v157] addCharacterInfo Mask (warp_to_map/ setfield/ charDataDecode)
Hi there!
I'm still trying to get a v157 going :/ Atm I'm looking to (properly) update the addCharacterInfo packet to get a working WARP_TO_MAP and be able to get in-game.
The one thing I have no clue about though, is how do I get the mask if I can't sniff the version? Is it even possible to obtain via IDA?
Or does anyone else happen to still have a v157 mask? :blush:
Here is an example of my current [v144/v145] addCharacterInfo:
PHP Code:
public static void addCharacterInfo(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) {
long mask = 0xFD_FF_FF_FF_FF_FF_FF_FFL;//0xFF_BF_FF_FF_FF_FF_FF_FFL;
mplew.writeLong(mask);
mplew.write(0);
for (int i = 0; i < 3; i++) {
mplew.writeInt(0);
}
mplew.write(0);
mplew.write(0);
mplew.writeInt(0);
mplew.write(0);
if ((mask & 1) != 0) {
addCharStats(mplew, chr);
mplew.write(chr.getBuddylist().getCapacity());
mplew.write(chr.getBlessOfFairyOrigin() != null);
if (chr.getBlessOfFairyOrigin() != null) {
mplew.writeMapleAsciiString(chr.getBlessOfFairyOrigin());
}
mplew.write(chr.getBlessOfEmpressOrigin() != null);
if (chr.getBlessOfEmpressOrigin() != null) {
mplew.writeMapleAsciiString(chr.getBlessOfEmpressOrigin());
}
MapleQuestStatus ultExplorer = chr.getQuestNoAdd(MapleQuest.getInstance(GameConstants.ULT_EXPLORER));
mplew.write((ultExplorer != null) && (ultExplorer.getCustomData() != null));
if ((ultExplorer != null) && (ultExplorer.getCustomData() != null)) {
mplew.writeMapleAsciiString(ultExplorer.getCustomData());
}
}
if ((mask & 2) != 0) {
addMoneyInfo(mplew, chr);
}
if ((mask & 8) != 0) {
addInventoryInfo(mplew, chr);
}
if ((mask & 0x100) != 0) {
addSkillInfo(mplew, chr);
}
if ((mask & 0x8000) != 0) {
addCoolDownInfo(mplew, chr);
}
if ((mask & 0x200) != 0) {
addStartedQuestInfo(mplew, chr);
}
if ((mask & 0x4000) != 0) {
addCompletedQuestInfo(mplew, chr);
}
if ((mask & 0x400) != 0) {
//mplew.writeShort(0);
addUnk400Info(mplew, chr);
}
if ((mask & 0x800) != 0) {
addRingInfo(mplew, chr);
}
if ((mask & 0x1000) != 0) {
addRocksInfo(mplew, chr);
}
if ((mask & 0x20000) != 0) {
mplew.writeInt(0);
}
if ((mask & 0x10000) != 0) {
addMonsterBookInfo(mplew, chr);
}
mplew.writeShort(0);
mplew.writeShort(0);
if ((mask & 0x40000) != 0) {
chr.QuestInfoPacket(mplew);
}
mplew.writeShort(0);//new143
if ((mask & 0x200000) != 0) {
if ((chr.getJob() >= 3300) && (chr.getJob() <= 3312)) {
addJaguarInfo(mplew, chr);
}
}
if (GameConstants.isZero(chr.getJob())) {
addZeroInfo(mplew, chr);
//chr.getStat().zeroData(mplew, chr);
}
mplew.writeShort(0);
mplew.writeShort(0);
if ((mask & 0x10000000) != 0) {
addStealSkills(mplew, chr);
}
if ((mask & 0x80000000) != 0) {
addAbilityInfo(mplew, chr);
}
mplew.writeInt(0); //new v134
mplew.write(0);
addHonorInfo(mplew, chr);
if (GameConstants.isAngelicBuster(chr.getJob())) {
mplew.writeInt(1);
mplew.writeInt(21173); //face
mplew.writeInt(37141); //hair
mplew.writeInt(1051291); // dressup suit cant unequip
mplew.writeInt(0);
mplew.writeInt(0);
mplew.write(0);
} else {
mplew.writeLong(1);
mplew.writeZeroBytes(17);
}
mplew.writeLong(getTime(-2));
addEvolutionInfo(mplew, chr);
mplew.writeZeroBytes(3);//new 144
mplew.write(0); //farm monsters length
//if length > 1 for each monster int id and long expire
addFarmInfo(mplew, chr.getClient(), 0);
mplew.writeInt(5);//-1
mplew.writeInt(0);
mplew.write(0);
mplew.writeInt(0);
mplew.writeLong(getTime(-2));
mplew.writeInt(0);
//newshit 143
mplew.write(0);
mplew.writeShort(1);
mplew.writeInt(1);
mplew.writeInt(0);
mplew.writeInt(100);//was0 - 143
mplew.writeLong(getTime(-2));
mplew.writeInt(0);
if ((mask & 0x2000) != 0) {
addCoreAura(mplew, chr); //84 bytes + boolean (85 total)
}
mplew.writeShort(0); //for <short> length write 2 shorts
mplew.writeInt(chr.getClient().getAccID());
mplew.writeInt(chr.getId());
mplew.writeInt(4); // size?
mplew.writeInt(0);
addRedLeafInfo(mplew, chr);
}
I'm pretty sure even if I have the mask, it'll still be very difficult to update the rest of it, but at least I'll get a step further.
Re: [v157] addCharacterInfo Mask (warp_to_map/ setfield/ charDataDecode)
The mask is -1 by default for all versions. Also, "flag" is a better name. It's not in IDA simply because IDA reads it and reads the packet accordingly.
Good luck!
Re: [v157] addCharacterInfo Mask (warp_to_map/ setfield/ charDataDecode)
Quote:
Originally Posted by
Fraysa
The mask is -1 by default for all versions. Also, "flag" is a better name. It's not in IDA simply because IDA reads it and reads the packet accordingly.
Good luck!
Alright yep, that makes sense. Good to know that it's always -1 :D That'll make things much easier. Thank you!
Re: [v157] addCharacterInfo Mask (warp_to_map/ setfield/ charDataDecode)
Quote:
Originally Posted by
Novak
Alright yep, that makes sense. Good to know that it's always -1 :D That'll make things much easier. Thank you!
No problem. If have any other questions regarding updating your server please do ask, I'm pretty bored.
Re: [v157] addCharacterInfo Mask (warp_to_map/ setfield/ charDataDecode)
Quote:
Originally Posted by
Fraysa
The mask is -1 by default for all versions. Also, "flag" is a better name. It's not in IDA simply because IDA reads it and reads the packet accordingly.
Good luck!
if he's gonna rename it @Novak might as well name it correct, it's usFlag