Thread: Item Dropping Doesn't Show For Other Members Pi

Results 1 to 2 of 2
  1. #1 Item Dropping Doesn't Show For Other Members Pi 
    Banned
    Join Date
    Jan 2012
    Posts
    265
    Thanks given
    6
    Thanks received
    14
    Rep Power
    0
    So, I am encountering an issue with item dropping on my server.

    A - Player 1
    B - Player 2


    If player A drops item(s) on the ground, and player B is waiting for item(s) to show up. Mean while nothing happens and then items just disappear. The item player 1 dropped never shows up for player 2.

    This is DropItem.java
    Code:
    package server.model.players.packets;
    
    import server.Config;
    import server.Server;
    import server.model.players.Client;
    import server.model.players.PacketType;
    import server.model.players.PlayerSave;
    
    /**
     * Drop Item
     **/
    public class DropItem implements PacketType {
    
    	@Override
    	public void processPacket(Client c, int packetType, int packetSize) {
    		int itemId = c.getInStream().readUnsignedWordA();
    		c.getInStream().readUnsignedByte();
    		c.getInStream().readUnsignedByte();
    		int slot = c.getInStream().readUnsignedWordA();
    		if(c.inTrade) {
    			c.sendMessage("You can't drop items while trading!");
    			return;
    		}
    		if(c.isDead) {
    			c.sendMessage("You can't drop items when you are dead.");
    			return;
    		} 
    		/*if(c.newPlayer()) {
    			c.getTimeLeftForNP();
    			return;
    		} */
    		boolean droppable = true;
    		for (int i : Config.UNDROPPABLE_ITEMS) {
    			if (i == itemId) {
    				droppable = false;
    				break;
    			}
    		}
    		boolean destroyable = false;
    		for (int i : Config.DESTROYABLES) {
    			if (i == itemId) {
    				destroyable = true;
    				break;
    			}
    		}
    		if(c.playerItemsN[slot] != 0 && itemId != -1 && c.playerItems[slot] == itemId + 1) {
    			if (destroyable) {
    				c.getPA().destroyInterface(itemId);
    				return;
    			}
    			if(droppable) {
    				if (c.underAttackBy > 0) {
    					if (c.getShops().getItemShopValue(itemId) > 1000) {
    						c.sendMessage("You may not drop items worth more than 1000 while in combat.");
    						return;
    					}
    				}
    				Server.itemHandler.createGroundItem(c, itemId, c.getX(), c.getY(), c.playerItemsN[slot], c.getId());
    				c.getItems().deleteItem(itemId, slot, c.playerItemsN[slot]);
    				 if(Config.SOUND){
      c.sendSound(c.getSound().DROPITEM);
      }
    				PlayerSave.saveGame(c);
    			} else
    				c.sendMessage("This item cannot be dropped.");
    		}
    		c.getPA().closeAllWindows();
    	}
    }
    ItemHandler.java if needed?:
    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 {
    							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[], double[] soaking) {
    		int slot = -1;
    		for (int i = 0; i < 11740; 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;
    		try {
    			newItemList.soakingInfo = soaking;
    		} catch (Exception e) {}
    		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[20];
    		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;
    						}
    					}
    					double[] soaking = new double[3];
    					try {
    					for (int i = 18; i < 21; i++) {
    						if (token3[i] != null) {
    							soaking[i - 18] = Double.parseDouble(token3[i]);
    						} else {
    							break;
    						}
    					}
    					} catch (Exception _ex) {}
    					newItemList(Integer.parseInt(token3[0]), token3[1].replaceAll("_", " "), token3[2].replaceAll("_", " "), Double.parseDouble(token3[4]), Double.parseDouble(token3[4]), Double.parseDouble(token3[6]), Bonuses, soaking);
    				}
    			} 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  
    Banned
    Join Date
    Jan 2012
    Posts
    265
    Thanks given
    6
    Thanks received
    14
    Rep Power
    0
    Does anyone know what the issue could be also, items show up when you kill a player but dropping it in the wild don't work either and suggestions??
    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. Replies: 2
    Last Post: 09-13-2012, 01:39 AM
  2. Loyality Title not Showing For others..
    By Assist in forum Help
    Replies: 15
    Last Post: 03-23-2012, 06:15 AM
  3. Replies: 6
    Last Post: 04-25-2010, 12:02 PM
  4. Replies: 20
    Last Post: 09-23-2009, 02:17 PM
  5. Object/item/npc ID's showing for admin only
    By Harry in forum Snippets
    Replies: 15
    Last Post: 06-08-2009, 03:26 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
  •