Thread: How to emulate any revision

Page 1 of 2 12 LastLast
Results 1 to 10 of 14
  1. #1 How to emulate any revision 
    Registered Member
    Anadyr's Avatar
    Join Date
    Nov 2009
    Posts
    682
    Thanks given
    31
    Thanks received
    100
    Rep Power
    675
    Hopefully those reading understand what a byte is, and the basics of bitshifting.
    All classes in this revision are available at the bottom, including the 31 client.
    The first thing we must make clear is:
    1. What revision?
    2. Do we have a client?
    3. Do we have the cache?
    4. Does this revision have Xtea files released, or are they separate from others in its area?


    First thing we must do is download the client, and get a base

    After getting the client we must find the login block, the most likely search would be the revision with a comma due to the fact jagex adds plenty of dummy variables in methods to fool us. so say the revision is 31 on osrs, we search "(31, " you should have a few files pop up 3 instances should be in client.java and 1 in the login class.

    To find it in the login class quickly search through the files and look above where the searched item is and youll see an array mostly named "is" like int[] is = new int[4];
    This is the basic array for the Isaac-cipher an integer generator based on a key that is exchanged on login, and is optional. Anyway from this int array all the way to the ending bracket of this method is the login method, what you need to do in your client is handle the exact same thing in your logindecoder class so heres 31's login block

    Code:
    					if (client.anInt1533 * -803654039 == 5) {
    						final int[] is = { (int) (Math.random() * 9.9999999E7), (int) (Math.random() * 9.9999999E7), (int) (Math.random() * 9.9999999E7), (int) (Math.random() * 9.9999999E7) };
    						client.aClass91_Sub9_Sub1_1478.anInt1858 = 0;
    						client.aClass91_Sub9_Sub1_1478.writeByte(10, -544331491);
    						client.aClass91_Sub9_Sub1_1478.writeInt(is[0], -1809059035);
    						client.aClass91_Sub9_Sub1_1478.writeInt(is[1], -1218971857);
    						client.aClass91_Sub9_Sub1_1478.writeInt(is[2], -1801008901);
    						client.aClass91_Sub9_Sub1_1478.writeInt(is[3], -1441992425);
    						client.aClass91_Sub9_Sub1_1478.writeLong(0L);
    						client.aClass91_Sub9_Sub1_1478.writeString(Class101.password, (byte) 7);
    						client.aClass91_Sub9_Sub1_1478.encryptBlock(Class41.aBigInteger552, Class41.aBigInteger548, (byte) 81);
    						client.aClass91_Sub9_Sub1_1479.anInt1858 = 0;
    						if (client.anInt1599 * -1935794829 == 40) {
    							client.aClass91_Sub9_Sub1_1479.writeByte(18, 1437227819);
    						} else {
    							client.aClass91_Sub9_Sub1_1479.writeByte(16, -1683209825);
    						}
    						client.aClass91_Sub9_Sub1_1479.writeShort(0, -372694149);
    						final int i_2_ = -1128893257 * client.aClass91_Sub9_Sub1_1479.anInt1858;
    						client.aClass91_Sub9_Sub1_1479.writeInt(31, -2046661688);
    						client.aClass91_Sub9_Sub1_1479.writeBytes(client.aClass91_Sub9_Sub1_1478.aByteArray1862, 0, -1128893257 * client.aClass91_Sub9_Sub1_1478.anInt1858, 1298414944);
    						final int i_3_ = client.aClass91_Sub9_Sub1_1479.anInt1858 * -1128893257;
    						client.aClass91_Sub9_Sub1_1479.writeString(Class101.userName, (byte) 12);
    						client.aClass91_Sub9_Sub1_1479.writeByte(client.aBoolean1691 ? 1 : 0, -258805836);
    						final RSBuffer class91_sub9_sub1 = client.aClass91_Sub9_Sub1_1479;
    						final byte[] is_4_ = new byte[24];
    						try {
    							Class35.aClass4_411.method90(0L);
    							Class35.aClass4_411.method96(is_4_, (byte) -17);
    							int i_5_;
    							for (i_5_ = 0; i_5_ < 24 && is_4_[i_5_] == 0; i_5_++) {
    								/* empty */
    							}
    							if (i_5_ >= 24) {
    								throw new IOException();
    							}
    						} catch (final Exception exception) {
    							for (int i_6_ = 0; i_6_ < 24; i_6_++) {
    								is_4_[i_6_] = (byte) -1;
    							}
    						}
    						class91_sub9_sub1.writeBytes(is_4_, 0, 24, 1499855706);
    						final Class91_Sub9 class91_sub9 = new Class91_Sub9(Class23.aClass91_Sub13_289.method706(-563685748));
    						Class23.aClass91_Sub13_289.method705(class91_sub9, -1895318616);
    						client.aClass91_Sub9_Sub1_1479.writeBytes(class91_sub9.aByteArray1862, 0, class91_sub9.aByteArray1862.length, 1426559657);
    						client.aClass91_Sub9_Sub1_1479.writeInt(-1103292969 * Class91_Sub14.aClass63_Sub1_1936.anInt766, -1332856570);
    						client.aClass91_Sub9_Sub1_1479.writeInt(Class91_Sub23.aClass63_Sub1_2118.anInt766 * -1103292969, -1433859490);
    						client.aClass91_Sub9_Sub1_1479.writeInt(-1103292969 * Class108.aClass63_Sub1_1408.anInt766, -1242229760);
    						client.aClass91_Sub9_Sub1_1479.writeInt(Class37.aClass63_Sub1_442.anInt766 * -1103292969, -2060098197);
    						client.aClass91_Sub9_Sub1_1479.writeInt(-1103292969 * Class91_Sub23.aClass63_Sub1_2113.anInt766, -1830472400);
    						client.aClass91_Sub9_Sub1_1479.writeInt(Class67.aClass63_Sub1_800.anInt766 * -1103292969, -1901409511);
    						client.aClass91_Sub9_Sub1_1479.writeInt(Class91_Sub20_Sub2.aClass63_Sub1_2232.anInt766 * -1103292969, -2007397382);
    						client.aClass91_Sub9_Sub1_1479.writeInt(-1103292969 * Class91_Sub10.aClass63_Sub1_1869.anInt766, -1780920083);
    						client.aClass91_Sub9_Sub1_1479.writeInt(Class97.aClass63_Sub1_1209.anInt766 * -1103292969, -1928106284);
    						client.aClass91_Sub9_Sub1_1479.writeInt(-1103292969 * Class1.aClass63_Sub1_32.anInt766, -2120277009);
    						client.aClass91_Sub9_Sub1_1479.writeInt(Class91_Sub20_Sub14_Sub5.aClass63_Sub1_2800.anInt766 * -1103292969, -1748493525);
    						client.aClass91_Sub9_Sub1_1479.writeInt(Class103.aClass63_Sub1_1318.anInt766 * -1103292969, -1909588572);
    						client.aClass91_Sub9_Sub1_1479.writeInt(Class42.aClass63_Sub1_556.anInt766 * -1103292969, -1418916628);
    						client.aClass91_Sub9_Sub1_1479.writeInt(Class105.aClass63_Sub1_1360.anInt766 * -1103292969, -1079570608);
    						client.aClass91_Sub9_Sub1_1479.writeInt(-1103292969 * KeyFastner.aClass63_Sub1_212.anInt766, -1274006666);
    						client.aClass91_Sub9_Sub1_1479.writeInt(-1103292969 * Class102.aClass63_Sub1_1317.anInt766, -1995984714);
    						client.aClass91_Sub9_Sub1_1479.method680(is, i_3_, client.aClass91_Sub9_Sub1_1479.anInt1858 * -1128893257, -1353214896);
    						client.aClass91_Sub9_Sub1_1479.writeShort(client.aClass91_Sub9_Sub1_1479.anInt1858 * -1128893257 - i_2_, (byte) 86);
    						Class91_Sub20_Sub14_Sub6.aClass20_2819.flush(client.aClass91_Sub9_Sub1_1479.aByteArray1862, 0, -1128893257 * client.aClass91_Sub9_Sub1_1479.anInt1858, (byte) 0);
    						client.aClass91_Sub9_Sub1_1478.method689(is, (byte) 56);
    						for (int i_7_ = 0; i_7_ < 4; i_7_++) {
    							is[i_7_] += 50;
    						}
    						client.aClass91_Sub9_Sub1_1480.method689(is, (byte) 14);
    						client.anInt1533 = -2016519402;
    					}
    and heres how its handled
    Note: you have to change the entire setup due to your base's class

    Code:
    package com.jonathan.citrus.game.protocol.r31;
    
    import com.jonathan.citrus.game.model.login.LoginCredentials;
    import com.jonathan.citrus.game.model.login.LoginRequest;
    import com.jonathan.citrus.game.model.login.LoginResponse;
    import com.jonathan.citrus.network.game.AbstractLoginProtocol;
    import com.jonathan.citrus.network.Session;
    import com.jonathan.citrus.utility.StreamUtilities;
    import com.jonathan.citrus.utility.crypto.Xtea;
    import java.math.BigInteger;
    import java.nio.ByteBuffer; 
    import org.jboss.netty.buffer.ChannelBuffer;
    
    /**
     *
     * @author Jonathan
     */
    public class LoginProtocol31 extends AbstractLoginProtocol {
    
        @Override
        public LoginRequest handleLogin(ChannelBuffer buffer, Session session) { 
            byte[] rsaArray = new byte[buffer.readShort() & 0xff];
            buffer.readBytes(rsaArray);
            ByteBuffer rsaBuffer = ByteBuffer.wrap(new BigInteger(rsaArray).toByteArray());//.modPow(Constants.RSA_EXPONENT, Constants.RSA_MODULUS).toByteArray());
    
            int rsaHeaderKey = rsaBuffer.get();
            if (rsaHeaderKey != 10) {
                return new LoginRequest(null, LoginResponse.ERROR);
            }
    
            int[] xtea = new int[4];
            for (int i = 0; i < 4; i++) {
                xtea[i] = rsaBuffer.getInt();
            }
    
            rsaBuffer.getLong();
            String password = StreamUtilities.getString(rsaBuffer);
    
            byte[] xteabytes = new byte[buffer.readableBytes() - 2];
            buffer.readBytes(xteabytes);
            ByteBuffer xteaBuffer = ByteBuffer.wrap(new Xtea(xtea, xteabytes, 0).decipher());
    
            String name = StreamUtilities.getString(xteaBuffer);
    
            if (name.length() > 12 || password.length() > 20) {
                return new LoginRequest(null, LoginResponse.INVALID_DETAILS);
            }
            int memoryType = xteaBuffer.get();
    
            byte[] settingbytes = new byte[24];
            xteaBuffer.get(settingbytes);
    
            int[] archiveCrcs = new int[15];
            for (int i = 0; i < 15; i++) {
                archiveCrcs[i] = xteaBuffer.getInt();
            }  //todo opcode 18
            return new LoginRequest(new LoginCredentials(session, name, password, 16, memoryType), LoginResponse.LOGIN);
        } 
    }
    We can diable isaac and rsa by searching "modPow" client sided, and just where it uses .modpow add ;// infront of it so its aBigInteger202030 = aBigInteger, ignoring the encryption.

    we can find isaac pretty easy with just tracing where the is[] int in the login block is used if we look back at it. :
    Code:
    						client.aClass91_Sub9_Sub1_1478.method689(is, (byte) 56);
    						for (int i_7_ = 0; i_7_ < 4; i_7_++) {
    							is[i_7_] += 50;
    						}
    						client.aClass91_Sub9_Sub1_1480.method689(is, (byte) 14);
    						client.anInt1533 = -2016519402;
    Now for the map region, if you look at the bottom of the login block on the client side it will set the next packet which is the mapregion, but before that handles a few bytes for the login response which is
    its used in RSBuffer.java and
    Code:
    	public void method689(final int[] is, final byte i) {
    Code:
    			this.aClass48_2210 = new Class48(is);
    Class48 is the isaac class, and we find the nextInt method and just return 0 instead of the next array variable. so

    yes ik the naming should be just getNextInt() or something simple since it isnt the seed, but i was prob stoned idc.
    Code:
    	final int getNextIsaacSeed(final int i) {
    		int i_11_;
    		try {
    			if ((this.anInt602 -= 953936721) * -1025491535 + 1 == 0) {
    				method368(-1068164233);
    				this.anInt602 = -1559272017;
    			}
    			i_11_ = 0;//this.anIntArray608[-1025491535 * this.anInt602];
    		} catch (final RuntimeException runtimeexception) {
    			throw Class102.method1086(runtimeexception, "dl.i()");
    		}
    		return i_11_;
    	}
    Code:
    if (client.anInt1533 * -803654039 == 6 && Class91_Sub20_Sub14_Sub6.aClass20_2819.getAvailableBytes((byte) 5) > 0) {
    						final int responseco = Class91_Sub20_Sub14_Sub6.aClass20_2819.readByte(-129262540);
                                                    if (21 == responseco && 20 == -1935794829 * client.anInt1599) {
    							client.anInt1533 = -205122321;
    						} else if (responseco == 2) { 
    							client.anInt1533 = -877295455;
    						} else {
    							if (15 == responseco && -1935794829 * client.anInt1599 == 40) {
    								client.aClass91_Sub9_Sub1_1478.anInt1858 = 0;
    								client.aClass91_Sub9_Sub1_1480.anInt1858 = 0;
    								client.currentPacketId = -1986708965;
    								client.anInt1486 = 1513355967;
    								client.anInt1687 = -1166588049;
    								client.anInt1447 = 449095181;
    								client.anInt1570 = 0;
    								client.anInt1524 = 0;
    								client.anInt1544 = 0;
    								client.anInt1585 = 0;
    								client.aBoolean1538 = false;
    								client.anInt1676 = 0;
    								client.anInt1674 = 0;
    								for (int i_9_ = 0; i_9_ < client.aClass91_Sub20_Sub14_Sub1_Sub1Array1562.length; i_9_++) {
    									if (client.aClass91_Sub20_Sub14_Sub1_Sub1Array1562[i_9_] != null) {
    										client.aClass91_Sub20_Sub14_Sub1_Sub1Array1562[i_9_].anInt2605 = -728389403;
    									}
    								}
    								for (int i_10_ = 0; i_10_ < client.aClass91_Sub20_Sub14_Sub1_Sub2Array1590.length; i_10_++) {
    									if (client.aClass91_Sub20_Sub14_Sub1_Sub2Array1590[i_10_] != null) {
    										client.aClass91_Sub20_Sub14_Sub1_Sub2Array1590[i_10_].anInt2605 = -728389403;
    									}
    								}
    								Class91_Sub22.aClass83_2108 = new Class83(32);
    								Class91_Sub20_Sub14_Sub1_Sub2.method939(30, -164648312);
    								for (int i_11_ = 0; i_11_ < 100; i_11_++) {
    									client.aBooleanArray1645[i_11_] = true;
    								}
    								break;
    							}
    							if (23 != responseco || 1337485133 * client.anInt1472 >= 1) {
    								method1024(responseco, 1838455856);
    								break;
    							}
    							client.anInt1472 += 1371744645;
    							client.anInt1533 = 0;
    						}
    					}
    					if (7 == -803654039 * client.anInt1533 && Class91_Sub20_Sub14_Sub6.aClass20_2819.getAvailableBytes((byte) 5) > 0) {
    						client.anInt1473 = (Class91_Sub20_Sub14_Sub6.aClass20_2819.readByte(1106350721) + 3) * 772010452;
    						client.anInt1533 = 1606274760;
    					}
    					if (8 == -803654039 * client.anInt1533) {
    						client.anInt1471 = 0;
    						Class4.method99(Class75.aString880, Class75.aString877, new StringBuilder(String.valueOf(client.anInt1473 * 602360307 / 60)).append(Class75.aString882).toString(), 670678790);
    						if ((client.anInt1473 -= -1561954501) * 602360307 <= 0) {
    							client.anInt1533 = 0;
    						}
    					} else {
    						if (9 == -803654039 * client.anInt1533 && Class91_Sub20_Sub14_Sub6.aClass20_2819.getAvailableBytes((byte) 5) >= 8) {
    and so on. Dont let the *-3459458458234589239453459235949 bullshit fool you as thats what its there for in these revisions, you are better off finding where its reverse multiplied to get the true value, or print it out if you are lazy.
    The login block never really changed

    Code:
        public static void sendLoginResponse(LoginRequest request, LoginResponse resp) {
            Session session = request.getCredentials().getConnection();
            PacketBuilder bldr = new PacketBuilder();
    
            bldr.put((byte) resp.intValue());
            if (resp.intValue() == 2) {
                Player player = (Player) session.getAttachment();
                bldr.put((byte) 2);
                bldr.put((byte) 0);
                bldr.putShort(player.getIndex()); //player index
                bldr.put((byte) 0);
                session.write(bldr.toPacket());
                player.getProtocol().sendLogin(); 
            } else if(resp.intValue() == 21) {
                bldr.put((byte) request.getWorkTime());
                session.write(bldr.toPacket());
            } else {
                session.write(bldr.toPacket()).addListener(ChannelFutureListener.CLOSE);
            }
        }
    So now its time to find the map packet, well first we have to find the packet handler method in the client? Best solution imo is to find either player or npc updating through the masks, and then trace its usage and bam you are in that class. so lets search for 0x200 since it is a very high bitmask and it should only have very few usages
    . in the 31 youll see 3 usages for 0x200000, 0x20000000, and 0x200, the Class106 0x200 is the correct one. The method

    Code:
    	static final void doMasks(final int index, final GamePlayer player, final int mask, final int dummy) {
    find this, should be used in Class37
    Code:
    	static final void decipherMaskBlock(final byte i) {
    and finally: drum role
    Class1.java

    The entire player updating method, all renamed for you to understand it easily.
    Code:
    static final void playerUpdate(final int i) {
    and the last trace it will end up
    Class35.java

    Line 1142
    Code:
    				if (141 == client.currentPacketId * -2005995539) {
    					Class1.playerUpdate(-772123891);
    					client.currentPacketId = -1986708965;
    					return true;
    				}
    Tells us that the player updating is packet 141, and then we now have the packet handler method in class Class35
    So now its mapregion hunting time, Map region is handled by 2 packets, and is more than likely to be handled inside a different class due to its size, anyway look through and take a gander... Most of the time for the mapregion there is either a boolean or int value parsed for either custom map, or regular map so keep that in mind
    there are other ways of finding the mapregion like / 8 == 48 is a easy one, and so on but anyway the mapregion is 87
    Code:
    				if (client.currentPacketId * -2005995539 == 87) {
    					Class101.doMapRegion(false, -866073146);
    					client.currentPacketId = -1986708965;
    					return true;
    				}
    goto class 101

    Code:
    if (!client.currentlyCustomRegion) {
    				final int i_25_ = client.aClass91_Sub9_Sub1_1480.readByteS(830588933);
    				final int i_26_ = client.aClass91_Sub9_Sub1_1480.readLEShort(1511091638);
    				int i_27_ = (1152500623 * client.anInt1570 - -1128893257 * client.aClass91_Sub9_Sub1_1480.anInt1858) / 16;
    				Class81.anIntArrayArray1121 = new int[i_27_][4];
    				for (int i_28_ = 0; i_28_ < i_27_; i_28_++) {
    					for (int i_29_ = 0; i_29_ < 4; i_29_++) {
    						Class81.anIntArrayArray1121[i_28_][i_29_] = client.aClass91_Sub9_Sub1_1480.readInt2(2020318655);
    					}
    				}
    				final int i_30_ = client.aClass91_Sub9_Sub1_1480.readLEShort(1305777632);
    				final int i_31_ = client.aClass91_Sub9_Sub1_1480.readUnsignedShort((byte) -70);
    				final int i_32_ = client.aClass91_Sub9_Sub1_1480.readShortA((byte) -124);
    				Class68.anIntArray802 = new int[i_27_];
    				Class91_Sub24.anIntArray2140 = new int[i_27_];
    				Class91_Sub21.anIntArray2089 = new int[i_27_];
    				Class91_Sub9.aByteArrayArray1859 = new byte[i_27_][];
    				Class91_Sub5.aByteArrayArray1805 = new byte[i_27_][];
    				boolean forceSend = false;
    				if ((i_32_ / 8 == 48 || 49 == i_32_ / 8) && i_26_ / 8 == 48) {
    					forceSend = true;
    				}
    				if (48 == i_32_ / 8 && i_26_ / 8 == 148) {
    					forceSend = true;
    				}
    first thing you are saying is what the **** is all this mumbo jumbo, well its pretty much the loading of map and object files in the cache and ends up parsing them for us to show us the runescape landscape. Also it plants your camera where you set the localx and localY of the player. the readint in the forint loop is the xtea keys used to encrypt the object files of the cache, making it difficult for us rsps people to use maps, but not all are encrypted.
    The first byte is the only byte which is obviously our height.
    Here comes a tricky part, where the regionX and regionY are sent, well if u look at where the xtea are sent, the regionX is the outerloop and the regionY is the inner loop
    then the height or 4 possible heights see that "if ((i_32_ / 8 == 48" thats the regionX checking if the map is needed so no doubt is the last short send

    the conclusion to mapregion is


    Code:
        public final void sendMapRegion() {
            player.setLastKnownRegion(player.getLocation()); //this is used to calculate when the player needs to be sent a new mapregion update
            PacketBuilder pb = new PacketBuilder(87, Packet.Type.VAR_SHORT);
    
            int regionX = player.getLocation().getRegionX();
            int regionY = player.getLocation().getRegionY();
            boolean forceSend = true;
            if ((((regionX / 8) == 48) || ((regionX / 8) == 49)) && ((regionY / 8) == 48)) {
                forceSend = false;
            }
            if (((regionX / 8) == 48) && ((regionY / 8) == 148)) {
                forceSend = false;
            }
            pb.putByteS((byte) player.getLocation().getZ());
            pb.putLEShort(regionY);
            for (int xCalc = (player.getLocation().getRegionX() - 6) / 8; xCalc <= (player.getLocation().getRegionX() + 6) / 8; xCalc++) {
                for (int yCalc = (player.getLocation().getRegionY() - 6) / 8; yCalc <= (player.getLocation().getRegionY() + 6) / 8; yCalc++) {
                    int region = yCalc + (xCalc << 8);
                    int[] xteaData = WorldModule.getLogic().getLibrary().getKey(region);
                    for (int index = 0; index < xteaData.length; index++) {
                        if (forceSend || ((yCalc != 49) && (yCalc != 149) && (yCalc != 147) && (xCalc != 50) && ((xCalc != 49) || (yCalc != 47)))) {
                            pb.putInt2(xteaData[index]);
                        }
                    }
                }
            }
            pb.putLEShort(player.getLocation().getLocalX());
            pb.putShort(player.getLocation().getLocalY());
            pb.putShortA(regionX);
    
            player.getSession().write(pb.toPacket());
        }
    So now you have login, mapregion, and player updating found and handled.. Well not player updating. time for window pane!
    Window pane essentially tells the client to draw the game

    The best way honestly is to search for "< 100;" inside the packet handling method, and you should see a few usages, but!
    The window pane only uses 1 short and that infact is the windowId, and in our case is 548.
    Code:
    				if (-2005995539 * client.currentPacketId == 69) {
    					final int i_103_ = client.aClass91_Sub9_Sub1_1480.readShortA((byte) -101);
    					client.anInt1602 = -1301836881 * i_103_;
    					Class102.method1084(i_103_, -2080537870);
    					Class97.method1072(-1918719153 * client.anInt1602, (byte) -20);
    					for (int i_104_ = 0; i_104_ < 100; i_104_++) {
    						client.aBooleanArray1645[i_104_] = true;
    					}
    					client.currentPacketId = -1986708965;
    					return true;
    				}
    Code:
        public final void sendWindow(int window) {
            player.getSession().write(new PacketBuilder(69).putShortA(window).toPacket());
        }


    client contains:
    my sql item, npc, anim dumper, it was poorly done, but hey it works.

    31 deob.rar
    Xtea.java
    Code:
        public static String getString(ByteBuffer buffer) {
            StringBuilder string = new StringBuilder();
            int i;
            while ((i = buffer.get() & 0xff) != 0) {
                string.append((char) i);
            }
            return string.toString();
        }
    
        public static String getString(ChannelBuffer buffer) {
            StringBuilder string = new StringBuilder();
            int i;
            while ((i = buffer.readByte() & 0xff) != 0) {
                string.append((char) i);
            }
            return string.toString();
        }
    Credits:

    Richard
    Jesse
    Reply With Quote  
     

  2. Thankful users:


  3. #2  
    Registered Member
    Anadyr's Avatar
    Join Date
    Nov 2009
    Posts
    682
    Thanks given
    31
    Thanks received
    100
    Rep Power
    675
    reserved for future use
    Reply With Quote  
     

  4. #3  
    Extreme Donator How to emulate any revision Market Banned



    Join Date
    Dec 2010
    Age
    25
    Posts
    6,060
    Thanks given
    1,692
    Thanks received
    1,238
    Rep Power
    1765
    Great info! Will refer to this thread later on.
    Reply With Quote  
     

  5. #4  
    Banned

    Join Date
    Aug 2007
    Posts
    4,130
    Thanks given
    0
    Thanks received
    64
    Rep Power
    0
    thank u for this, now im pro java programmer
    Reply With Quote  
     

  6. #5  
    Registered Member Beershake's Avatar
    Join Date
    Mar 2011
    Age
    28
    Posts
    287
    Thanks given
    49
    Thanks received
    25
    Rep Power
    2
    Thanks for this, hopefully I can get RS2-Server 474 get to 317
    Reply With Quote  
     

  7. #6  
    If you read this you're gay!
    Infexis's Avatar
    Join Date
    Aug 2009
    Age
    28
    Posts
    4,557
    Thanks given
    1,158
    Thanks received
    1,174
    Rep Power
    2949
    Nice contribution, good job!

    "If you can't explain it simply, you don't understand it well enough." - Albert Einstein
    Reply With Quote  
     

  8. #7  
    Registered Wizard

    Jesse's Avatar
    Join Date
    Sep 2009
    Age
    29
    Posts
    5,119
    Thanks given
    1,519
    Thanks received
    1,148
    Rep Power
    5000
    Quote Originally Posted by Beershake View Post
    Thanks for this, hopefully I can get RS2-Server 474 get to 317
    thats easy since hyperion was a 317 to start with, just look at a hyperion 317



    Reply With Quote  
     

  9. #8  
    leme give u some n00ts

    noot noot's Avatar
    Join Date
    Dec 2012
    Posts
    1,186
    Thanks given
    191
    Thanks received
    132
    Rep Power
    409
    Nice info.
    Attached image
    Spoiler for :

    [Today 05:42 AM] Thakiller: Danced to make us lauigh and put a smile on our faces
    Reply With Quote  
     

  10. #9  
    Project Drop-Zone Owner & The BLOOD Gang Always Banging RED


    Join Date
    May 2013
    Age
    28
    Posts
    2,992
    Thanks given
    5
    Thanks received
    937
    Rep Power
    183
    Very nice information. Probably took forever to write It all up though.
    Reply With Quote  
     

  11. #10  
    Registered Member Beershake's Avatar
    Join Date
    Mar 2011
    Age
    28
    Posts
    287
    Thanks given
    49
    Thanks received
    25
    Rep Power
    2
    Quote Originally Posted by JesseTheWizard View Post
    thats easy since hyperion was a 317 to start with, just look at a hyperion 317
    Actually yeah, maybe porting a 317 to any higher revision or vice versa would be nice idea then.
    Reply With Quote  
     

Page 1 of 2 12 LastLast

Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. Replies: 0
    Last Post: 04-07-2012, 03:16 AM
  2. [614] How to reset any item
    By jet kai in forum Tutorials
    Replies: 11
    Last Post: 12-13-2011, 06:07 AM
  3. Replies: 3
    Last Post: 06-14-2010, 12:31 AM
  4. how to update a revision
    By DarkSlayerz in forum Help
    Replies: 8
    Last Post: 05-30-2010, 05:13 PM
  5. Replies: 7
    Last Post: 06-14-2008, 10:19 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •