Thread: Cache and trading issue

Results 1 to 7 of 7
  1. #1 Cache and trading issue 
    Registered Member Zirnek's Avatar
    Join Date
    May 2016
    Posts
    34
    Thanks given
    4
    Thanks received
    1
    Rep Power
    11
    I have 2 problems, one with Bank tabs, the first tab doesn't show the infinity icon,
    clicking each tab displays the right section, however the icons are wrong and the last one can't be open.
    Attached image
    I know this is a cache sided issue and not the code for bank.java.
    Edit: *I've got 2 files named main_file_cache.dat2 and main_file_cache.dat3, I think it might be related to those, but I couldn't say, don't know how to edit them.*

    Also, 2nd bug, upon trading another player, if the player on the receiving end of items has less free inventory space than the items traded, they disappear.
    Edit: *Fixed: https://www.rune-server.ee/runescape...trade-fix.html *

    Spoiler for Trade.java:

    Code:
    package com.rs.game.player.content;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Serializable;
    import java.text.DateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    import com.rs.game.WorldTile;
    import com.rs.game.item.Item;
    import com.rs.game.item.ItemsContainer;
    import com.rs.game.player.Player;
    import com.rs.utils.Misc;
    
    
    public class Trade implements Serializable {
    
    	private static final long serialVersionUID = 4297266601674588915L;
    	private final Player trader, partner;
    	private TradeState currentState = TradeState.STATE_ONE;// thats how my old
    															// one started
    	private ItemsContainer<Item> traderItemsOffered = new ItemsContainer<Item>(
    			28, false);
    	private ItemsContainer<Item> partnerItemsOffered = new ItemsContainer<Item>(
    			28, false);
    	private boolean traderDidAccept, partnerDidAccept;
    
    	/**
    	 * Constructor
    	 * 
    	 *     @Param trader
    	 *     @Param partner
    	 */
    	public Trade(Player trader, Player partner) {
    		this.trader = trader;
    		this.partner = partner;
    		trader.getTemporaryAttributtes().put("didRequestTrade", Boolean.FALSE);
    		partner.getTemporaryAttributtes().put("didRequestTrade", Boolean.FALSE);
    		trader.setCloseInterfacesEvent(new Runnable() {
    
    			@Override
    			public void run() {
    				tradeFailed();
    
    			}
    
    		});
    		partner.setCloseInterfacesEvent(new Runnable() {
    
    			@Override
    			public void run() {
    				tradeFailed();
    
    			}
    
    		});
    	}
    
    	public void start() {
    		/*if (trader.getSession().getIP().equals(partner.getSession().getIP())) {
    			trader.getPackets().sendGameMessage("You cannot trade yourself.");
    			partner.getPackets().sendGameMessage("You cannot trade yourself.");
    			return;
    		}*/
    		if (trader.getX() == partner.getX() && trader.getY() == partner.getY()) {
    			trader.getInterfaceManager().sendInterface(182);
    			trader.getPackets().sendGameMessage("Cant trade in this position");
    			trader.getPackets().sendGameMessage("Type ;;logout.");
    			trader.getPackets().sendGameMessage("Type ;;logout.");
    			                                               
    			partner.getInterfaceManager().sendInterface(182);
    			partner.getPackets().sendGameMessage("you may need to relog");
    			partner.getPackets().sendGameMessage("Cant trade in this position");
    			partner.getPackets().sendGameMessage("Type ;;logout.");
    			partner.getPackets().sendGameMessage("Type ;;logout.");
    		}
    		refreshScreen();
    		openFirstTradeScreen(trader);
    		openFirstTradeScreen(partner);
    		refreshScreen();
    	}
    
    	/**
    	 * 
    	 *     @Return partner
    	 */
    	public Player getPartner() {
    		return partner;
    	}
    
    	/**
    	 * Sends Options
    	 * 
    	 *     @Param p
    	 */
    	public static void sendOptions(Player p) {
    		Object[] tparams1 = new Object[] { "", "", "", "Value<col=FF9040>",
    				"Remove-X", "Remove-All", "Remove-10", "Remove-5", "Remove",
    				-1, 0, 7, 4, 90, 335 << 16 | 31 };
    		p.getPackets().sendRunScript(150, tparams1);
    		p.getPackets().sendIComponentSettings(335, 31, 0, 27, 1150); // Access
    		Object[] tparams3 = new Object[] { "", "", "", "", "", "", "", "",
    				"Value<col=FF9040>", -1, 0, 7, 4, 90, 335 << 16 | 34 };
    		p.getPackets().sendRunScript(695, tparams3);
    		p.getPackets().sendIComponentSettings(335, 34, 0, 27, 1026); // Access
    		Object[] tparams2 = new Object[] { "", "", "Lend", "Value<col=FF9040>",
    				"Offer-X", "Offer-All", "Offer-10", "Offer-5", "Offer", -1, 0,
    				7, 4, 93, 336 << 16 };
    		p.getPackets().sendRunScript(150, tparams2);
    		p.getPackets().sendIComponentSettings(336, 0, 0, 27, 1278); // Access
    		// refreshScreen();
    
    	}
    
    	/**
    	 * Opens first screen
    	 * 
    	 *     @Param p
    	 */
    	public void openFirstTradeScreen(Player p) {
    	p.addFreezeDelay(999999999);
    	trader.addFreezeDelay(999999999);
    		sendOptions(p);
    		p.getInterfaceManager().sendInterface(335);
    		p.getInterfaceManager().sendInventoryInterface(336);
    		p.getPackets().sendItems(90, false, traderItemsOffered);
    		p.getPackets().sendItems(90, true, partnerItemsOffered);
    		p.getPackets().sendIComponentText(335, 37, "");
    		String name = p.equals(trader) ? partner.getUsername() : trader
    				.getUsername();
    		p.getPackets().sendIComponentText(335, 15,
    				"Trading with: " + Misc.formatPlayerNameForDisplay(name));
    		p.getPackets().sendIComponentText(335, 22,
    				Misc.formatPlayerNameForDisplay(name));
    		refreshScreen();
    		/*if (trader.getLocation().getX() == partner.getLocation().getX() && trader.getLocation().getY() == partner.getLocation().getY()) {
    			trader.sendMessage("Cant trade in this position");
    			trader.getTrade().endSession();
    			partner.sendMessage("Cant trade in this position");
    			partner.getTrade().endSession();
    			return;
    		}*/
    	}
    
    	/**
    	 * Opens second screen
    	 * 
    	 *     @Param p
    	 */
    	public void openSecondTradeScreen(Player p) {
    		currentState = TradeState.STATE_TWO;
    		partnerDidAccept = false;
    		traderDidAccept = false;
    		p.getInterfaceManager().sendInterface(334);
    		p.getPackets().sendIComponentText(334, 54,
    				(Misc.formatPlayerNameForDisplay(trader.getUsername())));
    		p.getPackets().sendIComponentText(334, 34,
    				"Are you sure you want to make this trade?");
    		/*if (trader.getLocation().getX() == partner.getLocation().getX() && trader.getLocation().getY() == partner.getLocation().getY()) {
    			trader.sendMessage("Cant trade in this position");
    			trader.getTrade().endSession();
    			partner.sendMessage("Cant trade in this position");
    			partner.getTrade().endSession();
    			return;
    		}*/
    	}
    
    
    
    	/**
    	 * Add's item to inter.
    	 * 
    	 *     @Param player
    	 *     @Param slot
    	 *     @Param amount
    	 */
    	public void addItem(Player player, int slot, int amount) {
    		if (currentState == TradeState.STATE_ONE) {
    
    			Item item = player.getInventory().getItem(slot);
    			if (item == null)
    				return;
    			switch (item.getId()) {
    				case 20771:
    				case 20769:
    				player.getPackets().sendGameMessage(
    						"That item isn't tradeable.");
    				return;
    			}
    
    
    			/*if (!ItemConstants.isTradeable(item)) {
    				player.getPackets().sendGameMessage(
    						"That item isn't tradeable.");
    				return;
    			}*/
    
    			Item itemsBefore[] = getOffer(player).getItemsCopy();
    			int maxAmount = player.getInventory().getItems().getNumberOf(item);
    			if (amount < maxAmount)
    				item = new Item(item.getId(), amount);
    			else
    				item = new Item(item.getId(), maxAmount);
    			getOffer(player).add(item);
    			player.getInventory().deleteItem(slot, item);
    			refreshItems(player, itemsBefore);
    			resetAccept();
    		}
    		if (currentState == TradeState.STATE_TWO) {
    			return;
    		}
    	}
    
    	/**
    	 * saves Logs TODO
    	 * 
    	 *     @Param player
    	 *     @Param i
    	 */
         @suppressWarnings("unused")
    	private void saveLog(final Player player, final int i) {
    		try {
    			BufferedWriter bf = new BufferedWriter(new FileWriter(
    					"tradelog.txt", true));
    			bf.write("[" + DateFormat.getDateTimeInstance().format(new Date())
    					+ " "
    					+ Calendar.getInstance().getTimeZone().getDisplayName()
    					+ "] " + player.getUsername() + ": " + partnerItemsOffered);
    			bf.newLine();
    			bf.flush();
    			bf.close();
    		} catch (IOException ignored) {
    		}
    	}
    
    	/**
    	 * Shows trade icons (IE the red exclamation)
    	 * 
    	 *     @Param player
    	 *     @Param slot
    	 */
    	public static void TradeIcons(Player player, int slot) {
    		Object[] tparams4 = new Object[] { slot, 7, 4, 21954593 };
    		player.getPackets().sendRunScript(143, tparams4);
    	}
    
    	/**
    	 * getOffer for items.
    	 * 
    	 *     @Param p
    	 *     @Return
    	 */
    	private ItemsContainer<Item> getOffer(Player p) {
    		return p != partner ? traderItemsOffered : partnerItemsOffered;
    	}
    
    	/**
    	 * Gets other offer
    	 * 
    	 *     @Param other
    	 *     @Return
    	 */
    	private Player getOther(Player other) {
    		return other != partner ? partner : other;
    	}
    
    	/**
    	 * Removes Item from interface
    	 * 
    	 *     @Param player
    	 *     @Param slotId
    	 *     @Param amount
    	 */
    	public void removeItem(Player player, int slotId, int amount) {
    		if (currentState != TradeState.STATE_TWO) {
    			Item item = getOffer(player).get(slotId);
    			if (item == null)
    				return;
    			Item itemsBefore[] = getOffer(player).getItemsCopy();
    			int maxAmount = getOffer(player).getNumberOf(item);
    			if (amount < maxAmount)
    				item = new Item(item.getId(), amount);
    			else
    				item = new Item(item.getId(), maxAmount);
    			getOffer(player).remove(slotId, item);
    			player.getInventory().addItem(item);
    			refreshItems(player, itemsBefore);
    			// TradeIcons(partner, slotId);
    			// TradeIcons(trader, slotId);
    			TradeIcons(getOther(player), slotId);
    			resetAccept();
    		}
    	}
    
    	/**
    	 * refreshes items on inter
    	 * 
    	 *     @Param player
    	 *     @Param itemsBefore
    	 */
    	private void refreshItems(Player player, Item itemsBefore[]) {
    		int changedSlots[] = new int[itemsBefore.length];
    		int count = 0;
    		for (int index = 0; index < itemsBefore.length; index++) {
    			Item item = getOffer(player).getItems()[index];
    			if (itemsBefore[index] != item)
    				changedSlots[count++] = index;
    		}
    		int finalChangedSlots[] = new int[count];
    		System.arraycopy(changedSlots, 0, finalChangedSlots, 0, count);
    		refreshScreen();
    	}
    
    	/**
    	 * Refreshes screen
    	 */
    	private void refreshScreen() {
    		trader.getPackets().sendItems(90, false, traderItemsOffered);
    		trader.getPackets().sendItems(90, true, partnerItemsOffered);
    		partner.getPackets().sendItems(90, false, partnerItemsOffered);
    		partner.getPackets().sendItems(90, true, traderItemsOffered);
    		String name = trader.getUsername();
    		partner.getPackets().sendIComponentText(335, 22,
    				Misc.formatPlayerNameForDisplay(name));
    		String name1 = partner.getUsername();
    		trader.getPackets().sendIComponentText(335, 22,
    				Misc.formatPlayerNameForDisplay(name1));
    		trader.getPackets().sendIComponentText(
    				335,
    				21,
    				" has " + partner.getInventory().getFreeSlots()
    						+ " free inventory slots.");
    		partner.getPackets().sendIComponentText(
    				335,
    				21,
    				" has " + trader.getInventory().getFreeSlots()
    						+ " free inventory slots.");
    		trader.getPackets().sendGlobalConfig(729, getTradersItemsValue());
    		trader.getPackets().sendGlobalConfig(697, getPartnersItemsValue());
    		partner.getPackets().sendGlobalConfig(729, getPartnersItemsValue());
    		partner.getPackets().sendGlobalConfig(697, getTradersItemsValue());
    	}
    
    	/**
    	 * Gets trade value
    	 * 
    	 *     @Return returns initial price
    	 */
    	private int getTradersItemsValue() {
    		int initialPrice = 0;
    		for (Item item : traderItemsOffered.toArray()) {
    			if (item != null) {
    				initialPrice += item.getDefinitions().getValue()
    						* item.getAmount();
    			}
    		}
    		return initialPrice;
    	}
    
    	/**
    	 * gets Value of partner
    	 * 
    	 *     @Return regular price
    	 */
    	private int getPartnersItemsValue() {
    		int initialPrice = 0;
    		for (Item item : partnerItemsOffered.toArray()) {
    			if (item != null) {
    				initialPrice += item.getDefinitions().getValue()
    						* item.getAmount();
    			}
    		}
    		return initialPrice;
    	}
    
    	/**
    	 * Sets accepted pressed.
    	 * 
    	 *     @Param pl
    	 */
    	public void acceptPressed(Player pl) {
    		if (!traderDidAccept && pl.equals(trader)) {
    			traderDidAccept = true;
    		} else if (!partnerDidAccept && pl.equals(partner)) {
    			partnerDidAccept = true;
    		}
    		switch (currentState) {
    		case STATE_ONE:
    			if (pl.equals(trader)) {
    				if (partnerDidAccept && traderDidAccept) {
    					if (!trader.getInventory().getItems()
    							.hasSpaceFor(partnerItemsOffered)) {
    						partner.getPackets()
    								.sendGameMessage(
    										"Other player does not have enough space in their inventory.");
    						trader.getPackets()
    								.sendGameMessage(
    										"You do not have enough space in your inventory.");
    						tradeFailed();
    						return;
    					} else if (!partner.getInventory().getItems()
    							.hasSpaceFor(traderItemsOffered)) {
    						trader.getPackets()
    								.sendGameMessage(
    										"Other player does not have enough space in their inventory.");
    						partner.getPackets()
    								.sendGameMessage(
    										"You do not have enough space in your inventory.");
    						tradeFailed();
    						return;
    					}
    					openSecondTradeScreen(trader);
    					openSecondTradeScreen(partner);
    				} else {
    					trader.getPackets().sendIComponentText(335, 37,
    							"Waiting for other player...");
    					partner.getPackets().sendIComponentText(335, 37,
    							"Other player has accepted");
    				}
    			} else if (pl.equals(partner)) {
    				if (partnerDidAccept && traderDidAccept) {
    					if (!trader.getInventory().getItems()
    							.hasSpaceFor(partnerItemsOffered)) {
    						partner.getPackets()
    								.sendGameMessage(
    										"Other player does not have enough space in their inventory.");
    						trader.getPackets()
    								.sendGameMessage(
    										"You do not have enough space in your inventory.");
    						tradeFailed();
    						return;
    					} else if (!partner.getInventory().getItems()
    							.hasSpaceFor(traderItemsOffered)) {
    						trader.getPackets()
    								.sendGameMessage(
    										"Other player does not have enough space in their inventory.");
    						partner.getPackets()
    								.sendGameMessage(
    										"You do not have enough space in your inventory.");
    						tradeFailed();
    						return;
    					}
    					openSecondTradeScreen(trader);
    					openSecondTradeScreen(partner);
    				} else {
    					partner.getPackets().sendIComponentText(335, 37,
    							"Waiting for other player...");
    					trader.getPackets().sendIComponentText(335, 37,
    							"Other player has accepted");
    				}
    			}
    			break;
    
    		case STATE_TWO:
    			if (pl.equals(trader)) {
    				if (partnerDidAccept && traderDidAccept) {
    					giveItems();
    				} else {
    					trader.getPackets().sendIComponentText(334, 34,
    							"Waiting for other player...");
    					partner.getPackets().sendIComponentText(334, 34,
    							"Other player has accepted");
    				}
    			} else if (pl.equals(partner)) {
    				if (partnerDidAccept && traderDidAccept) {
    					giveItems();
    				} else {
    					partner.getPackets().sendIComponentText(334, 34,
    							"Waiting for other player...");
    					trader.getPackets().sendIComponentText(334, 34,
    							"Other player has accepted");
    				}
    			}
    			break;
    		}
    
    	}
    
    	/**
    	 * Ends Session of trade
    	 */
    	public void endSession() {
    	trader.setFreezeDelay(999999999);
    	partner.setFreezeDelay(999999999);
    		trader.getInterfaceManager().closeScreenInterface();
    		trader.getInterfaceManager().closeInventoryInterface();
    		partner.getInterfaceManager().closeScreenInterface();
    		partner.getInterfaceManager().closeInventoryInterface();
    		traderItemsOffered = null;
    		partnerItemsOffered = null;
    		trader.setCloseInterfacesEvent(null);
    		partner.setCloseInterfacesEvent(null);
    		trader.setTrade(null);
    		partner.setTrade(null);
    		trader.getInventory().refresh();
    		partner.getInventory().refresh();
    
    	}
    
    	/**
    	 * WHat happens when tradeFailed
    	 */
    	public void tradeFailed() {
    		trader.getInventory().getItems().addAll(traderItemsOffered);
    		partner.getInventory().getItems().addAll(partnerItemsOffered);
    		partner.getPackets().sendGameMessage("<col=FFF0000>Other player declined trade!</col>");
    		traderItemsOffered = null;
    		partnerItemsOffered = null;
    		trader.setCloseInterfacesEvent(null);
    		partner.setCloseInterfacesEvent(null);
    		trader.getInterfaceManager().closeInventoryInterface();
    		partner.getInterfaceManager().closeInventoryInterface();
    		trader.setTrade(null);
    		partner.setTrade(null);
    		endSession();
    		trader.getInventory().refresh(trader.getInventory().getItems());
    		partner.getInventory().refresh(partner.getInventory().getItems());
    	}
    
    	/**
    	 * Gives items to partner / other
    	 */
    	private void giveItems() {
    		try {
    			if (!trader.getInventory().getItems()
    					.hasSpaceFor(partnerItemsOffered)) {
    				partner.getPackets()
    						.sendGameMessage(
    								"Other player does not have enough space in their inventory.");
    				trader.getPackets().sendGameMessage(
    						"You do not have enough space in your inventory.");
    				tradeFailed();
    				return;
    			} else if (!partner.getInventory().getItems()
    					.hasSpaceFor(traderItemsOffered)) {
    				trader.getPackets()
    						.sendGameMessage(
    								"Other player does not have enough space in their inventory.");
    				partner.getPackets().sendGameMessage(
    						"You do not have enough space in your inventory.");
    				tradeFailed();
    				return;
    			}
    			for (Item itemAtIndex : traderItemsOffered.toArray()) {
    				if (itemAtIndex != null) {
    					partner.getInventory().addItem(itemAtIndex.getId(),
    							itemAtIndex.getAmount());
    				}
    			}
    			for (Item itemAtIndex : partnerItemsOffered.toArray()) {
    				if (itemAtIndex != null) {
    					trader.getInventory().addItem(itemAtIndex.getId(),
    							itemAtIndex.getAmount());
    				}
    			}
    			endSession();
    			partner.getInventory().refresh();
                partner.getPackets().sendGameMessage("Accepted trade.");
    			trader.getInventory().refresh();
    			trader.getPackets().sendGameMessage("Accepted trade.");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * gets items offered
    	 * 
    	 *     @Param p
    	 *     @Return
    	 */
    	public ItemsContainer<Item> getPlayerItemsOffered(Player p) {
    		return (p.equals(trader) ? traderItemsOffered : partnerItemsOffered);
    	}
    
    	public enum TradeState {
    		STATE_ONE, STATE_TWO
    	}
    
    	/**
    	 * resets the accept trade.
    	 */
    	public void resetAccept() {
    		partnerDidAccept = traderDidAccept = false;
    		switch (currentState) {
    		case STATE_ONE:
    			partner.getPackets().sendIComponentText(335, 37, "");
    			trader.getPackets().sendIComponentText(335, 37, "");
    			break;
    		case STATE_TWO:
    			partner.getPackets().sendIComponentText(334, 34, "");
    			trader.getPackets().sendIComponentText(334, 34, "");
    			break;
    		}
    	}
    
    	/**
    	 * Gets the state of trade
    	 * 
    	 *     @Return state
    	 */
    	public TradeState getState() {// Where? Just havent implemented, I got
    									// everything needed tho XD Nice :P Fuck, I
    									// really dont feel like adding more then 3
    									// pets -____-
    		return currentState;
    	}
    }

    Can someone point me in the right direction?
    Reply With Quote  
     

  2. #2  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    Quote Originally Posted by Zirnek View Post
    I have 2 problems, one with Bank tabs, the first tab doesn't show the infinity icon,
    clicking each tab displays the right section, however the icons are wrong and the last one can't be open.
    Attached image
    I know this is a cache sided issue and not the code for bank.java.
    Edit: *I've got 2 files named main_file_cache.dat2 and main_file_cache.dat3, I think it might be related to those, but I couldn't say, don't know how to edit them.*

    Also, 2nd bug, upon trading another player, if the player on the receiving end of items has less free inventory space than the items traded, they disappear.

    Spoiler for Trade.java:

    Code:
    package com.rs.game.player.content;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Serializable;
    import java.text.DateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    import com.rs.game.WorldTile;
    import com.rs.game.item.Item;
    import com.rs.game.item.ItemsContainer;
    import com.rs.game.player.Player;
    import com.rs.utils.Misc;
    
    
    public class Trade implements Serializable {
    
    	private static final long serialVersionUID = 4297266601674588915L;
    	private final Player trader, partner;
    	private TradeState currentState = TradeState.STATE_ONE;// thats how my old
    															// one started
    	private ItemsContainer<Item> traderItemsOffered = new ItemsContainer<Item>(
    			28, false);
    	private ItemsContainer<Item> partnerItemsOffered = new ItemsContainer<Item>(
    			28, false);
    	private boolean traderDidAccept, partnerDidAccept;
    
    	/**
    	 * Constructor
    	 * 
    	 *   @Param trader
    	 *   @Param partner
    	 */
    	public Trade(Player trader, Player partner) {
    		this.trader = trader;
    		this.partner = partner;
    		trader.getTemporaryAttributtes().put("didRequestTrade", Boolean.FALSE);
    		partner.getTemporaryAttributtes().put("didRequestTrade", Boolean.FALSE);
    		trader.setCloseInterfacesEvent(new Runnable() {
    
    			@Override
    			public void run() {
    				tradeFailed();
    
    			}
    
    		});
    		partner.setCloseInterfacesEvent(new Runnable() {
    
    			@Override
    			public void run() {
    				tradeFailed();
    
    			}
    
    		});
    	}
    
    	public void start() {
    		/*if (trader.getSession().getIP().equals(partner.getSession().getIP())) {
    			trader.getPackets().sendGameMessage("You cannot trade yourself.");
    			partner.getPackets().sendGameMessage("You cannot trade yourself.");
    			return;
    		}*/
    		if (trader.getX() == partner.getX() && trader.getY() == partner.getY()) {
    			trader.getInterfaceManager().sendInterface(182);
    			trader.getPackets().sendGameMessage("Cant trade in this position");
    			trader.getPackets().sendGameMessage("Type ;;logout.");
    			trader.getPackets().sendGameMessage("Type ;;logout.");
    			                                               
    			partner.getInterfaceManager().sendInterface(182);
    			partner.getPackets().sendGameMessage("you may need to relog");
    			partner.getPackets().sendGameMessage("Cant trade in this position");
    			partner.getPackets().sendGameMessage("Type ;;logout.");
    			partner.getPackets().sendGameMessage("Type ;;logout.");
    		}
    		refreshScreen();
    		openFirstTradeScreen(trader);
    		openFirstTradeScreen(partner);
    		refreshScreen();
    	}
    
    	/**
    	 * 
    	 *   @Return partner
    	 */
    	public Player getPartner() {
    		return partner;
    	}
    
    	/**
    	 * Sends Options
    	 * 
    	 *   @Param p
    	 */
    	public static void sendOptions(Player p) {
    		Object[] tparams1 = new Object[] { "", "", "", "Value<col=FF9040>",
    				"Remove-X", "Remove-All", "Remove-10", "Remove-5", "Remove",
    				-1, 0, 7, 4, 90, 335 << 16 | 31 };
    		p.getPackets().sendRunScript(150, tparams1);
    		p.getPackets().sendIComponentSettings(335, 31, 0, 27, 1150); // Access
    		Object[] tparams3 = new Object[] { "", "", "", "", "", "", "", "",
    				"Value<col=FF9040>", -1, 0, 7, 4, 90, 335 << 16 | 34 };
    		p.getPackets().sendRunScript(695, tparams3);
    		p.getPackets().sendIComponentSettings(335, 34, 0, 27, 1026); // Access
    		Object[] tparams2 = new Object[] { "", "", "Lend", "Value<col=FF9040>",
    				"Offer-X", "Offer-All", "Offer-10", "Offer-5", "Offer", -1, 0,
    				7, 4, 93, 336 << 16 };
    		p.getPackets().sendRunScript(150, tparams2);
    		p.getPackets().sendIComponentSettings(336, 0, 0, 27, 1278); // Access
    		// refreshScreen();
    
    	}
    
    	/**
    	 * Opens first screen
    	 * 
    	 *   @Param p
    	 */
    	public void openFirstTradeScreen(Player p) {
    	p.addFreezeDelay(999999999);
    	trader.addFreezeDelay(999999999);
    		sendOptions(p);
    		p.getInterfaceManager().sendInterface(335);
    		p.getInterfaceManager().sendInventoryInterface(336);
    		p.getPackets().sendItems(90, false, traderItemsOffered);
    		p.getPackets().sendItems(90, true, partnerItemsOffered);
    		p.getPackets().sendIComponentText(335, 37, "");
    		String name = p.equals(trader) ? partner.getUsername() : trader
    				.getUsername();
    		p.getPackets().sendIComponentText(335, 15,
    				"Trading with: " + Misc.formatPlayerNameForDisplay(name));
    		p.getPackets().sendIComponentText(335, 22,
    				Misc.formatPlayerNameForDisplay(name));
    		refreshScreen();
    		/*if (trader.getLocation().getX() == partner.getLocation().getX() && trader.getLocation().getY() == partner.getLocation().getY()) {
    			trader.sendMessage("Cant trade in this position");
    			trader.getTrade().endSession();
    			partner.sendMessage("Cant trade in this position");
    			partner.getTrade().endSession();
    			return;
    		}*/
    	}
    
    	/**
    	 * Opens second screen
    	 * 
    	 *   @Param p
    	 */
    	public void openSecondTradeScreen(Player p) {
    		currentState = TradeState.STATE_TWO;
    		partnerDidAccept = false;
    		traderDidAccept = false;
    		p.getInterfaceManager().sendInterface(334);
    		p.getPackets().sendIComponentText(334, 54,
    				(Misc.formatPlayerNameForDisplay(trader.getUsername())));
    		p.getPackets().sendIComponentText(334, 34,
    				"Are you sure you want to make this trade?");
    		/*if (trader.getLocation().getX() == partner.getLocation().getX() && trader.getLocation().getY() == partner.getLocation().getY()) {
    			trader.sendMessage("Cant trade in this position");
    			trader.getTrade().endSession();
    			partner.sendMessage("Cant trade in this position");
    			partner.getTrade().endSession();
    			return;
    		}*/
    	}
    
    
    
    	/**
    	 * Add's item to inter.
    	 * 
    	 *   @Param player
    	 *   @Param slot
    	 *   @Param amount
    	 */
    	public void addItem(Player player, int slot, int amount) {
    		if (currentState == TradeState.STATE_ONE) {
    
    			Item item = player.getInventory().getItem(slot);
    			if (item == null)
    				return;
    			switch (item.getId()) {
    				case 20771:
    				case 20769:
    				player.getPackets().sendGameMessage(
    						"That item isn't tradeable.");
    				return;
    			}
    
    
    			/*if (!ItemConstants.isTradeable(item)) {
    				player.getPackets().sendGameMessage(
    						"That item isn't tradeable.");
    				return;
    			}*/
    
    			Item itemsBefore[] = getOffer(player).getItemsCopy();
    			int maxAmount = player.getInventory().getItems().getNumberOf(item);
    			if (amount < maxAmount)
    				item = new Item(item.getId(), amount);
    			else
    				item = new Item(item.getId(), maxAmount);
    			getOffer(player).add(item);
    			player.getInventory().deleteItem(slot, item);
    			refreshItems(player, itemsBefore);
    			resetAccept();
    		}
    		if (currentState == TradeState.STATE_TWO) {
    			return;
    		}
    	}
    
    	/**
    	 * saves Logs TODO
    	 * 
    	 *   @Param player
    	 *   @Param i
    	 */
       @suppressWarnings("unused")
    	private void saveLog(final Player player, final int i) {
    		try {
    			BufferedWriter bf = new BufferedWriter(new FileWriter(
    					"tradelog.txt", true));
    			bf.write("[" + DateFormat.getDateTimeInstance().format(new Date())
    					+ " "
    					+ Calendar.getInstance().getTimeZone().getDisplayName()
    					+ "] " + player.getUsername() + ": " + partnerItemsOffered);
    			bf.newLine();
    			bf.flush();
    			bf.close();
    		} catch (IOException ignored) {
    		}
    	}
    
    	/**
    	 * Shows trade icons (IE the red exclamation)
    	 * 
    	 *   @Param player
    	 *   @Param slot
    	 */
    	public static void TradeIcons(Player player, int slot) {
    		Object[] tparams4 = new Object[] { slot, 7, 4, 21954593 };
    		player.getPackets().sendRunScript(143, tparams4);
    	}
    
    	/**
    	 * getOffer for items.
    	 * 
    	 *   @Param p
    	 *   @Return
    	 */
    	private ItemsContainer<Item> getOffer(Player p) {
    		return p != partner ? traderItemsOffered : partnerItemsOffered;
    	}
    
    	/**
    	 * Gets other offer
    	 * 
    	 *   @Param other
    	 *   @Return
    	 */
    	private Player getOther(Player other) {
    		return other != partner ? partner : other;
    	}
    
    	/**
    	 * Removes Item from interface
    	 * 
    	 *   @Param player
    	 *   @Param slotId
    	 *   @Param amount
    	 */
    	public void removeItem(Player player, int slotId, int amount) {
    		if (currentState != TradeState.STATE_TWO) {
    			Item item = getOffer(player).get(slotId);
    			if (item == null)
    				return;
    			Item itemsBefore[] = getOffer(player).getItemsCopy();
    			int maxAmount = getOffer(player).getNumberOf(item);
    			if (amount < maxAmount)
    				item = new Item(item.getId(), amount);
    			else
    				item = new Item(item.getId(), maxAmount);
    			getOffer(player).remove(slotId, item);
    			player.getInventory().addItem(item);
    			refreshItems(player, itemsBefore);
    			// TradeIcons(partner, slotId);
    			// TradeIcons(trader, slotId);
    			TradeIcons(getOther(player), slotId);
    			resetAccept();
    		}
    	}
    
    	/**
    	 * refreshes items on inter
    	 * 
    	 *   @Param player
    	 *   @Param itemsBefore
    	 */
    	private void refreshItems(Player player, Item itemsBefore[]) {
    		int changedSlots[] = new int[itemsBefore.length];
    		int count = 0;
    		for (int index = 0; index < itemsBefore.length; index++) {
    			Item item = getOffer(player).getItems()[index];
    			if (itemsBefore[index] != item)
    				changedSlots[count++] = index;
    		}
    		int finalChangedSlots[] = new int[count];
    		System.arraycopy(changedSlots, 0, finalChangedSlots, 0, count);
    		refreshScreen();
    	}
    
    	/**
    	 * Refreshes screen
    	 */
    	private void refreshScreen() {
    		trader.getPackets().sendItems(90, false, traderItemsOffered);
    		trader.getPackets().sendItems(90, true, partnerItemsOffered);
    		partner.getPackets().sendItems(90, false, partnerItemsOffered);
    		partner.getPackets().sendItems(90, true, traderItemsOffered);
    		String name = trader.getUsername();
    		partner.getPackets().sendIComponentText(335, 22,
    				Misc.formatPlayerNameForDisplay(name));
    		String name1 = partner.getUsername();
    		trader.getPackets().sendIComponentText(335, 22,
    				Misc.formatPlayerNameForDisplay(name1));
    		trader.getPackets().sendIComponentText(
    				335,
    				21,
    				" has " + partner.getInventory().getFreeSlots()
    						+ " free inventory slots.");
    		partner.getPackets().sendIComponentText(
    				335,
    				21,
    				" has " + trader.getInventory().getFreeSlots()
    						+ " free inventory slots.");
    		trader.getPackets().sendGlobalConfig(729, getTradersItemsValue());
    		trader.getPackets().sendGlobalConfig(697, getPartnersItemsValue());
    		partner.getPackets().sendGlobalConfig(729, getPartnersItemsValue());
    		partner.getPackets().sendGlobalConfig(697, getTradersItemsValue());
    	}
    
    	/**
    	 * Gets trade value
    	 * 
    	 *   @Return returns initial price
    	 */
    	private int getTradersItemsValue() {
    		int initialPrice = 0;
    		for (Item item : traderItemsOffered.toArray()) {
    			if (item != null) {
    				initialPrice += item.getDefinitions().getValue()
    						* item.getAmount();
    			}
    		}
    		return initialPrice;
    	}
    
    	/**
    	 * gets Value of partner
    	 * 
    	 *   @Return regular price
    	 */
    	private int getPartnersItemsValue() {
    		int initialPrice = 0;
    		for (Item item : partnerItemsOffered.toArray()) {
    			if (item != null) {
    				initialPrice += item.getDefinitions().getValue()
    						* item.getAmount();
    			}
    		}
    		return initialPrice;
    	}
    
    	/**
    	 * Sets accepted pressed.
    	 * 
    	 *   @Param pl
    	 */
    	public void acceptPressed(Player pl) {
    		if (!traderDidAccept && pl.equals(trader)) {
    			traderDidAccept = true;
    		} else if (!partnerDidAccept && pl.equals(partner)) {
    			partnerDidAccept = true;
    		}
    		switch (currentState) {
    		case STATE_ONE:
    			if (pl.equals(trader)) {
    				if (partnerDidAccept && traderDidAccept) {
    					if (!trader.getInventory().getItems()
    							.hasSpaceFor(partnerItemsOffered)) {
    						partner.getPackets()
    								.sendGameMessage(
    										"Other player does not have enough space in their inventory.");
    						trader.getPackets()
    								.sendGameMessage(
    										"You do not have enough space in your inventory.");
    						tradeFailed();
    						return;
    					} else if (!partner.getInventory().getItems()
    							.hasSpaceFor(traderItemsOffered)) {
    						trader.getPackets()
    								.sendGameMessage(
    										"Other player does not have enough space in their inventory.");
    						partner.getPackets()
    								.sendGameMessage(
    										"You do not have enough space in your inventory.");
    						tradeFailed();
    						return;
    					}
    					openSecondTradeScreen(trader);
    					openSecondTradeScreen(partner);
    				} else {
    					trader.getPackets().sendIComponentText(335, 37,
    							"Waiting for other player...");
    					partner.getPackets().sendIComponentText(335, 37,
    							"Other player has accepted");
    				}
    			} else if (pl.equals(partner)) {
    				if (partnerDidAccept && traderDidAccept) {
    					if (!trader.getInventory().getItems()
    							.hasSpaceFor(partnerItemsOffered)) {
    						partner.getPackets()
    								.sendGameMessage(
    										"Other player does not have enough space in their inventory.");
    						trader.getPackets()
    								.sendGameMessage(
    										"You do not have enough space in your inventory.");
    						tradeFailed();
    						return;
    					} else if (!partner.getInventory().getItems()
    							.hasSpaceFor(traderItemsOffered)) {
    						trader.getPackets()
    								.sendGameMessage(
    										"Other player does not have enough space in their inventory.");
    						partner.getPackets()
    								.sendGameMessage(
    										"You do not have enough space in your inventory.");
    						tradeFailed();
    						return;
    					}
    					openSecondTradeScreen(trader);
    					openSecondTradeScreen(partner);
    				} else {
    					partner.getPackets().sendIComponentText(335, 37,
    							"Waiting for other player...");
    					trader.getPackets().sendIComponentText(335, 37,
    							"Other player has accepted");
    				}
    			}
    			break;
    
    		case STATE_TWO:
    			if (pl.equals(trader)) {
    				if (partnerDidAccept && traderDidAccept) {
    					giveItems();
    				} else {
    					trader.getPackets().sendIComponentText(334, 34,
    							"Waiting for other player...");
    					partner.getPackets().sendIComponentText(334, 34,
    							"Other player has accepted");
    				}
    			} else if (pl.equals(partner)) {
    				if (partnerDidAccept && traderDidAccept) {
    					giveItems();
    				} else {
    					partner.getPackets().sendIComponentText(334, 34,
    							"Waiting for other player...");
    					trader.getPackets().sendIComponentText(334, 34,
    							"Other player has accepted");
    				}
    			}
    			break;
    		}
    
    	}
    
    	/**
    	 * Ends Session of trade
    	 */
    	public void endSession() {
    	trader.setFreezeDelay(999999999);
    	partner.setFreezeDelay(999999999);
    		trader.getInterfaceManager().closeScreenInterface();
    		trader.getInterfaceManager().closeInventoryInterface();
    		partner.getInterfaceManager().closeScreenInterface();
    		partner.getInterfaceManager().closeInventoryInterface();
    		traderItemsOffered = null;
    		partnerItemsOffered = null;
    		trader.setCloseInterfacesEvent(null);
    		partner.setCloseInterfacesEvent(null);
    		trader.setTrade(null);
    		partner.setTrade(null);
    		trader.getInventory().refresh();
    		partner.getInventory().refresh();
    
    	}
    
    	/**
    	 * WHat happens when tradeFailed
    	 */
    	public void tradeFailed() {
    		trader.getInventory().getItems().addAll(traderItemsOffered);
    		partner.getInventory().getItems().addAll(partnerItemsOffered);
    		partner.getPackets().sendGameMessage("<col=FFF0000>Other player declined trade!</col>");
    		traderItemsOffered = null;
    		partnerItemsOffered = null;
    		trader.setCloseInterfacesEvent(null);
    		partner.setCloseInterfacesEvent(null);
    		trader.getInterfaceManager().closeInventoryInterface();
    		partner.getInterfaceManager().closeInventoryInterface();
    		trader.setTrade(null);
    		partner.setTrade(null);
    		endSession();
    		trader.getInventory().refresh(trader.getInventory().getItems());
    		partner.getInventory().refresh(partner.getInventory().getItems());
    	}
    
    	/**
    	 * Gives items to partner / other
    	 */
    	private void giveItems() {
    		try {
    			if (!trader.getInventory().getItems()
    					.hasSpaceFor(partnerItemsOffered)) {
    				partner.getPackets()
    						.sendGameMessage(
    								"Other player does not have enough space in their inventory.");
    				trader.getPackets().sendGameMessage(
    						"You do not have enough space in your inventory.");
    				tradeFailed();
    				return;
    			} else if (!partner.getInventory().getItems()
    					.hasSpaceFor(traderItemsOffered)) {
    				trader.getPackets()
    						.sendGameMessage(
    								"Other player does not have enough space in their inventory.");
    				partner.getPackets().sendGameMessage(
    						"You do not have enough space in your inventory.");
    				tradeFailed();
    				return;
    			}
    			for (Item itemAtIndex : traderItemsOffered.toArray()) {
    				if (itemAtIndex != null) {
    					partner.getInventory().addItem(itemAtIndex.getId(),
    							itemAtIndex.getAmount());
    				}
    			}
    			for (Item itemAtIndex : partnerItemsOffered.toArray()) {
    				if (itemAtIndex != null) {
    					trader.getInventory().addItem(itemAtIndex.getId(),
    							itemAtIndex.getAmount());
    				}
    			}
    			endSession();
    			partner.getInventory().refresh();
                partner.getPackets().sendGameMessage("Accepted trade.");
    			trader.getInventory().refresh();
    			trader.getPackets().sendGameMessage("Accepted trade.");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * gets items offered
    	 * 
    	 *   @Param p
    	 *   @Return
    	 */
    	public ItemsContainer<Item> getPlayerItemsOffered(Player p) {
    		return (p.equals(trader) ? traderItemsOffered : partnerItemsOffered);
    	}
    
    	public enum TradeState {
    		STATE_ONE, STATE_TWO
    	}
    
    	/**
    	 * resets the accept trade.
    	 */
    	public void resetAccept() {
    		partnerDidAccept = traderDidAccept = false;
    		switch (currentState) {
    		case STATE_ONE:
    			partner.getPackets().sendIComponentText(335, 37, "");
    			trader.getPackets().sendIComponentText(335, 37, "");
    			break;
    		case STATE_TWO:
    			partner.getPackets().sendIComponentText(334, 34, "");
    			trader.getPackets().sendIComponentText(334, 34, "");
    			break;
    		}
    	}
    
    	/**
    	 * Gets the state of trade
    	 * 
    	 *   @Return state
    	 */
    	public TradeState getState() {// Where? Just havent implemented, I got
    									// everything needed tho XD Nice :P Fuck, I
    									// really dont feel like adding more then 3
    									// pets -____-
    		return currentState;
    	}
    }

    Can someone point me in the right direction?
    For the 1st issue, I really doubt it's a cache issue. You're probably sending the wrong packets for the bank tabs. Only 1 .dat2 file is used for the cache. Any duplicate .dat2 or .dat3 files are just never used by the cache lib.
    For the 2nd issue, your method is not verifying overflow correctly. You need to fix this method:

    Code:
    trader.getInventory().getItems().hasSpaceFor
    Project thread
    Reply With Quote  
     

  3. Thankful user:


  4. #3  
    Registered Member Zirnek's Avatar
    Join Date
    May 2016
    Posts
    34
    Thanks given
    4
    Thanks received
    1
    Rep Power
    11
    Quote Originally Posted by clem585 View Post
    For the 1st issue, I really doubt it's a cache issue. You're probably sending the wrong packets for the bank tabs. Only 1 .dat2 file is used for the cache. Any duplicate .dat2 or .dat3 files are just never used by the cache lib.
    For the 2nd issue, your method is not verifying overflow correctly. You need to fix this method:

    Code:
    trader.getInventory().getItems().hasSpaceFor
    When I change the Cache for my server, the tab starts working just as it should, so I can only logically conclude it's Cache sided issue.
    However I can't use the other, for it creates more problems than solves.
    Reply With Quote  
     

  5. #4  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    Quote Originally Posted by Zirnek View Post
    When I change the Cache for my server, the tab starts working just as it should, so I can only logically conclude it's Cache sided issue.
    However I can't use the other, for it creates more problems than solves.
    Try to modify the component IDs that you use to update the bank interface. Between revisions they will sometimes add components at random indexes (e.g. #15 out of 100, so component #15-99 get shifted to #16-100). That could be why it works with a different cache, but not your main one.

    There's a chance it could be cache corruption if someone who didn't know what they were doing did some bad manipulations. You'd have to repack the data from the cache with the working bank interface (interface components are stored in index 3, CS scripts are stored in index 17).
    Project thread
    Reply With Quote  
     

  6. #5  
    Registered Member Zirnek's Avatar
    Join Date
    May 2016
    Posts
    34
    Thanks given
    4
    Thanks received
    1
    Rep Power
    11
    Quote Originally Posted by clem585 View Post
    Try to modify the component IDs that you use to update the bank interface. Between revisions they will sometimes add components at random indexes (e.g. #15 out of 100, so component #15-99 get shifted to #16-100). That could be why it works with a different cache, but not your main one.

    There's a chance it could be cache corruption if someone who didn't know what they were doing did some bad manipulations. You'd have to repack the data from the cache with the working bank interface (interface components are stored in index 3, CS scripts are stored in index 17).
    I'd like to, but I don't know how to unpack the idx files, I hate to bother you to go back and forth on the same issue, but thanks for the much help anyway.
    Reply With Quote  
     

  7. #6  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    Quote Originally Posted by Zirnek View Post
    I'd like to, but I don't know how to unpack the idx files, I hate to bother you to go back and forth on the same issue, but thanks for the much help anyway.
    Have you tried the 1st solution though? It's most likely what's causing the issue and you just have to change the IDs it uses in Bank.java
    Project thread
    Reply With Quote  
     

  8. #7  
    Registered Member Zirnek's Avatar
    Join Date
    May 2016
    Posts
    34
    Thanks given
    4
    Thanks received
    1
    Rep Power
    11
    Quote Originally Posted by clem585 View Post
    Have you tried the 1st solution though? It's most likely what's causing the issue and you just have to change the IDs it uses in Bank.java
    I've tried messing around with the values, but haven't made it work yet, sort of hard to know what I'm suppost to change when I didn't write the code and am not familiar with what really does what, and replacing the idx3 file with the one from Cache that works didn't solve that. mhm
    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. Chat and Trade logs
    By Saragodbro in forum Requests
    Replies: 8
    Last Post: 04-23-2009, 04:07 PM
  2. [474] Cache Downloader - Downloads cache and maps
    By ZachHaley in forum Downloads
    Replies: 2
    Last Post: 01-11-2009, 10:48 AM
  3. Replies: 2
    Last Post: 11-28-2008, 07:20 AM
  4. ModelLoaderV2 (now saves to cache and is faster)
    By Clienthax in forum Tutorials
    Replies: 94
    Last Post: 07-04-2008, 06:40 AM
  5. [REQ]480 Cache and...
    By Elid in forum Tutorials
    Replies: 3
    Last Post: 03-01-2008, 05:25 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
  •