package com.rscd.packethandler; import com.rscd.model.Player; import com.rscd.packet.Packet; import org.apache.mina.common.IoSession; public class Chat extends GameEnginePacketHandler { public void handlePacket(Packet p, IoSession session) { System.out.println("Chat Stuff goes here"); } public static long playerNameToInt64(String s) { long l = 0L; for(int i = 0; i < s.length() && i < 12; i++) { char c = s.charAt(i); l *= 37L; if(c >= 'A' && c <= 'Z') l += (1 + c) - 65; else if(c >= 'a' && c <= 'z') l += (1 + c) - 97; else if(c >= '0' && c <= '9') l += (27 + c) - 48; } while(l % 37L == 0L && l != 0L) l /= 37L; return l; } private static char decodeBuf[] = new char[4096]; 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); } public static String optimizeText(String text) { char buf[] = text.toCharArray(); boolean endMarker = true; // marks the end of a sentence to make the next char capital for(int i = 0; i < buf.length; i++) { char c = buf[i]; if(endMarker && c >= 'a' && c <= 'z') { buf[i] -= 0x20; // transform lower case into upper case endMarker = false; } if(c == '.' || c == '!' || c == '?') endMarker = true; } return new String(buf, 0, buf.length); } public static void textPack(byte packedData[], java.lang.String text) { if(text.length() > 80) text = text.substring(0, 80); text = text.toLowerCase(); int carryOverNibble = -1; int ofs = 0; for(int idx = 0; idx < text.length(); idx++) { char c = text.charAt(idx); int tableIdx = 0; for(int i = 0; i < xlateTable.length; i++) { if(c == xlateTable[i]) { tableIdx = i; break; } } if(tableIdx > 12) tableIdx += 195; if(carryOverNibble == -1) { if(tableIdx < 13) carryOverNibble = tableIdx; else packedData[ofs++] = (byte)(tableIdx); } else if(tableIdx < 13) { packedData[ofs++] = (byte)((carryOverNibble << 4) + tableIdx); carryOverNibble = -1; } else { packedData[ofs++] = (byte)((carryOverNibble << 4) + (tableIdx >> 4)); carryOverNibble = tableIdx & 0xf; } } if(carryOverNibble != -1) packedData[ofs++] = (byte)(carryOverNibble << 4); } public static char xlateTable[] = { ' ', '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', '$', '%', '"', '[', ']' };