Thread: NPC Drop Item?

Results 1 to 3 of 3
  1. #1 NPC Drop Item? 
    Registered Member
    Join Date
    Dec 2011
    Posts
    15
    Thanks given
    0
    Thanks received
    1
    Rep Power
    11
    Is there anything wrong with my ItemHandler? I've searched for the fix everywhere and there doesn't seem to be one

    I need to enable drops ASAP for my PI source.

    Code:
    package server.world;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.File;
    import java.util.Scanner;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import server.Config;
    import server.Server;
    import server.model.items.GroundItem;
    import server.model.items.ItemList;
    import server.model.players.Client;
    import server.model.players.Player;
    import server.util.Misc;
    
    /**
    * Handles ground items
    **/
    
    public class ItemHandler {
    
    	public List<GroundItem> items = new ArrayList<GroundItem>();
    	public static final int HIDE_TICKS = 100;
    	
    	public ItemHandler() {			
    		for(int i = 0; i < Config.ITEM_LIMIT; i++) {
    			ItemList[i] = null;
    		}
    		loadItemList("item.cfg");
    		loadItemPrices("prices.txt");
    	}
    	
    	/**
    	* Adds item to list
    	**/	
    	public void addItem(GroundItem item) {
    		items.add(item);
    	}
    	
    	/**
    	* Removes item from list
    	**/	
    	public void removeItem(GroundItem item) {
    		items.remove(item);
    	}
    	
    	/**
    	* Item amount
    	**/	
    	public int itemAmount(int itemId, int itemX, int itemY) {
    		for(GroundItem i : items) {
    			if(i.getItemId() == itemId && i.getItemX() == itemX && i.getItemY() == itemY) {
    				return i.getItemAmount();
    			}
    		}
    		return 0;
    	}
    	
    	
    	/**
    	* Item exists
    	**/	
    	public boolean itemExists(int itemId, int itemX, int itemY) {
    		for(GroundItem i : items) {
    			if(i.getItemId() == itemId && i.getItemX() == itemX && i.getItemY() == itemY) {
    				return true;
    			}
    		}
    		return false;
    	}
    	
    	/**
    	* Reloads any items if you enter a new region
    	**/
    	public void reloadItems(Client c) {
    		for(GroundItem i : items) {
    			if(c != null){
    				if (c.getItems().tradeable(i.getItemId()) || i.getName().equalsIgnoreCase(c.playerName)) {
    					if (c.distanceToPoint(i.getItemX(), i.getItemY()) <= 60) {
    						if(i.hideTicks > 0 && i.getName().equalsIgnoreCase(c.playerName)) {
    							c.getItems().removeGroundItem(i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    							c.getItems().createGroundItem(i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    						}
    						if(i.hideTicks == 0) {
    							c.getItems().removeGroundItem(i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    							c.getItems().createGroundItem(i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    						}
    					}
    				}	
    			}
    		}
    	}
    	
    	public void process() {
    		ArrayList<GroundItem> toRemove = new ArrayList<GroundItem>();
    		for (int j = 0; j < items.size(); j++) {			
    			if (items.get(j) != null) {
    				GroundItem i = items.get(j);
    				if(i.hideTicks > 0) {
    					i.hideTicks--;
    				}
    				if(i.hideTicks == 1) { // item can now be seen by others
    					i.hideTicks = 0;
    					createGlobalItem(i);
    					i.removeTicks = HIDE_TICKS;
    				}
    				if(i.removeTicks > 0) {
    					i.removeTicks--;
    				}
    				if(i.removeTicks == 1) {
    					i.removeTicks = 0;
    					toRemove.add(i);
    					removeGlobalItem(i, i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    				}
    			
    			}
    		
    		}
    		
    		for (int j = 0; j < toRemove.size(); j++) {
    			GroundItem i = toRemove.get(j);
    			removeGlobalItem(i, i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());	
    		}
    		for(GroundItem i : items) {
    			if(i.hideTicks > 0) {
    				i.hideTicks--;
    			}
    			if(i.hideTicks == 1) { // item can now be seen by others
    				i.hideTicks = 0;
    				createGlobalItem(i);
    				i.removeTicks = HIDE_TICKS;
    			}
    			if(i.removeTicks > 0) {
    				i.removeTicks--;
    			}
    			if(i.removeTicks == 1) {
    				i.removeTicks = 0;
    				removeGlobalItem(i, i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    			}
    		}
    	}
    	
    	
    	
    	/**
    	* Creates the ground item 
    	**/
    	public int[][] brokenBarrows = {{4708,4860},{4710,4866},{4712,4872},{4714,4878},{4716,4884},
    	{4720,4896},{4718,4890},{4720,4896},{4722,4902},{4732,4932},{4734,4938},{4736,4944},{4738,4950},
    	{4724,4908},{4726,4914},{4728,4920},{4730,4926},{4745,4956},{4747,4926},{4749,4968},{4751,4994},
    	{4753,4980},{4755,4986},{4757,4992},{4759,4998}};
    	public void createGroundItem(Client c, int itemId, int itemX, int itemY, int itemAmount, int playerId) {
    		if(itemId > 0) {
    			if (itemId >= 2412 && itemId <= 2414) {
    				c.sendMessage("The cape vanishes as it touches the ground.");
    				return;
    			}
    			if (itemId > 4705 && itemId < 4760) {
    				for (int j = 0; j < brokenBarrows.length; j++) {
    					if (brokenBarrows[j][0] == itemId) {
    						itemId = brokenBarrows[j][1];
    						break;
    					}
    				}
    			}
    			if (!server.model.items.Item.itemStackable[itemId] && itemAmount > 0) {
    				for (int j = 0; j < itemAmount; j++) {
    					c.getItems().createGroundItem(itemId, itemX, itemY, 1);
    					GroundItem item = new GroundItem(itemId, itemX, itemY, 1, c.playerId, HIDE_TICKS, Server.playerHandler.players[playerId].playerName);
    					addItem(item);
    				}	
    			} else {
    				c.getItems().createGroundItem(itemId, itemX, itemY, itemAmount);
    				GroundItem item = new GroundItem(itemId, itemX, itemY, itemAmount, c.playerId, HIDE_TICKS, Server.playerHandler.players[playerId].playerName);
    				addItem(item);
    			}
    		}
    	}
    	
    	
    	/**
    	* Shows items for everyone who is within 60 squares
    	**/
    	public void createGlobalItem(GroundItem i) {
    		for (Player p : Server.playerHandler.players){
    			if(p != null) {
    			Client person = (Client)p;
    				if(person != null){
    					if(person.playerId != i.getItemController()) {
    						if (!person.getItems().tradeable(i.getItemId()) && person.playerId != i.getItemController())
    							continue;
    						if (person.distanceToPoint(i.getItemX(), i.getItemY()) <= 60) {
    							person.getItems().createGroundItem(i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    						}
    					}
    				}
    			}
    		}
    	}
    			
    
    			
    	/**
    	* Removing the ground item
    	**/
    	
    	public void removeGroundItem(Client c, int itemId, int itemX, int itemY, boolean add){
    		for(GroundItem i : items) {
    			if(i.getItemId() == itemId && i.getItemX() == itemX && i.getItemY() == itemY) {
    				if(i.hideTicks > 0 && i.getName().equalsIgnoreCase(c.playerName)) {
    					if(add) {
    						if (!c.getItems().specialCase(itemId)) {
    							if(c.getItems().addItem(i.getItemId(), i.getItemAmount())) {   
    								removeControllersItem(i, c, i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    								break;
    							}
    						} else {
    							c.getItems().handleSpecialPickup(itemId);
    							removeControllersItem(i, c, i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    							break;
    						}
    					} else {
    						removeControllersItem(i, c, i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    						break;
    					}
    				} else if (i.hideTicks <= 0) {
    					if(add) {
    						if(c.getItems().addItem(i.getItemId(), i.getItemAmount())) {  
    							removeGlobalItem(i, i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    							break;
    						}
    					} else {
    						removeGlobalItem(i, i.getItemId(), i.getItemX(), i.getItemY(), i.getItemAmount());
    						break;
    					}
    				}
    			}
    		}
    	}
    	
    	/**
    	* Remove item for just the item controller (item not global yet)
    	**/
    	
    	public void removeControllersItem(GroundItem i, Client c, int itemId, int itemX, int itemY, int itemAmount) {
    		c.getItems().removeGroundItem(itemId, itemX, itemY, itemAmount);
    		removeItem(i);
    	}
    	
    	/**
    	* Remove item for everyone within 60 squares
    	**/
    	
    	public void removeGlobalItem(GroundItem i, int itemId, int itemX, int itemY, int itemAmount) {
    		for (Player p : Server.playerHandler.players){
    			if(p != null) {
    			Client person = (Client)p;
    				if(person != null){
    					if (person.distanceToPoint(itemX, itemY) <= 60) {
    						person.getItems().removeGroundItem(itemId, itemX, itemY, itemAmount);
    					}
    				}
    			}
    		}
    		removeItem(i);
    	}
    		
    	
    
    	/**
    	*Item List
    	**/
    	
    	public ItemList ItemList[] = new ItemList[Config.ITEM_LIMIT];
    	
    
    	public void newItemList(int ItemId, String ItemName, String ItemDescription, double ShopValue, double LowAlch, double HighAlch, int Bonuses[]) {
    		// first, search for a free slot
    		int slot = -1;
    		for (int i = 0; i < 20082; i++) {
    			if (ItemList[i] == null) {
    				slot = i;
    				break;
    			}
    		}
    
    		if(slot == -1) return;		// no free slot found
    		ItemList newItemList = new ItemList(ItemId);
    		newItemList.itemName = ItemName;
    		newItemList.itemDescription = ItemDescription;
    		newItemList.ShopValue = ShopValue;
    		newItemList.LowAlch = LowAlch;
    		newItemList.HighAlch = HighAlch;
    		newItemList.Bonuses = Bonuses;
    		ItemList[slot] = newItemList;
    	}
    	
    	public void loadItemPrices(String filename) {
    		try {
    			Scanner s = new Scanner(new File("./Data/cfg/" + filename));
    			while (s.hasNextLine()) {
    				String[] line = s.nextLine().split(" ");
    				ItemList temp = getItemList(Integer.parseInt(line[0]));
    				if (temp != null)
    					temp.ShopValue = Integer.parseInt(line[1]);			
    			}		
    		} catch (IOException e) {
    			e.printStackTrace();		
    		}
    	}
    	
    	public ItemList getItemList(int i) {
    		for (int j = 0; j < ItemList.length; j++) {
    			if (ItemList[j] != null) {
    				if (ItemList[j].itemId == i) {
    					return ItemList[j];				
    				}		
    			}		
    		}
    		return null;
    	}
    	
    	public boolean loadItemList(String FileName) {
    		String line = "";
    		String token = "";
    		String token2 = "";
    		String token2_2 = "";
    		String[] token3 = new String[10];
    		boolean EndOfFile = false;
    		int ReadMode = 0;
    		BufferedReader characterfile = null;
    		try {
    			characterfile = new BufferedReader(new FileReader("./Data/cfg/"+FileName));
    		} catch(FileNotFoundException fileex) {
    			Misc.println(FileName+": file not found.");
    			return false;
    		}
    		try {
    			line = characterfile.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.equals("item")) {
    					int[] Bonuses = new int[12];
    					for (int i = 0; i < 12; i++) {
    						if (token3[(6 + i)] != null) {
    							Bonuses[i] = Integer.parseInt(token3[(6 + i)]);
    						} else {
    							break;
    						}
    					}
    					newItemList(Integer.parseInt(token3[0]), token3[1].replaceAll("_", " "), token3[2].replaceAll("_", " "), Double.parseDouble(token3[4]), Double.parseDouble(token3[4]), Double.parseDouble(token3[6]), Bonuses);
    				}
    			} else {
    				if (line.equals("[ENDOFITEMLIST]")) {
    					try { characterfile.close(); } catch(IOException ioexception) { }
    					return true;
    				}
    			}
    			try {
    				line = characterfile.readLine();
    			} catch(IOException ioexception1) { EndOfFile = true; }
    		}
    		try { characterfile.close(); } catch(IOException ioexception) { }
    		return false;
    	}
    }
    Reply With Quote  
     

  2. #2  
    Extreme Donator


    Join Date
    Nov 2009
    Posts
    1,421
    Thanks given
    559
    Thanks received
    266
    Rep Power
    236
    Drops for just npcs, or drops for players...?
    Reply With Quote  
     

  3. #3  
    Banned
    Join Date
    Dec 2011
    Posts
    190
    Thanks given
    27
    Thanks received
    21
    Rep Power
    0
    There is no such thing as enabling them.
    if the drops dont work try ripping it from another source.
    Reply With Quote  
     


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. drop an item
    By Mickt3 in forum Help
    Replies: 5
    Last Post: 10-13-2010, 11:04 PM
  4. Npc Drop Item
    By PrataKosong in forum Help
    Replies: 2
    Last Post: 11-03-2009, 12:04 PM
  5. 525 drop item, equip item streams
    By †blood_eye† in forum Requests
    Replies: 0
    Last Post: 08-11-2009, 11:27 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
  •