Thread: How to make a grand exchange auto buy?

Results 1 to 7 of 7
  1. #1 How to make a grand exchange auto buy? 
    Extreme Donator

    Join Date
    Jul 2014
    Posts
    414
    Thanks given
    46
    Thanks received
    8
    Rep Power
    15
    Right now, my GE waits for someone to buy your items for you... Like in real RS.
    How do I make it auto sell and auto buy?

    This is my GrandExchange.java:

    Code:
    package com.rs.game.player.content.grandExchange;
    
    import com.rs.cache.loaders.ItemDefinitions;
    import com.rs.game.World;
    import com.rs.game.player.Player;
    import com.rs.utils.SerializableFilesManager;
    import com.rs.utils.Utils;
    
    import java.math.BigInteger;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    public class GrandExchange {
    
    	private static final Object LOCK = new Object();
    	// offer uid
    	private static HashMap<Long, Offer> OFFERS;
    	private static ArrayList<OfferHistory> OFFERS_TRACK;
    	private static HashMap<Integer, Integer> PRICES;
    
    	private static boolean edited;
    
    	public static void init() {
    		OFFERS = SerializableFilesManager.loadGEOffers();
    		OFFERS_TRACK = SerializableFilesManager.loadGEHistory();
    		PRICES = SerializableFilesManager.loadGEPrices();
    	}
    
    	public static void reset(boolean track, boolean price) {
    		if (track)
    			OFFERS_TRACK.clear();
    		if (price)
    			PRICES.clear();
    		recalcPrices();
    	}
    
    	public static void recalcPrices() {
    		ArrayList<OfferHistory> track = new ArrayList<OfferHistory>(
    				OFFERS_TRACK);
    		HashMap<Integer, BigInteger> averagePrice = new HashMap<Integer, BigInteger>();
    		HashMap<Integer, BigInteger> averageQuantity = new HashMap<Integer, BigInteger>();
    		for (OfferHistory o : track) {
    			BigInteger price = averagePrice.get(o.getId());
    			if (price != null) {
    				BigInteger quantity = averageQuantity.get(o.getId());
    				averagePrice.put(o.getId(),
    						price.add(BigInteger.valueOf(o.getPrice())));
    				averageQuantity.put(o.getId(),
    						quantity.add(BigInteger.valueOf(o.getQuantity())));
    			} else {
    				averagePrice.put(o.getId(), BigInteger.valueOf(o.getPrice()));
    				averageQuantity.put(o.getId(),
    						BigInteger.valueOf(o.getQuantity()));
    			}
    		}
    
    		for (int id : averagePrice.keySet()) {
    			BigInteger price = averagePrice.get(id);
    			BigInteger quantity = averageQuantity.get(id);
    
    			long oldPrice = getPrice(id);
    			long newPrice = price.divide(quantity).longValue();
    			long min = (long) (oldPrice * 0.8D) - 100;
    			long max = (long) (oldPrice * 1.2D) + 100;
    			if (newPrice < min)
    				newPrice = min;
    			else if (newPrice > max)
    				newPrice = max;
    
    			if (newPrice < 1)
    				newPrice = 1;
    			else if (newPrice > Integer.MAX_VALUE)
    				newPrice = Integer.MAX_VALUE;
    
    			PRICES.put(id, (int) newPrice);
    		}
    		savePrices();
    	}
    
    	private static void savePrices() {
    		SerializableFilesManager.saveGEPrices(PRICES);
    	}
    
    	public static final void save() {
    		if (!edited)
    			return;
    		SerializableFilesManager.saveGEOffers(OFFERS);
    		SerializableFilesManager.saveGEHistory(OFFERS_TRACK);
    		edited = false;
    	}
    
    	public static void linkOffers(Player player) {
    		boolean itemsWaiting = false;
    		for (int slot = 0; slot < player.getGeManager().getOfferUIds().length; slot++) {
    			Offer offer = getOffer(player, slot);
    			if (offer == null)
    				continue;
    			offer.link(slot, player);
    			offer.update();
    			if (!itemsWaiting && offer.hasItemsWaiting()) {
    				itemsWaiting = true;
    				player.getPackets()
    						.sendGameMessage(
    								"You have items from the Grand Exchange waiting in your collection box.");
    			}
    		}
    	}
    
    	public static Offer getOffer(Player player, int slot) {
    		synchronized (LOCK) {
    			long uid = player.getGeManager().getOfferUIds()[slot];
    			if (uid == 0)
    				return null;
    			Offer offer = OFFERS.get(uid);
    			if (offer == null) {
    				player.getGeManager().getOfferUIds()[slot] = 0; // offer
    				// disapeared
    				// within time
    				return null;
    			}
    			return offer;
    		}
    
    	}
    
    	public static void sendOffer(Player player, int slot, int itemId,
    			int amount, int price, boolean buy) {
    		synchronized (LOCK) {
    			Offer offer = new Offer(itemId, amount, price, buy);
    			player.getGeManager().getOfferUIds()[slot] = createOffer(offer);
    			offer.link(slot, player);
    			World.sendWorldMessage("<col=750c41>[Grand Exchange]</col> <col=2266aa>"+player.getDisplayName()+"</col>:<col=750c41> has made an offer to "+(buy ? "Buy" : "Sell")+" "+amount+" X"+" "+ItemDefinitions.getItemDefinitions(itemId).getName()+" for "+Utils.getFormattedNumber(price)+" each.");
    			findBuyerSeller(offer);
    		}
    	}
    
    	public static void abortOffer(Player player, int slot) {
    		synchronized (LOCK) {
    			Offer offer = getOffer(player, slot);
    			if (offer == null)
    				return;
    			edited = true;
    			if (offer.cancel() && offer.forceRemove())
    				deleteOffer(player, slot); // shouldnt here happen anyway
    		}
    	}
    
    	public static void collectItems(Player player, int slot, int invSlot,
    			int option) {
    		synchronized (LOCK) {
    			Offer offer = getOffer(player, slot);
    			if (offer == null)
    				return;
    			edited = true;
    			if (offer.collectItems(invSlot, option) && offer.forceRemove()) {
    				deleteOffer(player, slot); // should happen after none left and
    				// offer completed
    				if (offer.getTotalAmmountSoFar() != 0) {
    					OfferHistory o = new OfferHistory(offer.getId(),
    							offer.getTotalAmmountSoFar(),
    							offer.getTotalPriceSoFar(), offer.isBuying());
    					OFFERS_TRACK.add(o);
    					player.getGeManager().addOfferHistory(o);
    				}
    			}
    		}
    	}
    
    	private static void deleteOffer(Player player, int slot) {
    		player.getGeManager().cancelOffer(); // sends back to original screen if
    		// seeing an offer
    		OFFERS.remove(player.getGeManager().getOfferUIds()[slot]);
    		player.getGeManager().getOfferUIds()[slot] = 0;
    	}
    
    	private static void findBuyerSeller(Offer offer) {
    		while (!offer.isCompleted()) {
    			Offer bestOffer = null;
    			for (Offer o : OFFERS.values()) {
    				if (o.isBuying() == offer.isBuying()
    						|| o.getId() != offer.getId()
    						|| o.isCompleted()
    						|| (offer.isBuying() && o.getPrice() > offer.getPrice())
    						|| (!offer.isBuying() && o.getPrice() < offer
    								.getPrice()) || offer.isOfferTooHigh(o))
    					continue;
    				if (bestOffer == null
    						|| (offer.isBuying() && o.getPrice() < bestOffer
    								.getPrice())
    						|| (!offer.isBuying() && o.getPrice() > bestOffer
    								.getPrice()))
    					bestOffer = o;
    			}
    			if (bestOffer == null)
    				break;
    			offer.updateOffer(bestOffer);
    		}
    		offer.update();
    	}
    
    	private static long createOffer(Offer offer) {
    		edited = true;
    		long uid = getUId();
    		OFFERS.put(uid, offer);
    		return uid;
    	}
    
    	private static long getUId() {
    		while (true) {
    			long uid = Utils.RANDOM.nextLong();
    			if (OFFERS.containsKey(uid))
    				continue;
    			return uid;
    		}
    	}
    
    	public static int getPrice(int itemId) {
    		ItemDefinitions defs = ItemDefinitions.getItemDefinitions(itemId);
    		if (defs.isNoted())
    			itemId = defs.getCertId();
    		else if (defs.isLended())
    			itemId = defs.getLendId();
    		Integer price = PRICES.get(itemId);
    		return price != null && price != 0 ? price : defs.getValue();
    	}
    
    	// in order not to keep player saved on memory in offers after player leaves
    	// <.<
    	public static void unlinkOffers(Player player) {
    		for (int slot = 0; slot < player.getGeManager().getOfferUIds().length; slot++) {
    			Offer offer = getOffer(player, slot);
    			if (offer == null)
    				continue;
    			offer.unlink();
    		}
    	}
    
    	public static List<OfferHistory> getHistory() {
    		return OFFERS_TRACK;
    	}
    }
     

  2. #2  
    Celestial - Founder
    Classic's Avatar
    Join Date
    Nov 2014
    Posts
    233
    Thanks given
    119
    Thanks received
    47
    Rep Power
    39
    Old news bud. Pretty sure this was released years ago.
     

  3. #3  
    Extreme Donator

    Join Date
    Jul 2014
    Posts
    414
    Thanks given
    46
    Thanks received
    8
    Rep Power
    15
    Quote Originally Posted by Limbo_ View Post
    Old news bud. Pretty sure this was released years ago.
    Uhm, I'm sorry?
    I'm confused.
    I'm asking for help. Not releasing something.
     

  4. #4  
    Hollow Realm

    Join Date
    Sep 2013
    Posts
    295
    Thanks given
    12
    Thanks received
    11
    Rep Power
    1
    Quote Originally Posted by Projecteco View Post
    Uhm, I'm sorry?
    I'm confused.
    I'm asking for help. Not releasing something.
    I'm pretty sure he is saying it was released on how to do this.

    I can't really give you any pointers but what you could try is when the findbuyerseller method is called, instead of having it find a seller, make it auto complete the offer. Could possibly even do it on the sendoffer method
     

  5. #5  
    Extreme Donator

    Join Date
    Jul 2014
    Posts
    414
    Thanks given
    46
    Thanks received
    8
    Rep Power
    15
    Quote Originally Posted by Naturality View Post
    I'm pretty sure he is saying it was released on how to do this.

    I can't really give you any pointers but what you could try is when the findbuyerseller method is called, instead of having it find a seller, make it auto complete the offer. Could possibly even do it on the sendoffer method
    Would you be willing to do this for me sir?
     

  6. #6  
    Banned

    Join Date
    Mar 2015
    Posts
    385
    Thanks given
    7
    Thanks received
    291
    Rep Power
    0
    Quote Originally Posted by Projecteco View Post
    Would you be willing to do this for me sir?
    lol...
     

  7. #7  
    Celestial - Founder
    Classic's Avatar
    Join Date
    Nov 2014
    Posts
    233
    Thanks given
    119
    Thanks received
    47
    Rep Power
    39
    Trial and error sir. That's only way you will learn how to program.
     


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: 14
    Last Post: 10-26-2011, 08:10 AM
  2. How to add the Grand Exchange[562]?
    By robincom in forum Help
    Replies: 2
    Last Post: 04-24-2010, 10:35 AM
  3. Replies: 30
    Last Post: 10-26-2009, 06:25 PM
  4. How to make an syipkpker auto ban
    By owner josh in forum Tutorials
    Replies: 5
    Last Post: 05-16-2009, 09:15 PM
  5. How to make buy 50
    By Warnerr in forum Help
    Replies: 3
    Last Post: 03-17-2009, 10:38 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
  •