Originally Posted by
_Patrick_
Post the decoding bit?
What do you mean by the decoding?
Code:
case SEND_PM:
long sendMessageToFriendId = c.getInStream().readQWord();
byte pmchatText[] = new byte[100];
int pmchatTextSize = (byte) (packetSize - 8);
c.getInStream().readBytes(pmchatText, pmchatTextSize, 0);
c.getPA().writePMLog(Misc.textUnpack(pmchatText, packetSize - 8));
if (!c.InDung() && !c.inDungBossRoom()) {
for (int i : Config.DUNG_ARM) {
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (Server.playerHandler.players[j] != null) {
Client c2 = (Client) Server.playerHandler.players[j];
if (c.getItems().playerHasItem(i, 1)) {
c.logout();
return;
}
}
}
}
}
if (Connection.isMuted(c))
break;
for (int i1 = 0; i1 < c.friends.length; i1++) {
if (c.friends[i1] == sendMessageToFriendId) {
boolean pmSent = false;
for (int i2 = 1; i2 < Config.MAX_PLAYERS; i2++) {
if (Server.playerHandler.players[i2] != null
&& Server.playerHandler.players[i2].isActive
&& Misc.playerNameToInt64(Server.playerHandler.players[i2].playerName) == sendMessageToFriendId) {
Client o = (Client) Server.playerHandler.players[i2];
if (o != null) {
if (Server.playerHandler.players[i2].privateChat == 0
|| (Server.playerHandler.players[i2].privateChat == 4 && o
.getPA()
.isInPM(Misc
.playerNameToInt64(c.playerName)))) {
o.getPA()
.sendPM(Misc
.playerNameToInt64(c.playerName),
c.playerRights, pmchatText,
pmchatTextSize);
pmSent = true;
}
}
break;
}
}
if (!pmSent) {
c.sendMessage("That player is currently offline.");
break;
}
}
}
break;
Code:
public static String textUnpack(byte packedData[], int size) {
int idx = 0, highNibble = -1;
for (int i = 0; i < size * 2; i++) {
int val = packedData[i / 2] >> (4 - 4 * (i % 2)) & 0xf;
if (highNibble == -1) {
if (val < 13)
decodeBuf[idx++] = xlateTable[val];
else
highNibble = val;
} else {
decodeBuf[idx++] = xlateTable[((highNibble << 4) + val) - 195];
highNibble = -1;
}
}
return new String(decodeBuf, 0, idx);
}