Thread: [667] In-Game Drop Rates Viewer

Page 1 of 2 12 LastLast
Results 1 to 10 of 18
  1. #1 [667] In-Game Drop Rates Viewer 
    Registered Member
    Join Date
    Jan 2015
    Age
    28
    Posts
    210
    Thanks given
    2
    Thanks received
    53
    Rep Power
    2
    Hey guys, bringing a quick tutorial on a script I wrote for players to check the packed drop rates of NPCs ingame.

    I did take the portion for formatting Item Amounts from the TizenX NetWealth class, but it's just for convenience.

    First off, you're going to want to head to InterfaceManager.java and add these import statements

    Code:
    import com.rs.cache.loaders.NPCDefinitions;
    import com.rs.game.npc.Drop;
    import com.rs.utils.NPCDrops;
    import com.rs.cache.loaders.ItemDefinitions;
    Next you will want to add this method anywhere in InterfaceManager.java
    Code:
    public void sendDropRates(int npcId, int amountKilled) {
    			NPCDefinitions defs = NPCDefinitions.getNPCDefinitions(npcId);
    			Drop[] drops = NPCDrops.getDrops(npcId);
    			if (drops == null) {
    				player.sendMessage("This NPC has no Drops");
    				return;
    			}
    			sendInterface(275);
    			player.getPackets().sendIComponentText(275, 2, defs.name +" Drop Table/Rates");
    			player.getPackets().sendIComponentText(275,16, "You have killed <col=ff0000>" + amountKilled +"</col> "+ defs.name +"s");
    			player.getPackets().sendIComponentText(275, 17, "");
    			player.getPackets().sendIComponentText(275, 18, "<col=00BFFF><shad=000000>Drop           Amount        Rate</shad></col>");
    			for (int i = 0;i<drops.length;i++) 
    			player.getPackets().sendIComponentText(275, 19 + i, !drops[i].oneAmount() ? "<col=ff0000><shad=000000>" +
    																ItemDefinitions.getItemDefinitions(drops[i].getItemId()).getName() + "           " +  
    																drops[i].getFormattedMinAmount() + "-" + drops[i].getFormattedMaxAmount() + "        " + drops[i].getFormattedRate() + "</col></shad>" : 
    																"<col=ff0000> <shad=000000>" +ItemDefinitions.getItemDefinitions(drops[i].getItemId()).getName() + "           " + 
    																drops[i].getFormattedMaxAmount() + "        " + drops[i].getFormattedRate() + "</col></shad>");
    																									
    			for (int i = 19 + drops.length; i < 316; i++)
    				player.getPackets().sendIComponentText(275, i, "");		
    		}

    Next you want to head over to Drop.java and add these lines of code in
    Code:
    	public boolean oneAmount() {
    		return maxAmount == minAmount;
    	}
    
    public String getFormattedMinAmount() {
    		return Utils.formatGP(minAmount);
    	}
    	public String getFormattedMaxAmount() {
    		return Utils.formatGP(maxAmount);
    	}
    public String getFormattedRate() {
    		return Utils.formatPercentage(rate);
    	}
    Next head to Utils.java and add this in
    Code:
    public static String formatGP(int coins) {
    		double total = 0;
    		total += (double)coins/1000000;
    		String mark = "";
    		if(total < 0.001) {
    			mark = "";
    			total = total * 1000000;
    		} else if(total >= 0.001 && total < 1) {
    			mark = "K";
    			total = total * 1000000;
    		} else if(total >= 1 && total < 1000) {
    			mark = "M";
    		} else if(total >= 1000 && total < 1000000) {
    			mark = "B";
    			total = total / 1000;
    		} else if(total >= 1000000 && total < 1000000000) {
    			mark = "T";
    			total = total / 1000000;
    		}
    		DecimalFormat df = new DecimalFormat("#0.00");
    		String formatted = df.format(total);
    		double finished = Double.parseDouble(formatted);
    		return "" + finished + mark;
    	}
    	
    	public static String formatPercentage(double percent) {
    		if (percent == 0.0)
    			return "0";
    		String formatted = "";
    		double doubPercent = (100.0/percent);
    		double roundOff = (double) Math.round(doubPercent * 100) / 100;
    		formatted = "1/"+ roundOff + "";	
    		return formatted;	
    	}

    That's all the code you will need to add. To call the method, you will obviously need to have some way of getting the NPC ID, I made a dialogue. For the part that says "amountkilled" you want to add the counter for the npc killed if available. Example: player.killedBandos;

    If you would like an example dialogue here it is:

    DropRates.java
    Code:
    /*package com.rs.game.player.dialogues;
    
    import com.rs.Settings;
    import com.rs.cache.loaders.NPCDefinitions;
    import com.rs.game.player.dialogues.Dialogue;
    import com.rs.game.player.Player;
    import com.rs.utils.KillStreakRank;
    import com.rs.utils.PkRank;
    import com.rs.utils.ShopsHandler;
    
    public class DropRates extends Dialogue {
    
    	@Override
    	public void start() {
    		sendDialogue(SEND_4_OPTIONS, "Select an NPC",
    				"Slayer Monsters", "Bosses", "Revenants", "Frost Dragons");
    	}
    
    	public void run(int interfaceId, int componentId) {
    		if (stage == -1) {
    			if (componentId == 1) {
    				sendDialogue(SEND_4_OPTIONS, "Select an NPC",
    				"Abyssal Demons", "Dark Beasts", "Abyssal Demons (ice)", "Back");
    				stage = 0;
    			} else if (componentId == 2) {
    				sendDialogue(SEND_5_OPTIONS, "Select an NPC",
    				"Godwars", "Blink", "Vorago", "Corporeal Beast", "Next Page");
    				stage = 1;
    			} else if (componentId == 3) {               
    				player.getInterfaceManager().sendDropRates(13479,player.killedRevenant);
    				end();				
    			} else if (componentId == 4) {
    				player.getInterfaceManager().sendDropRates(51,player.killedFrostie);
    				end();
    			} 				
    		} else if (stage == 0) {
    			if (componentId == 1) {
    				player.getInterfaceManager().sendDropRates(1615,player.killedAbyssalDemon);
    				end();
    			} else if (componentId == 2) {
    				player.getInterfaceManager().sendDropRates(2783,player.killedDarkBeast);
    				end();
    			}else if (componentId == 3) {
    				player.getInterfaceManager().sendDropRates(15668,player.killedIceAbyssalDemon);
    				end();
    			} else {
    				sendDialogue(SEND_4_OPTIONS, "Select an NPC",
    				"Slayer Monsters", "Bosses", "Revenants", "Frost Dragons");
    				stage = -1;
    			}
    		} else if (stage == 1) {
    			if (componentId == 1) {
    				sendDialogue(SEND_5_OPTIONS, "Select an NPC",
    				"Armadyl", "Bandos", "Zamorak", "Saradomin", "Back");
    				stage = 2;
    			} else if (componentId == 2) {
    				player.getInterfaceManager().sendDropRates(12878,player.killedBlink);
    				end();
    			} else if (componentId == 3) {
    				player.getInterfaceManager().sendDropRates(8141,player.killedVorago);
    				end();
    			} else if (componentId == 4) {
    				player.getInterfaceManager().sendDropRates(8133, player.killedCorp);
    				end();
    			} else {
    				sendDialogue(SEND_5_OPTIONS, "Select an NPC",
    				"Corporeal Beast (L33T)", "King Black Dragon", "Tormented Demon", "Nomad", "Next Page");
    				stage = 3;
    			}
    		} else if (stage == 2) {
    			if (componentId == 1) {
    				player.getInterfaceManager().sendDropRates(6222,player.killedKree);
    				end();
    			} else if (componentId == 2) {
    				player.getInterfaceManager().sendDropRates(6260,player.killedGraardor);
    				end();
    			} else if (componentId == 3) {
    				player.getInterfaceManager().sendDropRates(6203,player.killedKril);
    				end();
    			} else if (componentId == 4) {
    				player.getInterfaceManager().sendDropRates(6247, player.killedZilyana);
    				end();
    			} else {
    				sendDialogue(SEND_5_OPTIONS, "Select an NPC",
    				"Godwars", "Blink", "Vorago", "Corporeal Beast", "Next Page");
    				stage = 1;
    			}
    		} else if (stage == 3) {
    			if (componentId == 1) {
    				player.getInterfaceManager().sendDropRates(14500,player.killedL33t);
    				end();
    			} else if (componentId == 2) {
    				player.getInterfaceManager().sendDropRates(50,player.killedKBD);
    				end();
    			} else if (componentId == 3) {
    				player.getInterfaceManager().sendDropRates(8349,player.killedTD);
    				end();
    			} else if (componentId == 4) {
    				player.getInterfaceManager().sendDropRates(8528, player.killedNomad);
    				end();
    			} else {
    				sendDialogue(SEND_5_OPTIONS, "Select an NPC",
    				"Avatar of Destruction", "BeastPk Demon", "Thunder", "Evil Chicken", "Flamebeed");
    				stage = 4;
    			}
    		} else if (stage == 4) {
    			if (componentId == 1) {
    				player.getInterfaceManager().sendDropRates(8596,player.killedAOD);
    				end();
    			} else if (componentId == 2) {
    				player.getInterfaceManager().sendDropRates(15881,player.killedBPD);
    				end();
    			} else if (componentId == 3) {
    				player.getInterfaceManager().sendDropRates(11872,player.killedThunder);
    				end();
    			} else if (componentId == 4) {
    				player.getInterfaceManager().sendDropRates(3375, player.killedChicken);
    				end();
    			} else {
    				player.getInterfaceManager().sendDropRates(3494, player.killedFlambeed);
    				end();
    			}
    		}
    		
    
    	}
    	@Override
    	public void finish() {
    
    	}
    
    }*/
    If done correctly, this will be the outcome:
    Attached image
     

  2. Thankful users:


  3. #2  
    Husband. Father.
    Loyalty_'s Avatar
    Join Date
    Aug 2013
    Age
    28
    Posts
    1,170
    Thanks given
    74
    Thanks received
    130
    Rep Power
    64
    Doesn't look that bad. but would probably look nicer in a different interface.
    Loyalty_





    Quote Originally Posted by Falconpunch View Post
    Player.java buddy. find init() or something like that and find where it adds the starter and do what someone mentioned above (Although an int is 4 scrublords)
     

  4. #3  
    Registered Member
    Zach's Avatar
    Join Date
    Aug 2013
    Posts
    1,120
    Thanks given
    24
    Thanks received
    513
    Rep Power
    5000
    I like it, nice
    ZachTX's RSPS Video Services (10,000+ Loyal RSPS Subscribers)
    CLICK HERE!

    Attached image
     

  5. #4  
    Best Rat Donor

    Australisch's Avatar
    Join Date
    Nov 2015
    Posts
    2,049
    Thanks given
    968
    Thanks received
    481
    Rep Power
    4962
    Something different, nice release.
     

  6. #5  
    Registered Member

    Join Date
    Feb 2014
    Posts
    429
    Thanks given
    5
    Thanks received
    3
    Rep Power
    173
    Nice system its a shame the rates are not accurate.
     

  7. #6  
    Registered Member
    Join Date
    Jun 2015
    Posts
    323
    Thanks given
    21
    Thanks received
    11
    Rep Power
    7
    Code:
    Very common	1 in 5 kills
    Common	1 in 10 kills
    Semi-common	1 in 20 kills
    Uncommon	1 in 50 kills (?)
    Semi-rare	1 in 75 kills
    Rare	1 in 100 kills
    Very rare	1 in 500 kills
    Extremely rare	1 in 1000 kills
     

  8. #7  
    (Official) Thanksgiver

    Arham's Avatar
    Join Date
    Jan 2013
    Age
    23
    Posts
    3,415
    Thanks given
    7,254
    Thanks received
    1,938
    Rep Power
    3905
    Probably not accurate.
    Attached image
    Attached image
    Quote Originally Posted by MrClassic View Post
    Arham is the official thanker!
    List of my work here!
     

  9. #8  
    Registered Member Trey C's Avatar
    Join Date
    Aug 2014
    Posts
    36
    Thanks given
    1
    Thanks received
    4
    Rep Power
    2
    1/2.5?????
     

  10. #9  
    Registered Member
    Join Date
    Jan 2015
    Age
    28
    Posts
    210
    Thanks given
    2
    Thanks received
    53
    Rep Power
    2
    Quote Originally Posted by Qwaz View Post
    Nice system its a shame the rates are not accurate.
    It's taking the rates directly from the packeddrops file. So it's as accurate as it's going to get.

    Quote Originally Posted by arham 4 View Post
    Probably not accurate.
    Taken directly from packeddrops file. Unless there's a better way you tell me.

    Quote Originally Posted by Trey C View Post
    1/2.5?????
    2/5, 3/7.5. Simple math, if you can't read that then you should repeat primary school. It's made for those who don't want to convert the percentages mentally that Drop.java gives.
     

  11. Thankful user:


  12. #10  
    Registered Member

    Join Date
    Feb 2014
    Posts
    429
    Thanks given
    5
    Thanks received
    3
    Rep Power
    173
    Taking it for the packed drops does not make your ratios correct.
     

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. [667+] In-Game Item Searching
    By OG KingFox in forum Snippets
    Replies: 28
    Last Post: 04-05-2014, 07:14 PM
  2. Replies: 2
    Last Post: 03-26-2013, 03:21 AM
  3. How to lower drop rates in Teamtorva source
    By wallyg123 in forum Help
    Replies: 2
    Last Post: 07-25-2012, 02:49 AM
  4. Replies: 3
    Last Post: 06-22-2012, 01:43 PM
  5. [PI] Drop rate - Hits in Wild
    By entrix in forum Help
    Replies: 2
    Last Post: 12-16-2010, 03:44 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
  •