mirror of
https://github.com/2003scape/deep-c-rsc.git
synced 2024-03-22 05:49:51 -04:00
102 lines
3.4 KiB
Java
102 lines
3.4 KiB
Java
public class ChatMessage {
|
|
|
|
public static byte scrambledbytes[] = new byte[100];
|
|
public static char chars[] = new char[100];
|
|
private static char charmap[] = {
|
|
' ', 'e', 't', 'a', 'o', 'i', 'h', 'n', 's', 'r',
|
|
'd', 'l', 'u', 'm', 'w', 'c', 'y', 'f', 'g', 'p',
|
|
'b', 'v', 'k', 'x', 'j', 'q', 'z', '0', '1', '2',
|
|
'3', '4', '5', '6', '7', '8', '9', ' ', '!', '?',
|
|
'.', ',', ':', ';', '(', ')', '-', '&', '*', '\\',
|
|
'\'', '@', '#', '+', '=', '\243', '$', '%', '"', '[',
|
|
']'
|
|
};
|
|
|
|
public static String descramble(byte buff[], int off, int len) {
|
|
try {
|
|
int newLen = 0;
|
|
int l = -1;
|
|
for (int idx = 0; idx < len; idx++) {
|
|
int current = buff[off++] & 0xff;
|
|
int k1 = current >> 4 & 0xf;
|
|
if (l == -1) {
|
|
if (k1 < 13)
|
|
chars[newLen++] = charmap[k1];
|
|
else
|
|
l = k1;
|
|
} else {
|
|
chars[newLen++] = charmap[((l << 4) + k1) - 195];
|
|
l = -1;
|
|
}
|
|
k1 = current & 0xf;
|
|
if (l == -1) {
|
|
if (k1 < 13)
|
|
chars[newLen++] = charmap[k1];
|
|
else
|
|
l = k1;
|
|
} else {
|
|
chars[newLen++] = charmap[((l << 4) + k1) - 195];
|
|
l = -1;
|
|
}
|
|
}
|
|
|
|
boolean flag = true;
|
|
for (int l1 = 0; l1 < newLen; l1++) {
|
|
char c = chars[l1];
|
|
if (l1 > 4 && c == '@')
|
|
chars[l1] = ' ';
|
|
if (c == '%')
|
|
chars[l1] = ' ';
|
|
if (flag && c >= 'a' && c <= 'z') {
|
|
chars[l1] += '\uFFE0';// ????? ¢ 65504
|
|
flag = false;
|
|
}
|
|
if (c == '.' || c == '!')
|
|
flag = true;
|
|
}
|
|
|
|
return new String(chars, 0, newLen);
|
|
} catch (Exception Ex) {
|
|
return ".";
|
|
}
|
|
}
|
|
|
|
public static int scramble(String s) {
|
|
if (s.length() > 80)
|
|
s = s.substring(0, 80);
|
|
s = s.toLowerCase();
|
|
int off = 0;
|
|
int lshift = -1;
|
|
for (int k = 0; k < s.length(); k++) {
|
|
char currentchar = s.charAt(k);
|
|
int foundcharmapidx = 0;
|
|
for (int n = 0; n < charmap.length; n++) {
|
|
if (currentchar != charmap[n])
|
|
continue;
|
|
foundcharmapidx = n;
|
|
break;
|
|
}
|
|
|
|
if (foundcharmapidx > 12)
|
|
foundcharmapidx += 195;
|
|
if (lshift == -1) {
|
|
if (foundcharmapidx < 13)
|
|
lshift = foundcharmapidx;
|
|
else
|
|
scrambledbytes[off++] = (byte) foundcharmapidx;
|
|
} else if (foundcharmapidx < 13) {
|
|
scrambledbytes[off++] = (byte) ((lshift << 4) + foundcharmapidx);
|
|
lshift = -1;
|
|
} else {
|
|
scrambledbytes[off++] = (byte) ((lshift << 4) + (foundcharmapidx >> 4));
|
|
lshift = foundcharmapidx & 0xf;
|
|
}
|
|
}
|
|
|
|
if (lshift != -1)
|
|
scrambledbytes[off++] = (byte) (lshift << 4);
|
|
return off;
|
|
}
|
|
|
|
}
|