Ok. I got it to show the framework, but it still won't set the sidebars, or anything. It freezes at the "wait();" at the end of the login.
Here's my login method:
Code:
public void login(Player player) {
long serverSessionKey = 0, clientSessionKey = 0;
serverSessionKey = ((long)(java.lang.Math.random() * 99999999D) << 32) + (long)(java.lang.Math.random() * 99999999D);
try {
fillInStream(player, 2);
if(inStream.readUnsignedByte() != 14) {
System.out.println("Invalid login byte ID: 14");
}
inStream.readUnsignedByte();
for(int i = 0; i < 8; i++)
output.write(0);
output.write(0);
outStream.writeQWord(serverSessionKey);
directFlushOutStream(player);
fillInStream(player, 2);
int loginType = inStream.readUnsignedByte();
if(loginType != 16 && loginType != 18)
return;
int loginPacketSize = inStream.readUnsignedByte();
int loginEncryptPacketSize = loginPacketSize-(36+1+1+2);
if(loginEncryptPacketSize <= 0)
return;
fillInStream(player, loginPacketSize);
if(inStream.readUnsignedByte() != 255 || inStream.readUnsignedWord() != 317)
return;
lowMemoryVersion = inStream.readUnsignedByte();
for(int i = 0; i < 9; i++)
Integer.toHexString(inStream.readDWord());
loginEncryptPacketSize--;
int tmp = inStream.readUnsignedByte();
if(loginEncryptPacketSize != tmp)
return;
tmp = inStream.readUnsignedByte();
if(tmp != 10)
return;
clientSessionKey = inStream.readQWord();
serverSessionKey = inStream.readQWord();
int UID = inStream.readDWord();
if(UID == 0 || UID == 99735086) { //all for free bot and syi will get ip banned straight away
Engine.bannedIPs.add(player.getConnectingAddress());
returnCode = 11;
player.disconnect();
}
player.setUsername(inStream.readString());
if(player.getUsername() == null || player.getUsername().length() == 0)
player.setUsername("null");
player.setPassword(inStream.readString());
System.out.println(player.getUsername()+" has connected - UID: " +UID );
int sessionKey[] = new int[4];
sessionKey[0] = (int)(clientSessionKey >> 32);
sessionKey[1] = (int)clientSessionKey;
sessionKey[2] = (int)(serverSessionKey >> 32);
sessionKey[3] = (int)serverSessionKey;
for(int i = 0; i < 4; i++)
Integer.toHexString(sessionKey[i]);
inStreamDecryption = new Cryption(sessionKey);
for(int i = 0; i < 4; i++)
sessionKey[i] += 50;
for(int i = 0; i < 4; i++)
Integer.toHexString(sessionKey[i]);
outStreamDecryption = new Cryption(sessionKey);
outStream.packetEncryption = outStreamDecryption;
returnCode = 2;
if(Engine.bannedUsers.contains(player.getUsername())) {
returnCode = 4;
player.disconnect();
}
if(Engine.players.size() >= 200) {
returnCode = 5;
player.disconnect();
}
if(loginType == 18) {
Engine.players.remove(player);
}
PlayerManager.loadCharacter(player);
if(player.getIndex() == -1)
output.write(7);
else
output.write(returnCode);
output.write(player.getRights() > 2 ? 2 : player.getRights());
output.write(0);
} catch(Exception e) {
//System.out.println("Login fail from " +connectedFrom);
player.disconnect();
return;
}
for(Player p : Engine.players) {
System.out.println(p.getUsername() + " - returnCode: " +returnCode);
}
if(player.getIndex() == -1 || returnCode != 2)
return;
System.out.println("Completed Login: User: " + player.getUsername() + ", Pass: " + player.getPassword());
packetSize = 0;
packetType = -1;
readPtr = 0;
writePtr = 0;
int numBytesInBuffer, offset;
while(!player.isOnline()) {
// relays any data currently in the buffer
synchronized(this) {
if(writePtr == readPtr) {
try {
System.out.println("Beginning wait...");
wait();//Freezes here...
System.out.println("Still waiting...");
} catch(Exception error) {
error.printStackTrace();
}
}
System.out.println(26);
if(player.isOnline())
return;
offset = readPtr;
if(writePtr >= readPtr)
numBytesInBuffer = writePtr - readPtr;
else
numBytesInBuffer = 10000 - readPtr;
}
if(numBytesInBuffer > 0) {
try {
output.write(buffer, offset, numBytesInBuffer);
readPtr = (readPtr + numBytesInBuffer) % 10000;
if(writePtr == readPtr)
output.flush();
} catch(Exception error) {
error.printStackTrace();
player.disconnect();
}
}
}
}