Thread: [PI] Project Rambo (Brutality based) Cleaned and efficient for any PVP Base

Page 1 of 2 12 LastLast
Results 1 to 10 of 13
  1. #1 [PI] Project Rambo (Brutality based) Cleaned and efficient for any PVP Base 
    Registered Member
    Join Date
    Apr 2012
    Posts
    83
    Thanks given
    79
    Thanks received
    52
    Rep Power
    30
    Project Rambo

    Credits:
    Before you download this, I recommend checking Ardi's Brutalityrsps: http://www.rune-server.org/runescape...pped-dice.html and thanking/repping him for his base. Project Rambo is designed to be a pvp [pi-based] server with minimum performance issues.

    The server has all the nice features in Brutalityrsps and:
    Features:
    Removed majority of processes now made into events. Some performance issues completely gone.
    Cleaned combat assistant and player commands. Repackaged most of the server's combat.
    Removed and redid few skills(firemaking,cooking,woodcutting,mining and thieving) Rambo was designed for only pvp base servers.
    Reduced clipped lag.
    Dialogues removed, npcs removed fresh server ready to be made for pvp base.
    Barrows/Ancient warrior armour degrading base added.

    Currently the server is enabled to connect to any client. To disable go into server.net.RS2LoginProtocolDecoder and replace the entire class with this:
    Code:
    package server.net;
    
    import org.apache.mina.common.ByteBuffer;
    import org.apache.mina.common.IoFuture;
    import org.apache.mina.common.IoFutureListener;
    import org.apache.mina.common.IoSession;
    import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
    import org.apache.mina.filter.codec.ProtocolCodecFilter;
    import org.apache.mina.filter.codec.ProtocolDecoderOutput;
    
    import server.Config;
    import server.Connection;
    import server.Server;
    import server.model.players.Client;
    import server.model.players.PlayerHandler;
    import server.model.players.PlayerSave;
    import server.util.ISAACRandomGen;
    
    /**
     * Login protocol decoder.
     * @author Graham
     * @author Ryan / Lmctruck30 <- login Protocol fixes
     *
     */
    public class RS2LoginProtocolDecoder extends CumulativeProtocolDecoder {
    	
    	/**
    	 * Parses the data in the provided byte buffer and writes it to
    	 * <code>out</code> as a <code>Packet</code>.
    	 *
    	 * @param session The IoSession the data was read from
    	 * @param in	  The buffer
    	 * @param out	 The decoder output stream to which to write the <code>Packet</code>
    	 * @return Whether enough data was available to create a packet
    	 */
    	public static String UUID;
    	@Override
    	public boolean doDecode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) {
    			synchronized(session) {
    				Object loginStageObj = session.getAttribute("LOGIN_STAGE");
    				int loginStage = 0;
    				if(loginStageObj != null) {
    					loginStage = (Integer)loginStageObj;
    				}
    				//Logger.log("recv login packet, stage: "+loginStage);
    				switch(loginStage) {
    				case 0:
    					if(2 <= in.remaining()) {
    						int protocol = in.get() & 0xff;
    						@SuppressWarnings("unused")
    						int nameHash = in.get() & 0xff;
    						if(protocol == 14) {
    							long serverSessionKey = ((long) (java.lang.Math.random() * 99999999D) << 32) + (long) (java.lang.Math.random() * 99999999D);
    						    StaticPacketBuilder s1Response = new StaticPacketBuilder();
    						    s1Response.setBare(true).addBytes(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }).addByte((byte) 0).addLong(serverSessionKey);
    						    session.setAttribute("SERVER_SESSION_KEY", serverSessionKey);
    						    session.write(s1Response.toPacket());
    						    session.setAttribute("LOGIN_STAGE", 1);
    						}
    						return true;
    					} else {
    						in.rewind();
    						return false;
    					}
    				case 1:
    					@SuppressWarnings("unused")
    					int loginType = -1, loginPacketSize = -1, loginEncryptPacketSize = -1;
    					if(2 <= in.remaining()) {
    						loginType = in.get() & 0xff; //should be 16 or 18
    						loginPacketSize = in.get() & 0xff;
    						loginEncryptPacketSize = loginPacketSize-(36+1+1+2);
    						if(loginPacketSize <= 0 || loginEncryptPacketSize <= 0) {
    							System.out.println("Zero or negative login size.");
    							session.close();
    							return false;
    						}
    					} else {
    						in.rewind();
    						return false;
    					}
    					if(loginPacketSize <= in.remaining()) {
    						int magic = in.get() & 0xff;
    						int version = in.getUnsignedShort();
    						if(magic != 255) {
    							//System.out.println("Wrong magic id.");
    							session.close();
    							return false;
    						}
    						if(version != 1) {
    							//Dont Add Anything
    						}
    						@SuppressWarnings("unused")
    						int lowMem = in.get() & 0xff;
    						for(int i = 0; i < 9; i++) {
    							in.getInt();
    						}
    						loginEncryptPacketSize--;
    						if(loginEncryptPacketSize != (in.get() & 0xff)) {
    							System.out.println("Encrypted size mismatch.");
    							session.close();
    							return false;
    						}
    						if((in.get() & 0xff) != 10) {
    							System.out.println("Encrypted id != 10.");
    							session.close();
    							return false;
    						}
    						long clientSessionKey = in.getLong();
    						long serverSessionKey = in.getLong();
    						int uid = in.getInt();
    						if(uid != 784506102) {
    							session.close();
    							return false;
    						}
    						UUID = readRS2String(in);
    						
    						/*if(uid == 0 || uid == 99735086 || uid == 26342) {
    							session.close();
    							return false;
    						}*/
    						
    						String name = readRS2String(in);
    						String pass = readRS2String(in);
    						int sessionKey[] = new int[4];
    						sessionKey[0] = (int)(clientSessionKey >> 32);
    						sessionKey[1] = (int)clientSessionKey;
    						sessionKey[2] = (int)(serverSessionKey >> 32);
    						sessionKey[3] = (int)serverSessionKey;
    						ISAACRandomGen inC = new ISAACRandomGen(sessionKey);
    						for(int i = 0; i < 4; i++) sessionKey[i] += 50;
    						ISAACRandomGen outC = new ISAACRandomGen(sessionKey);
    						load(session, uid, name, pass, inC, outC, version, UUID);
    						// WorkerThread.load(session, name, pass, inC, outC);
    						session.getFilterChain().remove("protocolFilter");
    						session.getFilterChain().addLast("protocolFilter", new ProtocolCodecFilter(new GameCodecFactory(inC)));
    						return true;
    					} else {
    						in.rewind();
    						return false;
    					}
    				}
    			}
    		return false;
    	}
    
    	private synchronized void load(final IoSession session, final int uid, String name, String pass, final ISAACRandomGen inC, ISAACRandomGen outC, int version, String UUID) {
    		session.setAttribute("opcode", -1);
    		session.setAttribute("size", -1);
    		int loginDelay = 1;
    		int returnCode = 2;
    		
    		name = name.trim();
    		name = name.toLowerCase();
    		pass = pass.toLowerCase();
    		
    		if(!name.matches("[A-Za-z0-9 ]+")) {
    			returnCode = 4;
    		}
    		
    		if(name.length() > 12) {
    			returnCode = 8;
    		}
    		
    		Client cl = new Client(session, -1);
    		cl.playerName = name;
    		cl.playerName2 = cl.playerName;
    		cl.playerPass = pass;
    		cl.setInStreamDecryption(inC);
    		cl.setOutStreamDecryption(outC);
    		cl.outStream.packetEncryption = outC;
    				
    		cl.saveCharacter = false;
    		
    		char first = name.charAt(0);
    		cl.properName = Character.toUpperCase(first)+ name.substring(1, name.length());
    		
    		if(Connection.isNamedBanned(cl.playerName)) {
    			returnCode = 4;
    		}
    		if(Connection.isUidBanned(UUID)) {
    			returnCode = 22;
    		}
    		
    		if(PlayerHandler.isPlayerOn(name)) {
    			returnCode = 5;
    		}
    		
    		//if(Config.CLIENT_VERSION != version) {
    			//returnCode = 6;
    		//}
    		
    		if(PlayerHandler.playerCount >= Config.MAX_PLAYERS) {
    			returnCode = 7;
    		}
    		
    //		Login Limit Exceeded
    //		if() {
    //			returnCode = 9;
    //		}
    		
    		if(Server.UpdateServer) {
    			returnCode = 14;
    		}
    		
    //		if(Connection.checkLoginList(loginIp)) {
    //			returnCode = 16;
    //		}
    		
    //		Just Left World Login Delay Included
    //		if() {
    //			returnCode = 21;
    //		}
    		
    		if(returnCode == 2) {
    			int load = PlayerSave.loadGame(cl, cl.playerName, cl.playerPass);
    			if (load == 0)
    				cl.addStarter = true;
    			if(load == 3) {
    				returnCode = 3;
    				cl.saveFile = false;
    			} else {
    				for(int i = 0; i < cl.playerEquipment.length; i++) {
    					if(cl.playerEquipment[i] == 0) {
    						cl.playerEquipment[i] = -1;
    						cl.playerEquipmentN[i] = 0;
    					}
    				}
    				if(!Server.playerHandler.newPlayerClient(cl)) {
    					returnCode = 7;
    					cl.saveFile = false;
    				} else {
    					cl.saveFile = true;
    				}
    			}
    		}
    		
    		cl.packetType = -1;
    		cl.packetSize = 0;
    		
    		StaticPacketBuilder bldr = new StaticPacketBuilder();
    		bldr.setBare(true);
    		bldr.addByte((byte) returnCode);
    		if(returnCode == 2) {
    			cl.saveCharacter = true;
    			if(cl.playerRights == 15) {
    				bldr.addByte((byte) 2);
    			} else {
    				bldr.addByte((byte) cl.playerRights);
    			}
    			//cl.playerServer = "riotscape.no-ip.info";
    		} else if(returnCode == 21) {
    			bldr.addByte((byte) loginDelay);
    		} else {
    			bldr.addByte((byte) 0);
    		}
    		cl.isActive = true;
    		bldr.addByte((byte) 0);
    		Packet pkt = bldr.toPacket();
    		final Client fcl = cl;
    		session.setAttachment(cl);
    		session.write(pkt).addListener(new IoFutureListener() {
    			@Override
    			public void operationComplete(IoFuture arg0) {
    				session.getFilterChain().remove("protocolFilter");
    				session.getFilterChain().addFirst("protocolFilter", new ProtocolCodecFilter(new GameCodecFactory(inC)));				
    			}
    		});
    	}
    
    	private synchronized String readRS2String(ByteBuffer in) {
    		StringBuilder sb = new StringBuilder();
    		byte b;
    		while((b = in.get()) != 10) {
    			sb.append((char) b);
    		}
    		return sb.toString();
    	}
    
    
    
    	/**
    	 * Releases the buffer used by the given session.
    	 *
    	 * @param session The session for which to release the buffer
    	 * @throws Exception if failed to dispose all resources
    	 */
    	@Override
    	public void dispose(IoSession session) throws Exception {
    		super.dispose(session);
    	}
    
    }
    And finally enable sendCrashFrame in PlayerAssistant. You must connect to the client provided by Ardi if you followed this tutorial.


    Download Server: Project Rambo BrutalityRSPS Based
    Reply With Quote  
     

  2. Thankful users:


  3. #2  
    Registered Member
    Join Date
    Jun 2013
    Posts
    176
    Thanks given
    141
    Thanks received
    26
    Rep Power
    45
    Eh decent i guess.
    Quote Originally Posted by TheXenon View Post
    The code I created and posted, don't get made cause you can't rsps kid...
    Reply With Quote  
     

  4. #3  
    Registered Member
    Join Date
    Sep 2013
    Posts
    880
    Thanks given
    43
    Thanks received
    57
    Rep Power
    58
    what client? keldagrim?
    Reply With Quote  
     

  5. #4  
    Registered Member
    Join Date
    Aug 2013
    Posts
    60
    Thanks given
    48
    Thanks received
    9
    Rep Power
    11
    Goodjob thanks for this probably will use
    Reply With Quote  
     

  6. #5  
    Registered Member

    Join Date
    Feb 2011
    Posts
    1,143
    Thanks given
    545
    Thanks received
    110
    Rep Power
    87
    Yeah what client would you use for this? nice release. Repped ++ and gave a thanks!

    Reply With Quote  
     

  7. #6  
    Donator

    Join Date
    Jul 2012
    Age
    28
    Posts
    657
    Thanks given
    269
    Thanks received
    58
    Rep Power
    10
    i wil try get it conected to keldagrim im bored anyway

    nvm failed @ it im tired
    Reply With Quote  
     

  8. #7  
    Registered Member Joseph69's Avatar
    Join Date
    Sep 2012
    Posts
    293
    Thanks given
    45
    Thanks received
    20
    Rep Power
    56
    Normally people add clients to releases, but never mind. I would love to be notified on which client you used for this sir.
    Reply With Quote  
     

  9. #8  
    Banned
    Join Date
    Apr 2013
    Posts
    283
    Thanks given
    64
    Thanks received
    72
    Rep Power
    0
    yah keldagrim ya
    Reply With Quote  
     

  10. Thankful user:


  11. #9  
    Donator
    Skater's Avatar
    Join Date
    Nov 2011
    Posts
    545
    Thanks given
    21
    Thanks received
    23
    Rep Power
    0
    We want a client
    Reply With Quote  
     

  12. #10  
    Banned
    Join Date
    Aug 2011
    Posts
    1,062
    Thanks given
    197
    Thanks received
    214
    Rep Power
    0
    better pics!
    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: 27
    Last Post: 07-27-2023, 10:49 PM
  2. [PI/Any base]Easy and efficient quest system
    By Haskell Curry in forum Tutorials
    Replies: 6
    Last Post: 10-14-2013, 04:51 PM
  3. Replies: 2
    Last Post: 12-14-2012, 10:29 PM
  4. Replies: 3
    Last Post: 12-04-2010, 07:52 PM
  5. Replies: 6
    Last Post: 10-11-2010, 05:01 AM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •