Public feed
#530660
Quote:
RuneEngine is a new source created from scratch & coded in a totally different manner.
Yet, you sent me it, and I see Mythscape Client.java in there
If I may please correct some more of your lies?
1. New protocol? Rofl.
2. 455 client? Lol
3. Oh my god..
To correct some of you, i'm going to show you some of the source files to runeEngine
Code:
/***************************************************************************
* weightHandler.java
* -------------------
* begin : April 30, 2007
* copyright : (C) RuneEngine
* email : animeinabox@hotmail.com
*
* $Id: weightHandler.java 1.0 $
* $Author: Anime $
* $Date: 2007/04/30 5:30 pm $
*
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
import java.io.*;
public class weightHandler {
public int weight[] = new int[7500];
public weightHandler(int playerID) {
playerId = playerId;
}
weightHandler() {
for(int i = 0; i < 7500; i++){
readWeight("weight.cfg", i);
}
}
public boolean readWeight(String FileName, int itemID) {
String line = "";
String token = "";
String token2 = "";
String token2_2 = "";
String[] token3 = new String[10];
boolean EndOfFile = false;
int ReadMode = 0;
BufferedReader ss = null;
File file = null;
file = new File ("./data/"+FileName);
if (!file.canRead()){
newWeight(itemID,0);
}
try {
ss = new BufferedReader(new FileReader("./data/"+FileName));
} catch(FileNotFoundException fileex) {
misc.println(FileName+": file not found.");
return false;
}
try {
line = ss.readLine();
} catch(IOException ioexception) {
misc.println(FileName+": error loading file.");
return false;
}
while(EndOfFile == false && line != null) {
line = line.trim();
int spot = line.indexOf("=");
if (spot > -1) {
token = line.substring(0, spot);
token = token.trim();
token2 = line.substring(spot + 1);
token2 = token2.trim();
token2_2 = token2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token3 = token2_2.split("\t");
if(token.startsWith("Weight")){
if(Integer.parseInt(token3[0]) == itemID){
weight[itemID] = Integer.parseInt(token3[1]);
}
}
} else {
if (line.equals("[END OF "+FileName+"]")) {
try { ss.close(); } catch(IOException ioexception) { }
return true;
}
}
try {
line = ss.readLine();
} catch(IOException ioexception1) { EndOfFile = true; }
}
try { ss.close(); } catch(IOException ioexception) { }
return false;
}
public void newWeight(int itemID, int weight){
try {
BufferedWriter ss = null;
ss = new BufferedWriter(new FileWriter("./data/weight.txt", false));
ss.write("Weight = "+itemID+" "+weight, 0, 19);
ss.close();
} catch(IOException ioexception) {
misc.println("Error");
}
}
private int playerId;
}lel
Code:
/***************************************************************************
* client.java
* -------------------
* begin : April 27, 2007
* copyright : (C) RuneEngine
* email : animeinabox@hotmail.com
*
* $Id: client.java 1.0 $
* $Author: Anime $
* $Date: 2007/04/27 12:17 Am $
*
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
import java.io.*;
public class client extends player implements Runnable
{
public client(java.net.Socket _socket, int _playerId)
{
super(_playerId);
socket = _socket;
try
{
in = _socket.getInputStream();
out = _socket.getOutputStream();
}
catch(java.io.IOException ioe)
{
System.out.println("Server exception in client()");
ioe.printStackTrace();
}
outStream = new packetWriter(new byte[bufferSize]);
outStream.currentOffset = 0;
inStream = new packetReader(new byte[bufferSize]);
inStream.currentOffset = 0;
readPtr = writePtr = 0;
buffer = buffer = new byte[bufferSize];
}
public void shutdown(String error)
{
System.out.println("error: "+error);
destruct();
}
public void destruct()
{
if(socket == null) return;
try
{
disconnected = true;
if(in != null) in.close();
if(out != null) out.close();
socket.close();
socket = null;
in = null;
out = null;
inStream = null;
outStream = null;
active = false;
synchronized(this)
{
notify();
}
buffer = null;
}
catch(java.io.IOException ioe)
{
ioe.printStackTrace();
}
super.destruct();
}
public void flushOutStream()
{
if(disconnected || outStream.currentOffset == 0) return;
synchronized(this)
{
int maxWritePtr = (readPtr+bufferSize-2) % bufferSize;
for(int i = 0; i < outStream.currentOffset; i++)
{
buffer[writePtr] = outStream.buffer[i];
writePtr = (writePtr+1) % bufferSize;
if(writePtr == maxWritePtr)
{
shutdown("overflow");
outStream.currentOffset = 0;
disconnected = true;
return;
}
}
outStream.currentOffset = 0;
notify();
}
}
private void directFlushOutStream() throws java.io.IOException
{
out.write(outStream.buffer, 0, outStream.currentOffset);
outStream.currentOffset = 0;
}
private void fillInStream(int forceRead) throws java.io.IOException
{
inStream.currentOffset = 0;
in.read(inStream.buffer, 0, forceRead);
}
public void run()
{
active = false;
long serverSessionKey = 0, clientSessionKey = 0;
serverSessionKey = ((long)(java.lang.Math.random() * 99999999D) << 32) + (long)(java.lang.Math.random() * 99999999D);
try
{
fillInStream(2);
if(inStream.readUnsignedByte() != 14)
{
disconnected = true;
return;
}
int namePart = inStream.readUnsignedByte();
for(int i = 0; i < 8; i++) out.write(i);
out.write(0);
outStream.writeQWord(serverSessionKey);
directFlushOutStream();
fillInStream(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(loginPacketSize);
if(inStream.readUnsignedByte() != 255 || inStream.readUnsignedWord() != 317)
{
return;
}
lowMemoryVersion = inStream.readUnsignedByte();
for(int i = 0; i < 9; i++)
{
String itos = Integer.toHexString(inStream.readDWord());
}
loginEncryptPacketSize--;
int tmp = inStream.readUnsignedByte();
if(loginEncryptPacketSize != tmp)
{
shutdown("Encrypted packet data length ("+loginEncryptPacketSize+") different from length byte thereof ("+tmp+")");
return;
}
tmp = inStream.readUnsignedByte();
if(tmp != 10)
{
shutdown("Encrypted packet Id was "+tmp+" but expected 10");
return;
}
clientSessionKey = inStream.readQWord();
serverSessionKey = inStream.readQWord();
playerName = inStream.readString();
playerName.toLowerCase();
if(playerName == null || playerName.length() == 0)
disconnected = true;
playerPass = inStream.readString();
misc.println(playerName+" is signing onto server.");
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++)
inStreamDecryption = new cryption(sessionKey);
for(int i = 0; i < 4; i++) sessionKey[i] += 50;
for(int i = 0; i < 4; i++)
outStreamDecryption = new cryption(sessionKey);
outStream.packetEncryption = outStreamDecryption;
returnCode = 2;
if (playerHandler.playerOn(playerName))
{
returnCode = 5;
playerName = "_";
disconnected = true;
moveToX = 0;
moveToY = 0;
}
if(playerId == -1) out.write(7);
else out.write(returnCode);
out.write(playerRights);
out.write(0);
}
catch(java.lang.Exception __ex)
{
__ex.printStackTrace();
destruct();
return;
}
active = true;
if(playerId == -1 || returnCode != 2) return;
packetSize = 0;
packetType = -1;
readPtr = 0;
writePtr = 0;
int numBytesInBuffer, offset;
while(!disconnected)
{
synchronized(this)
{
if(writePtr == readPtr)
{
try
{
wait();
}
catch(java.lang.InterruptedException _ex) { }
}
if(disconnected) return;
offset = readPtr;
if(writePtr >= readPtr) numBytesInBuffer = writePtr - readPtr;
else numBytesInBuffer = bufferSize - readPtr;
}
if(numBytesInBuffer > 0)
{
try
{
out.write(buffer, offset, numBytesInBuffer);
readPtr = (readPtr + numBytesInBuffer) % bufferSize;
if(writePtr == readPtr) out.flush();
}
catch(java.lang.Exception __ex)
{
__ex.printStackTrace();
disconnected = true;
}
}
}
}
public void setSidebarInterface(int menuId, int form)
{
outStream.createFrame(71);
outStream.writeWord(form);
outStream.writeByteA(menuId);
}
public void logout()
{
outStream.createFrame(109);
}
public void setConfiguration(int id, int state)
{
outStream.createFrame(36);
outStream.writeWordBigEndian(id);
outStream.writeByte(state);
}
public void initializeConfiguration()
{
setConfiguration(19,0);
setConfiguration(25,0);
setConfiguration(43,0);
setConfiguration(44,0);
setConfiguration(75,0);
setConfiguration(83,0);
setConfiguration(84,0);
setConfiguration(85,0);
setConfiguration(86,0);
setConfiguration(87,0);
setConfiguration(88,0);
setConfiguration(89,0);
setConfiguration(90,0);
setConfiguration(91,0);
setConfiguration(92,0);
setConfiguration(93,0);
setConfiguration(94,0);
setConfiguration(95,0);
setConfiguration(96,0);
setConfiguration(97,0);
setConfiguration(98,0);
setConfiguration(99,0);
setConfiguration(100,0);
setConfiguration(101,0);
setConfiguration(104,0);
setConfiguration(106,0);
setConfiguration(108,0);
setConfiguration(115,0);
setConfiguration(143,0);
setConfiguration(153,0);
setConfiguration(156,0);
setConfiguration(157,0);
setConfiguration(158,0);
setConfiguration(166,0);
setConfiguration(167,0);
setConfiguration(168,0);
setConfiguration(169,0);
setConfiguration(170,0);
setConfiguration(171,0);
setConfiguration(172,0);
setConfiguration(173,0);
setConfiguration(174,0);
setConfiguration(203,0);
setConfiguration(210,0);
setConfiguration(211,0);
setConfiguration(261,0);
setConfiguration(262,0);
setConfiguration(263,0);
setConfiguration(264,0);
setConfiguration(265,0);
setConfiguration(266,0);
setConfiguration(268,0);
setConfiguration(269,0);
setConfiguration(270,0);
setConfiguration(271,0);
setConfiguration(280,0);
setConfiguration(286,0);
setConfiguration(287,0);
setConfiguration(297,0);
setConfiguration(298,0);
setConfiguration(301,01);
setConfiguration(304,01);
setConfiguration(309,01);
setConfiguration(311,01);
setConfiguration(312,01);
setConfiguration(313,01);
setConfiguration(330,01);
setConfiguration(331,01);
setConfiguration(342,01);
setConfiguration(343,01);
setConfiguration(344,01);
setConfiguration(345,01);
setConfiguration(346,01);
setConfiguration(353,01);
setConfiguration(354,01);
setConfiguration(355,01);
setConfiguration(356,01);
setConfiguration(361,01);
setConfiguration(362,01);
setConfiguration(363,01);
setConfiguration(377,01);
setConfiguration(378,01);
setConfiguration(379,01);
setConfiguration(380,01);
setConfiguration(383,01);
setConfiguration(388,01);
setConfiguration(391,01);
setConfiguration(393,01);
setConfiguration(399,01);
setConfiguration(400,01);
setConfiguration(406,01);
setConfiguration(408,01);
setConfiguration(414,01);
setConfiguration(417,01);
setConfiguration(423,01);
setConfiguration(425,01);
setConfiguration(427,01);
setConfiguration(433,01);
setConfiguration(435,01);
setConfiguration(436,01);
setConfiguration(437,01);
setConfiguration(439,01);
setConfiguration(440,01);
setConfiguration(441,01);
setConfiguration(442,01);
setConfiguration(443,01);
setConfiguration(445,01);
setConfiguration(446,01);
setConfiguration(449,01);
setConfiguration(452,01);
setConfiguration(453,01);
setConfiguration(455,01);
setConfiguration(464,01);
setConfiguration(465,01);
setConfiguration(470,01);
setConfiguration(482,01);
setConfiguration(486,01);
setConfiguration(491,01);
setConfiguration(492,01);
setConfiguration(493,01);
setConfiguration(496,01);
setConfiguration(497,01);
setConfiguration(498,01);
setConfiguration(499,01);
setConfiguration(502,01);
setConfiguration(503,01);
setConfiguration(504,01);
setConfiguration(505,01);
setConfiguration(506,01);
setConfiguration(507,01);
setConfiguration(508,01);
setConfiguration(509,01);
setConfiguration(510,01);
setConfiguration(511,01);
setConfiguration(512,01);
setConfiguration(515,01);
setConfiguration(518,01);
setConfiguration(520,01);
setConfiguration(521,01);
setConfiguration(524,01);
setConfiguration(525,01);
setConfiguration(531,01);
}
public void initialize()
{
outStream.createFrame(249);
outStream.writeByteA(0);
outStream.writeWordBigEndianA(playerId);
outStream.createFrame(107);
initializeConfiguration();
setSidebarInterface(1, 3917);
setSidebarInterface(2, 638);
setSidebarInterface(3, 3213);
setSidebarInterface(4, 1644);
setSidebarInterface(5, 5608);
setSidebarInterface(6, 1151);
setSidebarInterface(7, 1);
setSidebarInterface(8, 5065);
setSidebarInterface(9, 5715);
setSidebarInterface(10, 2449);
setSidebarInterface(11, 4445);
setSidebarInterface(12, 147);
setSidebarInterface(13, 6299);
setSidebarInterface(0, 2423);
/*outStream.createFrameVarSize(104);
outStream.writeByteC(3); // command slot (does it matter which one?)
outStream.writeByteA(0); // 0 or 1; 0 if command should be placed on top in context menu
outStream.writeString("Trade with");
outStream.endFrameVarSize();*/
handler.updatePlayer(this, outStream);
flushOutStream();
}
public void update()
{
handler.updatePlayer(this, outStream);
flushOutStream();
}
public static final int packetSizes[] = {
0, 0, 0, 1, -1, 0, 0, 0, 0, 0, //0
0, 0, 0, 0, 8, 0, 6, 2, 2, 0, //10
0, 2, 0, 6, 0, 12, 0, 0, 0, 0, //20
0, 0, 0, 0, 0, 8, 4, 0, 0, 2, //30
2, 6, 0, 6, 0, -1, 0, 0, 0, 0, //40
0, 0, 0, 12, 0, 0, 0, 0, 8, 0, //50
0, 8, 0, 0, 0, 0, 0, 0, 0, 0, //60
6, 0, 2, 2, 8, 6, 0, -1, 0, 6, //70
0, 0, 0, 0, 0, 1, 4, 6, 0, 0, //80
0, 0, 0, 0, 0, 3, 0, 0, -1, 0, //90
0, 13, 0, -1, 0, 0, 0, 0, 0, 0,//100
0, 0, 0, 0, 0, 0, 0, 6, 0, 0, //110
1, 0, 6, 0, 0, 0, -1, 0, 2, 6, //120
0, 4, 6, 8, 0, 6, 0, 0, 0, 2, //130
0, 0, 0, 0, 0, 6, 0, 0, 0, 0, //140
0, 0, 1, 2, 0, 2, 6, 0, 0, 0, //150
0, 0, 0, 0, -1, -1, 0, 0, 0, 0,//160
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //170
0, 8, 0, 3, 0, 2, 0, 0, 8, 1, //180
0, 0, 12, 0, 0, 0, 0, 0, 0, 0, //190
2, 0, 0, 0, 0, 0, 0, 0, 4, 0, //200
4, 0, 0, 0, 7, 8, 0, 0, 10, 0, //210
0, 0, 0, 0, 0, 0, -1, 0, 6, 0, //220
1, 0, 0, 0, 6, 0, 6, 8, 1, 0, //230
0, 4, 0, 0, 0, 0, -1, 0, -1, 4,//240
0, 0, 6, 6, 0, 0, 0 //250
};
public int packetSize = 0, packetType = -1;
public boolean process()
{
if (actionAmount < 0)
{
actionAmount = 0;
}
if (actionTimer > 0)
{
actionTimer-=1;
}
if (actionAmount > 4)
{
// spam clicking
}
if(disconnected) return false;
try {
if(timeOutCounter++ > 20) {
misc.println("Client lost connection: timeout");
disconnected = true;
return false;
}
if(in == null) return false;
int avail = in.available();
if(avail == 0) return false;
if(packetType == -1) {
packetType = in.read() & 0xff;
if(inStreamDecryption != null)
packetType = packetType - inStreamDecryption.getNextKey() & 0xff;
packetSize = packetSizes[packetType];
avail--;
}
if(packetSize == -1) {
if(avail > 0) {
// this is a variable size packet, the next byte containing the length of said
packetSize = in.read() & 0xff;
avail--;
}
else return false;
}
if(avail < packetSize) return false; // packet not completely arrived here yet
fillInStream(packetSize);
timeOutCounter = 0; // reset
parseIncomingPackets(); // method that does actually interprete these packets
packetType = -1;
} catch(java.lang.Exception __ex) {
misc.println("Server: Exception!");
__ex.printStackTrace();
disconnected = true;
}
return true;
}
public void parseIncomingPackets()
{
int i;
switch(packetType) {
case 0: break;
case 202:
break;
case 121:
break;
// walkTo commands
case 248: // map walk (has additional 14 bytes added to the end with some junk data)
packetSize -= 14; // ignore the junk
case 164: // regular walk
case 98: // walk on command
newWalkCmdSteps = packetSize - 5;
if(newWalkCmdSteps % 2 != 0)
println_debug("Warning: walkTo("+packetType+") command malformed: "+misc.Hex(inStream.buffer, 0, packetSize));
newWalkCmdSteps /= 2;
if(++newWalkCmdSteps > walkingQueueSize) {
println_debug("Warning: walkTo("+packetType+") command contains too many steps ("+newWalkCmdSteps+").");
newWalkCmdSteps = 0;
break;
}
int firstStepX = inStream.readSignedWordBigEndianA()-mapRegionX*8;
for(i = 1; i < newWalkCmdSteps; i++) {
newWalkCmdX[i] = inStream.readSignedByte();
newWalkCmdY[i] = inStream.readSignedByte();
}
newWalkCmdX[0] = newWalkCmdY[0] = 0;
int firstStepY = inStream.readSignedWordBigEndian()-mapRegionY*8;
newWalkCmdIsRunning = inStream.readSignedByteC() == 1;
for(i = 0; i < newWalkCmdSteps; i++) {
newWalkCmdX[i] += firstStepX;
newWalkCmdY[i] += firstStepY;
}
poimiY = firstStepY;
poimiX = firstStepX;
break;
case 4: // regular chat
chatTextEffects = inStream.readUnsignedByteS();
chatTextColor = inStream.readUnsignedByteS();
chatTextSize = (byte)(packetSize-2);
inStream.readBytes_reverseA(chatText, chatTextSize, 0);
chatTextUpdateRequired = true;
println_debug("Text ["+chatTextEffects+","+chatTextColor+"]: "+misc.textUnpack(chatText, packetSize-2));
break;
case 3: // focus change
break;
case 86: // camera angle
break;
case 241: // mouse clicks
break;
case 185: //clicking most buttons
int actionButtonId = misc.HexToInt(inStream.buffer, 0, packetSize);
switch(actionButtonId) {
}
//Log out
case 9154:
logout();
break;
default:
System.out.println("Unhandled packet ["+packetType+", size="+packetSize+"]: "+misc.Hex(inStream.buffer, 0, packetSize));
break;
}
}
public static final int bufferSize = 5000;
private java.net.Socket socket;
private java.io.InputStream in;
private java.io.OutputStream out;
public byte buffer[] = null;
public int readPtr, writePtr;
public packetReader inStream = null;
public packetWriter outStream = null;
public cryption inStreamDecryption = null, outStreamDecryption = null;
public int lowMemoryVersion = 0;
public int timeOutCounter = 0;
public int returnCode = 2;
private int bankXremoveSlot = 0;
private int bankXinterfaceID = 0;
private int bankXremoveID = 0;
public int somejunk;
}
L33L
Leeched again.
I'll not show any more cause His Bw/Br being released may cause offense to him. Lel.