I can seem to login now but it dc's on login. Heres my login.java code
Current Testing Client: Moparscape 3.2 Webclient
Code:
package com.rs2.net;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.security.SecureRandom;
import com.rs2.Constants;
import com.rs2.model.World;
import com.rs2.model.players.Player;
import com.rs2.model.players.Player.LoginStages;
import com.rs2.util.NameUtil;
import com.rs2.util.PlayerSave;
public class Login {
public void handleLogin(Player player, ByteBuffer inData) throws Exception {
switch (player.getLoginStage()) {
case CONNECTED:
if (inData.remaining() < 2) {
inData.compact();
return;
}
// Validate the request.
int request = inData.get() & 0xff;
inData.get(); // Name hash.
if (request != 14) {
System.err.println("Invalid login request: " + request);
World.unregister(player);
return;
}
// Write the response.
StreamBuffer.OutBuffer out = StreamBuffer.newOutBuffer(17);
out.writeLong(0); // First 8 bytes are ignored by the client.
out.writeByte(0); // The response opcode, 0 for logging in.
out.writeLong(new SecureRandom().nextLong()); // SSK.
player.send(out.getBuffer());
player.setLoginStage(LoginStages.LOGGING_IN);
break;
case LOGGING_IN:
if (inData.remaining() < 2) {
inData.compact();
return;
}
// Validate the login type.
int loginType = inData.get();
if (loginType != 16 && loginType != 18) {
System.err.println("Invalid login type: " + loginType);
World.unregister(player);
return;
}
// Ensure that we can read all of the login block.
int blockLength = inData.get() & 0xff;
if (inData.remaining() < blockLength) {
inData.flip();
inData.compact();
return;
}
// Read the login block.
StreamBuffer.InBuffer in = StreamBuffer.newInBuffer(inData);
in.readByte(); // Skip the magic ID value 255.
// Validate the client version.
int clientVersion = in.readShort();
if (clientVersion != 317) {
System.err.println("Invalid client version: " + clientVersion);
World.unregister(player);
return;
}
in.readByte(); // Skip the high/low memory version.
// Skip the CRC keys.
for (int i = 0; i < 9; i++) {
in.readInt();
}
in.readByte(); // Skip RSA block length.
// If we wanted to, we would decode RSA at this point.
// Validate that the RSA block was decoded properly.
int rsaOpcode = in.readByte();
if (rsaOpcode != 10) {
System.err.println("Unable to decode RSA block properly!");
World.unregister(player);
return;
}
// Set up the ISAAC ciphers.
long clientHalf = in.readLong();
long serverHalf = in.readLong();
int[] isaacSeed = { (int) (clientHalf >> 32), (int) clientHalf, (int) (serverHalf >> 32), (int) serverHalf };
player.setDecryptor(new ISAACCipher(isaacSeed));
for (int i = 0; i < isaacSeed.length; i++) {
isaacSeed[i] += 50;
}
player.setEncryptor(new ISAACCipher(isaacSeed));
// Read the user authentication.
in.readInt(); // Skip the user ID.
String username = in.readString();
String password = in.readString();
player.setUsername(username);
PlayerSave.load(player);
if (password != null && player.getPassword() != null && player.getPassword() != "" &&
!player.getPassword().equals(password)) {
player.setReturnCode(Constants.LOGIN_RESPONSE_INVALID_CREDENTIALS);
} else {
player.setPassword(password);
}
player.setUsername(NameUtil.uppercaseFirstLetter(player.getUsername()));
player.login();
player.setLoginStage(LoginStages.LOGGED_IN);
break;
}
}
}
Heres Method for player.java
Code:
public void login() throws Exception {
int response = getReturnCode();
// Check if the player is already logged in.
for (Player player : World.getPlayers()) {
if (player == null) {
continue;
}
if (player.getUsername().equals(getUsername())) {
response = Constants.LOGIN_RESPONSE_ACCOUNT_ONLINE;
}
}
setLoginStage(LoginStages.LOGGED_IN);
StreamBuffer.OutBuffer resp = StreamBuffer.newOutBuffer(3);
resp.writeByte(response);
resp.writeByte(getStaffRights());
resp.writeByte(0);
send(resp.getBuffer());
if (response != 2) {
logout();
return;
}
World.register(this);
actionSender.sendLogin().sendConfigsOnLogin();
sendClientData();
refreshOnLogin();
getUpdateFlags().setUpdateRequired(true);
setAppearanceUpdateRequired(true);
}
Help Plz Rep++