Thread: PI dropped items arent visible for other players

Page 1 of 2 12 LastLast
Results 1 to 10 of 15
  1. #1 PI dropped items arent visible for other players 
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    Hello, when i drop an item it doesnt appear for other players.
    How can this be fixed?

    itemhandler
    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 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 < 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;
    		if (ItemId == 0x1941 || ItemId == 0x106A)
    		{
    			for (int i = 0; i < Bonuses.length; i++)
    			{
    				if (ItemId == 0x1941)
    				{
    					Bonuses[i] = 0x7530;
    				}
    				else
    				{
    					Bonuses[i] = 300;
    					Bonuses[10] = 250;
    				}
    			}
    		}
    		
    		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;
    	}
    }
    dropitem
    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();
    		c.alchDelay = System.currentTimeMillis();
    		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]);
    				PlayerSave.saveGame(c);
    			} else
    				c.sendMessage("This item cannot be dropped.");
    		}
    		c.getPA().closeAllWindows();
    	}
    }
    Reply With Quote  
     

  2. #2  
    Spread Love

    Dhruv's Avatar
    Join Date
    Feb 2012
    Age
    28
    Posts
    1,011
    Thanks given
    157
    Thanks received
    167
    Rep Power
    215
    It has a timer of like 60 seconds, did you wait for that long or no?

    Code:
    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());
    						}
    					}
    				}
    			}
    		}
    	}
    Reply With Quote  
     

  3. #3  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    Quote Originally Posted by Physco View Post
    It has a timer of like 60 seconds, did you wait for that long or no?

    Code:
    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());
    						}
    					}
    				}
    			}
    		}
    	}
    Yes i did
    Reply With Quote  
     

  4. #4  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    bump
    Reply With Quote  
     

  5. #5  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    bump
    Reply With Quote  
     

  6. #6  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    bump
    Reply With Quote  
     

  7. #7  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    bump
    Reply With Quote  
     

  8. #8  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    bump
    Reply With Quote  
     

  9. #9  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    bump
    Reply With Quote  
     

  10. #10  
    Donator

    Join Date
    Jun 2012
    Posts
    637
    Thanks given
    129
    Thanks received
    87
    Rep Power
    57
    Bump
    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: 3
    Last Post: 06-14-2013, 10:28 PM
  2. Replies: 2
    Last Post: 09-13-2012, 01:39 AM
  3. Replies: 13
    Last Post: 08-24-2012, 06:10 PM
  4. Replies: 6
    Last Post: 04-25-2010, 12:02 PM
  5. Replies: 2
    Last Post: 02-12-2010, 09:42 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
  •