Thread: NPC Item Drop Interface

Page 2 of 3 FirstFirst 123 LastLast
Results 11 to 20 of 27
  1. #11  
    Success is the worst teacher

    Santa Hat's Avatar
    Join Date
    Oct 2012
    Age
    27
    Posts
    3,334
    Thanks given
    807
    Thanks received
    1,185
    Rep Power
    190
    Quote Originally Posted by deaneo8 View Post
    do u have these btw getItemName and sendSimpleDialogue
    because these only two error i get
    player.java

    Code:
    	public void sendSimpleDialogue(Object... parameters) {
    		getDialogueManager().startDialogue("SimpleMessage", parameters);
    	}
    Item.java

    Code:
    	public static String getItemName(Item item) {
    		return ItemDefinitions.getItemDefinitions(item.getId()).getName();
    	}


    Reply With Quote  
     

  2. #12  
    Donator


    Join Date
    Jul 2013
    Posts
    1,233
    Thanks given
    1
    Thanks received
    493
    Rep Power
    0


    really great to see you still releasing things.

    When I first started in the RSPS scene; you're help/dedication in sharing knowledge was a major help in developing my skills. Thank you for your previous and ongoing contributions.
    Reply With Quote  
     

  3. #13  
    Registered Member
    Join Date
    Mar 2013
    Posts
    579
    Thanks given
    684
    Thanks received
    137
    Rep Power
    217
    Quote Originally Posted by Koto View Post
    Anyone else having this issue?

    Code:
    java.lang.NullPointerException
    	at com.rs.game.entity.character.content.ViewNPCDrops.sendInterface(ViewNPCDrops.java:38)
    	at com.rs.network.decoders.handlers.NPCHandler.handleExamine(NPCHandler.java:64)
    	at com.rs.network.decoders.WorldPacketsDecoder.processPackets(WorldPacketsDecoder.java:1819)
    	at com.rs.network.decoders.WorldPacketsDecoder.decode(WorldPacketsDecoder.java:262)
    	at com.rs.network.ServerChannelHandler.messageReceived(ServerChannelHandler.java:116)
    	at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:100)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
    	at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
    	at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
    	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
    	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
    	at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    dw im getting same error bro
    Reply With Quote  
     

  4. #14  
    Extreme Donator

    Skrew's Avatar
    Join Date
    Jul 2011
    Posts
    894
    Thanks given
    166
    Thanks received
    121
    Rep Power
    122
    Quote Originally Posted by deaneo8 View Post
    dw im getting same error bro
    Did you find a fix for it?
    Reply With Quote  
     

  5. #15  
    Registered Member
    Join Date
    Mar 2013
    Posts
    579
    Thanks given
    684
    Thanks received
    137
    Rep Power
    217
    nop iv got same problem bro
    Reply With Quote  
     

  6. #16  
    Registered Member
    Join Date
    Sep 2017
    Posts
    16
    Thanks given
    3
    Thanks received
    0
    Rep Power
    11
    im using matrix 718. im not that great at coding and im having an issue wich says cant find itemdefinition. my skype is dluidakid09b if someone can help me out i appreciate it. i like this i jsut cant seem to get it together
    Reply With Quote  
     

  7. #17  
    Registered Member
    Join Date
    Mar 2013
    Posts
    579
    Thanks given
    684
    Thanks received
    137
    Rep Power
    217
    my say the coal has market vaule of null coins why
    Reply With Quote  
     

  8. #18  
    Registered Member
    Join Date
    Sep 2013
    Posts
    31
    Thanks given
    17
    Thanks received
    0
    Rep Power
    11
    My 718 server does not even work the EXAMINE, would anyone have any idea what to do to make it work?
    Reply With Quote  
     

  9. #19  
    Development Services √

    Oogle's Avatar
    Join Date
    Apr 2012
    Age
    25
    Posts
    3,976
    Thanks given
    650
    Thanks received
    516
    Rep Power
    483
    Spoiler for saved:
    Quote Originally Posted by Santa Hat View Post
    What you're adding

    Attached image

    This gives the player the ability to right click 'Examine' a NPC to retrieve it's drops in a nice visual way. You can sort the display of the items listed by clicking the backpack in the bottom right corner.

    The sorting options consist of;
    • highest drop rate
    • Lowest drop rate
    • Highest market value
    • Lowest market value


    Spoiler for Code:

    Spoiler for ViewNPCDrops.java:

    Code:
    package com.rs.game.player.content;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    import com.rs.cache.loaders.ItemDefinitions;
    import com.rs.cache.loaders.NPCDefinitions;
    import com.rs.game.item.Item;
    import com.rs.game.npc.Drop;
    import com.rs.game.player.Player;
    import com.rs.utils.NPCDrops;
    import com.rs.utils.Utils;
    
    /**
     * @author Jake
     * Displays a list of all the NPC's item drops
     */
    public class ViewNPCDrops {
    
    	/**
    	 * Displays the interface
    	 */
    	public static void sendInterface(Player player, int npcId) {
    		Drop[] drops = getSortedList(player, NPCDrops.getDrops(npcId));
    		
    		if (drops == null) {
    			player.out("The " + NPCDefinitions.getNPCDefinitions(npcId).name + " doesn't have any drops to offer.");
    			return;
    		}
    		
    		player.getInterfaceManager().sendInterface(671);
    		player.getPackets().sendIComponentText(671, 14, "Drops for " + NPCDefinitions.getNPCDefinitions(npcId).name + ".");
    		
    		player.getNpcDrops().clear();
    		
    		
    		for (int i = 0; i < drops.length; i++) {
    			if (i > 30) //Maximum of 30 items on the interface
    				break;
    			player.getNpcDrops().add(new Item(drops[i].getItemId(), ItemDefinitions.getItemDefinitions(drops[i].getItemId()).isStackable() ? drops[i].getMaxAmount() : 1));
    		}
    		player.getPackets().sendItems(530, player.getNpcDrops());
    		
    	
    		player.getPackets().sendUnlockIComponentOptionSlots(671, 27, 0, 530, 0, 1, 2);
    		player.getPackets().sendInterSetItemsOptionsScript(671, 27, 530, 6, 5, "View", "Price Check", "Examine");
    		
    		player.getTemporaryAttributtes().put("drops", npcId);
    		
    		player.setCloseInterfacesEvent(new Runnable() {
    			@Override
    			public void run() {
    				player.getTemporaryAttributtes().remove("drops");
    			}
    		});
    	}
    	
    	/**
    	 * Contains all the different sorting options
    	 */
    	private static Object[] sortTypes = new Object[] { "highest drop rate" , "lowest drop rate",  "highest market value", "lowest market value" };
    	
    	/**
    	 * Modifies the sorting orders for the drops
    	 */
    	public static void changeSortType(Player player, int npcId) {
    		if (player.getDropSortingType() == 3) 
    			player.setDropSortingType(0);
    		else
    			player.setDropSortingType(player.getDropSortingType() + 1);
    		
    		player.sendSimpleDialogue("You are now sorting by <col=FF0000>"+ sortTypes[player.getDropSortingType()] + "</col>.");
    		sendInterface(player, npcId);
    	}
    	
    	/**
    	 * Sorts the drop list
    	 */
    	private static Drop[] getSortedList(Player player, Drop[] drops) {
    		/*
    		 * Populate DropList
    		 */
    		List<Drop> dropList = new ArrayList<Drop>();
    		for (int i = 0; i < drops.length; i++) {
    			dropList.add(drops[i]);
    		}
    		switch (player.getDropSortingType()) {
    			case 0: //Sort Drop List by highest drop rate 
    				Collections.sort(dropList, (s1, s2) -> Double.compare(s2.getRate(), s1.getRate()));
    				break;
    			case 1: //Sort Drop List by lowest drop rate 
    				Collections.sort(dropList, (s1, s2) -> Double.compare(s1.getRate(), s2.getRate()));
    				break;
    			case 2: //Sort by highest market value
    				Collections.sort(dropList, (s1, s2) -> Integer.compare(ItemDefinitions.getItemDefinitions(s2.getItemId()).getValue(), ItemDefinitions.getItemDefinitions(s1.getItemId()).getValue()));
    				break;
    			case 3: //Sort by lowest market value
    				Collections.sort(dropList, (s1, s2) -> Integer.compare(ItemDefinitions.getItemDefinitions(s1.getItemId()).getValue(), ItemDefinitions.getItemDefinitions(s2.getItemId()).getValue()));
    				break;
    		}
    	
    		return dropList.toArray(drops);
    	}
    	
    	/**
    	 * View Item Option
    	 * Displays Items Drop Rate Percentage
    	 */
    	public static void sendDropRateMessage(Player player, Item item, int npcId, int slotId) {		
    		player.sendSimpleDialogue("<col=FF0000>"+Item.getItemName(item) + "</col> has a <col=FF0000>" + getDropRate(item.getId(), npcId) + "%</col> chance of being dropped by the " + NPCDefinitions.getNPCDefinitions(npcId).name + ".");
    	}
    	
    	/**
    	 * Sends Price Check
    	 */
    	public static void sendPriceCheckMessage(Player player, Item item) {
    		int value = item.getDefinitions().getValue();
    		player.sendSimpleDialogue("The " + item.getDefinitions().getName() + " has a market value of <col=FF0000>" + Utils.getFormat(value) + "</col> coins.");
    	}
    	
    	/**
    	 * Returns the drop rate of an item
    	 */
    	public static double getDropRate(int itemId, int npcId) {
    		Drop[] drops = NPCDrops.getDrops(npcId);
    		
    		for (int i = 0; i < drops.length; i++) {
    			if (drops[i].getItemId() == itemId) {
    				return drops[i].getRate();
    			}
    		}
    		return 0;
    	}
    	
    }



    Spoiler for Player.java:

    Code:
    	/**
    	 * NPC Drops
    	 */
    	
    	private int dropSortingType = 0;
    	
    	public int getDropSortingType() {
    		return dropSortingType;
    	}
    
    	public void setDropSortingType(int dropSortingType) {
    		this.dropSortingType = dropSortingType;
    	}
    	
    	private boolean toggleDrops;
    	
    	public boolean isToggleDrops() {
    		return toggleDrops;
    	}
    
    	public void setToggleDrops(boolean toggleDrops) {
    		this.toggleDrops = toggleDrops;
    	}
    	
    	private ItemsContainer<Item> npcDrops = new ItemsContainer<Item>(31, false);
    	
    	public ItemsContainer<Item> getNpcDrops() {
    		return npcDrops;
    	}
    
    	public void setNpcDrops(ItemsContainer<Item> npcDrops) {
    		this.npcDrops = npcDrops;
    	}



    Spoiler for NPCHandler.java within handleExamine method:

    Code:
    		if (player.isToggleDrops()) {
    			ViewNPCDrops.sendInterface(player, npc.getId());
    		}


    Spoiler for ButtonHandler.java replace interfaceId == 671 as is also used for Beast of burden:

    Code:
    		} else if (interfaceId == 671) {
    			if (player.getTemporaryAttributtes().get("drops") == Boolean.FALSE) {
    				if (player.getFamiliar() == null || player.getFamiliar().getBob() == null)
    					return;
    			}
    			if (componentId == 27) {
    				if (packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET) {
    					
    					if (player.getTemporaryAttributtes().get("drops") != null) {
    						ViewNPCDrops.sendDropRateMessage(player, player.getNpcDrops().get(slotId), (int) player.getTemporaryAttributtes().get("drops"), slotId);
    					} else
    						player.getFamiliar().getBob().removeItem(slotId, 1);
    					
    					
    					
    					
    					
    				} else if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET) {
    					
    					if (player.getTemporaryAttributtes().get("drops") != null) {
    						ViewNPCDrops.sendPriceCheckMessage(player, player.getNpcDrops().get(slotId));
    					} else
    						player.getFamiliar().getBob().removeItem(slotId, 5);
    					
    					
    					
    					
    					
    					
    				} else if (packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET) {
    					
    					if (player.getTemporaryAttributtes().get("drops") != null) {
    						player.sendSimpleDialogue(ItemExamines.getExamine(player.getNpcDrops().get(slotId)));
    					} else 
    						player.getFamiliar().getBob().removeItem(slotId, 10);
    					
    					
    					
    					
    				} else if (packetId == WorldPacketsDecoder.ACTION_BUTTON4_PACKET)
    					player.getFamiliar().getBob().removeItem(slotId, Integer.MAX_VALUE);
    				else if (packetId == WorldPacketsDecoder.ACTION_BUTTON5_PACKET) {
    					player.getTemporaryAttributtes().put("bob_item_X_Slot", slotId);
    					player.getTemporaryAttributtes().put("bob_isRemove", Boolean.TRUE);
    					player.getPackets().sendRunScript(108, new Object[] { "Enter Amount:" });
    				}
    			} else if (componentId == 29) {
    				if (player.getTemporaryAttributtes().get("drops") != null) {
    					ViewNPCDrops.changeSortType(player, (int) player.getTemporaryAttributtes().get("drops"));
    				} else
    					player.getFamiliar().takeBob();
    			}


    Spoiler for Commands.java:
    Code:
    			case "drops":
    				player.setToggleDrops(!player.isToggleDrops());
    				player.out("You have " + (player.isToggleDrops() ? "enabled" : "disabled") + " right click examine to view NPC's drops.");
    				return true;






    The Interface can only display 32 items so this is why the sort function is powerful. Obviously I could have used the bank interface but personal opinion thinks this looks cleaner.

    I also realize things like this have been released, this is just my take on it.


    Attached image

    Attached image



    Saving this, thank you


    Attached image

    Attached image
    Reply With Quote  
     

  10. #20  
    Slay your Gn0M3s


    Join Date
    Oct 2012
    Posts
    108
    Thanks given
    9
    Thanks received
    46
    Rep Power
    102
    Very nice. I'm going to attempt to convert to 876.
    The quieter you are, the more you are able to hear.
    Reply With Quote  
     

Page 2 of 3 FirstFirst 123 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. NPC Item Drop Ratios...
    By thatsgodzkill in forum Help
    Replies: 3
    Last Post: 08-16-2011, 12:51 PM
  2. Npc doesnt drop item help?
    By BenjaminZz in forum Help
    Replies: 2
    Last Post: 04-26-2011, 03:22 AM
  3. [Emulous] - Npc Item Drops?
    By Guard1an in forum Help
    Replies: 3
    Last Post: 04-14-2009, 01:41 AM
  4. [REQUEST] Npc att and item drops.[REQUEST]
    By t3aowner in forum Requests
    Replies: 2
    Last Post: 10-13-2008, 09:16 PM
  5. Making stackable items drop in stacks from npcs
    By daniel89 in forum Tutorials
    Replies: 6
    Last Post: 10-07-2008, 07:55 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
  •