Thread: [377-Current] Ale Brewing

Results 1 to 2 of 2
  1. #1 [377-Current] Ale Brewing 
    Christ is King

    Makar's Avatar
    Join Date
    Jul 2011
    Age
    29
    Posts
    2,004
    Thanks given
    545
    Thanks received
    965
    Rep Power
    427
    Never seen full ale brewing before so here's mine. It's as accurate to real RS as information provides regarding spoiling and maturing rates and setting success rates.

    Brewable

    Code:
    package com.rs.game.player.content.skills.cooking;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public enum Brewable {
    	KELDA_STOUT(new int[] { 6118, 6118 }, null, 17, 6113, 1, 1),
    	DWARVEN_STOUT(new int[] { 1913, 5747 }, new int[] { 5777, 5857 }, 19, 5994, 4, 215), 
    	ASGARNIAN_ALE(new int[] { 1905, 5739 }, new int[] { 5785, 5865 }, 24, 5996, 4, 248), 
    	GREENMANS_ALE(new int[] { 1909, 5743 }, new int[] { 5793, 5873 }, 29, 255, 4, 281), 
    	WIZARD_MIND_BOMB(new int[] { 1907, 5741 }, new int[] { 5801, 5881 }, 34, 5998, 4, 314), 
    	DRAGON_BITTER(new int[] { 1911, 5745 }, new int[] { 5809, 5889 }, 39, 6000, 4, 347), 
    	MOONLIGHT_MEAD(new int[] { 5763, 5749 }, new int[] { 5817, 5897 }, 44, 6004, 4, 380), 
    	AXEMANS_FOLLY(new int[] { 5751, 5753 }, new int[] { 5825, 5905 }, 49, 6043, 1, 413), 
    	CHEFS_DELIGHT(new int[] { 5755, 5757 }, new int[] { 5833, 5913 }, 54, 1975, 4, 446), 
    	SLAYERS_RESPITE(new int[] { 5759, 5761 }, new int[] { 5841, 5921 }, 59, 6002, 4, 479),
    	CIDER(new int[] { 5763, 5765 }, new int[] { 5849, 5929 }, 14, 5992, 4, 182);
    
    	private int[] beerGlassId;
    	private int[] calquatId;
    	private int levelRequirement;
    	private int ingredient;
    	private int ingredientAmount;
    	private int xp;
    
    	private static Map<Integer, Brewable> MAP = new HashMap<Integer, Brewable>();
    
    	public static Brewable forId(int itemId) {
    		return MAP.get(itemId);
    	}
    
    	static {
    		for (final Brewable brewable : Brewable.values()) {
    			MAP.put(brewable.ingredient, brewable);
    		}
    	}
    
    	private Brewable(int[] beerGlassId, int[] calquatId, int levelRequirement, int ingredient, int ingredientAmount, int xp) {
    		this.beerGlassId = beerGlassId;
    		this.calquatId = calquatId;
    		this.levelRequirement = levelRequirement;
    		this.ingredient = ingredient;
    		this.ingredientAmount = ingredientAmount;
    		this.xp = xp;
    	}
    
    	public int getLevelRequirement() {
    		return levelRequirement;
    	}
    
    	public int getBeerGlassId(boolean mature) {
    		return beerGlassId[mature ? 1 : 0];
    	}
    	
    	public int getCalquatId(boolean mature) {
    		return calquatId[mature ? 1 : 0];
    	}
    
    	public int getIngredient() {
    		return ingredient;
    	}
    
    	public int getIngredientAmount() {
    		return ingredientAmount;
    	}
    
    	public int getXp() {
    		return xp;
    	}
    	
    	public int getVatVal(int stage) {
    		if (this == KELDA_STOUT)
    			return 68 + stage;
    		return (ordinal() * 6) + 4 + stage;
    	}
    	
    	public int getBarrelVal(boolean mature) {
    		if (this == KELDA_STOUT)
    			return 3;
    		return (ordinal() * 8) + (mature ? 128 : 0);
    	}
    }
    Brewery

    Code:
    package com.rs.game.player.content.skills.cooking;
    
    import com.rs.game.Animation;
    import com.rs.game.player.Player;
    import com.rs.game.player.Skills;
    import com.rs.plugin.PluginEventHandler;
    import com.rs.plugin.events.ItemOnObjectEvent;
    import com.rs.plugin.events.LoginEvent;
    import com.rs.plugin.events.ObjectClickEvent;
    import com.rs.plugin.methods.ItemOnObjectHandler;
    import com.rs.plugin.methods.ObjectClickHandler;
    import com.rs.utils.Utils;
    
    @PluginEventHandler
    public class Brewery {
    	
    	private static final int BUCKET_OF_WATER = 1929;
    	private static final int BARLEY_MALT = 6008;
    	private static final int ALE_YEAST = 5767;
    	private static final int EMPTY_BUCKET = 1925;
    	private static final int THE_STUFF = 8988;
    	private static final int BEER_GLASS = 1919;
    	private static final int CALQUAT_KEG = 5769;
    	
    	private static final Animation ADD_INGREDIENT = new Animation(2292);
    	private static final Animation POUR_WATER = new Animation(2283);
    	private static final Animation CALQUAT_LEVEL = new Animation(2284);
    	private static final Animation BEER_GLASS_LEVEL = new Animation(2285);
    	
    	private static final long BREWING_CONSTANT = 12 * 60 * 60 * 1000; //12 hours
    	
    	private Brewable brew;
    	private int prep;
    	private int fermentStage;
    	private long lastTime;
    	private boolean barrelled;
    	private boolean theStuff;
    	private boolean spoiled;
    	private boolean mature;
    	private boolean keldagrim;
    	private transient Player player;
    	
    	public Brewery(boolean keldagrim) {
    		this.keldagrim = keldagrim;
    	}
    	
    	public void setPlayer(Player player) {
    		this.player = player;
    	}
    	
    	public static boolean onLogin(LoginEvent e) {
    		e.getPlayer().getKeldagrimBrewery().updateVars();
    		e.getPlayer().getPhasmatysBrewery().updateVars();
    		return false;
    	}
    	
    	@ObjectClickHandler(ids = { 7442, 7443 })
    	public static void handleValve(ObjectClickEvent e) {
    		Brewery brewery = e.getObjectId() == 7442 ? e.getPlayer().getKeldagrimBrewery() : e.getPlayer().getPhasmatysBrewery();
    		brewery.turnValve();
    	}
    	
    	@ObjectClickHandler(ids = { 7431, 7432 })
    	public static void handleBarrels(ObjectClickEvent e) {
    		Brewery brewery = e.getObjectId() == 7431 ? e.getPlayer().getKeldagrimBrewery() : e.getPlayer().getPhasmatysBrewery();
    		switch(e.getOption()) {
    		case "Drain":
    			brewery.reset();
    			e.getPlayer().sendMessage("You drain the spoiled drink from the vat.");
    			break;
    		case "Level":
    			brewery.level();
    			break;
    		}
    	}
    	
    	@ItemOnObjectHandler(ids = { 7494, 7495 })
    	public static void handleVats(ItemOnObjectEvent e) {
    		Brewery brewery = e.getObjectId() == 7494 ? e.getPlayer().getKeldagrimBrewery() : e.getPlayer().getPhasmatysBrewery();
    		switch(e.getItem().getId()) {
    		case BUCKET_OF_WATER:
    			brewery.addWater();
    			break;
    		case BARLEY_MALT:
    			brewery.addMalt();
    			break;
    		case ALE_YEAST:
    			brewery.addYeast();
    			break;
    		case THE_STUFF:
    			brewery.addTheStuff();
    			break;
    		default:
    			brewery.addSecondary(e.getItem().getId());
    			break;
    		}
    		brewery.updateVars();
    	}
    	
    	public void ferment() {
    		if (isFinished())
    			return;
    		if (Utils.random(80 + player.getSkills().getLevel(Skills.COOKING)) == 0)
    			spoiled = true;
    		if (Utils.random(5) == 0)
    			fermentStage = Utils.clampI(fermentStage+1, 0, 4);
    		if (Utils.random(200) == 0)
    			fermentStage = 4;
    	}
    	
    	public void process() {
    		if (lastTime <= 0)
    			return;
    		long currTime = System.currentTimeMillis();
    		long timePassed = currTime - lastTime;
    		if (timePassed > BREWING_CONSTANT) {
    			int cycles = (int) (timePassed / BREWING_CONSTANT);
    			for (int i = 0;i < cycles;i++)
    				ferment();
    			lastTime = currTime - (timePassed % (cycles * BREWING_CONSTANT));
    		}
    		updateVars();
    	}
    	
    	public void addWater() {
    		if (prep != 0)
    			return;
    		if (player.getInventory().containsItem(BUCKET_OF_WATER, 2)) {
    			player.setNextAnimation(POUR_WATER);
    			player.getInventory().deleteItem(BUCKET_OF_WATER, 2);
    			player.getInventory().addItem(EMPTY_BUCKET, 2);
    			prep = 1;
    		} else {
    			player.sendMessage("You need 2 buckets of water to add to the brew.");
    		}
    	}
    	
    	public void addMalt() {
    		if (prep != 1) {
    			player.sendMessage("Add water first, then malt, then ale yeast.");
    			return;
    		}
    		if (player.getInventory().containsItem(BARLEY_MALT, 2)) {
    			player.setNextAnimation(ADD_INGREDIENT);
    			player.getInventory().deleteItem(BARLEY_MALT, 2);
    			prep = 2;
    		} else {
    			player.sendMessage("You need two barley malts to add to the brew.");
    		}
    	}
    	
    	public void addSecondary(int itemId) {
    		Brewable brew = Brewable.forId(itemId);
    		if (brew != null) {
    			if (player.getSkills().getLevel(Skills.COOKING) < brew.getLevelRequirement()) {
    				player.sendMessage("You need a cooking level of " + brew.getLevelRequirement() + " to create that brew.");
    				return;
    			}
    			if (prep == 2) {
    				if (player.getInventory().containsItem(brew.getIngredient(), brew.getIngredientAmount())) {
    					player.getInventory().deleteItem(brew.getIngredient(), brew.getIngredientAmount());
    					player.setNextAnimation(ADD_INGREDIENT);
    					this.brew = brew;
    				} else {
    					player.sendMessage("You need " + brew.getIngredientAmount() + " to create that brew.");
    				}
    			} else {
    				player.sendMessage("You need to have added water and barley malt before adding the ale's ingredients.");
    			}
    		} else {
    			player.sendMessage("Nothing interesting happens.");
    		}
    	}
    	
    	public void addYeast() {
    		if (prep != 2 || brew == null || !player.getInventory().containsItem(ALE_YEAST, 1)) {
    			player.sendMessage("The brew isn't ready for the yeast yet.");
    			return;
    		}
    		if (lastTime >= 1) {
    			player.sendMessage("The brew is already fermenting.");
    			return;
    		}
    		player.setNextAnimation(ADD_INGREDIENT);
    		player.getInventory().deleteItem(ALE_YEAST, 1);
    		lastTime = System.currentTimeMillis();
    		player.sendMessage("The brew begins to ferment.");
    	}
    	
    	public void addTheStuff() {
    		if (prep != 2 || !player.getInventory().containsItem(THE_STUFF, 1)) {
    			player.sendMessage("Add water first, then malt, and the ale's ingredients before adding \"the stuff\".");
    			return;
    		}
    		if (theStuff) {
    			player.sendMessage("You've already added \"the stuff\" to this batch.");
    			return;
    		}
    		player.setNextAnimation(ADD_INGREDIENT);
    		player.getInventory().deleteItem(THE_STUFF, 1);
    		theStuff = true;
    	}
    	
    	public void turnValve() {
    		if (isFinished() && !barrelled) {
    			barrelled = true;
    			if (Utils.random(100) <= (theStuff ? 75 : 10))
    				mature = true;
    			updateVars();
    		} else {
    			player.sendMessage("The brew isn't done fermenting yet.");
    		}
    	}
    	
    	public void level() {
    		if (brew == Brewable.KELDA_STOUT) {
    			if (player.getInventory().containsItem(BEER_GLASS, 1)) {
    				player.getInventory().deleteItem(BEER_GLASS, 1);
    				player.getInventory().addItem(brew.getBeerGlassId(mature), 1);
    				player.setNextAnimation(BEER_GLASS_LEVEL);
    				reset();
    			} else {
    				player.sendMessage("You need a beer glass to empty the stout into.");
    			}
    			return;
    		}
    		int container = -1;
    		if (player.getInventory().containsItem(BEER_GLASS, 8))
    			container = BEER_GLASS;
    		if (player.getInventory().containsItem(CALQUAT_KEG, 2))
    			container = CALQUAT_KEG;
    		if (container == -1) {
    			player.sendMessage("You need 8 beer glasses or 2 calquat kegs to empty this vat.");
    			return;
    		}
    		player.incrementCount(brew.name() + " brewed");
    		if (mature)
    			player.incrementCount("Mature " + brew.name() + " brewed");
    		player.getInventory().deleteItem(container, container == BEER_GLASS ? 8 : 2);
    		player.getInventory().addItem(container == BEER_GLASS ? brew.getBeerGlassId(mature) : brew.getCalquatId(mature), container == BEER_GLASS ? 8 : 2);
    		player.getSkills().addXp(Skills.COOKING, brew.getXp()*8);
    		player.setNextAnimation(container == BEER_GLASS ? BEER_GLASS_LEVEL : CALQUAT_LEVEL);
    		reset();
    	}
    	
    	public void reset() {
    		this.brew = null;
    		this.prep = 0;
    		this.theStuff = false;
    		this.spoiled = false;
    		this.mature = false;
    		this.barrelled = false;
    		this.fermentStage = 0;
    		this.lastTime = -1;
    		updateVars();
    	}
    	
    	public boolean isFinished() {
    		return brew != null && (spoiled || fermentStage >= 4 || (brew == Brewable.KELDA_STOUT && fermentStage >= 3));
    	}
    	
    	public void updateVars() {
    		if (brew == null) {
    			setBarrel(0);
    			setVat(Utils.clampI(prep, 0, 2));
    			return;
    		}
    		if (isFinished()) {
    			if (spoiled) {
    				setBarrel(barrelled ? 1 : 0);
    				setVat(barrelled ? 0 : 64);
    			} else {
    				setVat(barrelled ? 0 : brew.getVatVal(fermentStage));
    				setBarrel(barrelled ? brew.getBarrelVal(mature) : 0);
    			}
    		} else {
    			setVat(brew.getVatVal(fermentStage));
    		}
    	}
    	
    	private void setVat(int value) {
    		player.getVars().setVarBit(keldagrim ? 736 : 737, value);
    	}
    	
    	private void setBarrel(int value) {
    		player.getVars().setVarBit(keldagrim ? 738 : 739, value);
    	}
    }
    in Player class
    Code:
    private Brewery keldagrimBrewery;
    private Brewery phasmatysBrewery;
    
    public Brewery getKeldagrimBrewery() {
    	if (keldagrimBrewery == null)
    		keldagrimBrewery = new Brewery(true);
    	keldagrimBrewery.setPlayer(this);
    	return keldagrimBrewery;
    }
    
    public Brewery getPhasmatysBrewery() {
    	if (phasmatysBrewery == null)
    		phasmatysBrewery = new Brewery(false);
    	phasmatysBrewery.setPlayer(this);
    	return phasmatysBrewery;
    }
    Last edited by Makar; 10-07-2019 at 06:52 PM.
    Attached image
    The best open-source pre-eoc remake project that isn't in its early stages for once
    Darkan Client (727 Client Refactor)
    Darkan World Server
    “It would not be impossible to prove with sufficient repetition and a psychological understanding of the people concerned that a square is in fact a circle. They are mere words, and words can be molded until they clothe ideas and disguise.”
    Reply With Quote  
     

  2. Thankful user:


  3. #2  
    ;D
    biggyBeat's Avatar
    Join Date
    Jan 2018
    Posts
    113
    Thanks given
    205
    Thanks received
    15
    Rep Power
    30
    Thank you!
    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. [377] Need a good 377 starting base
    By Lil Peep in forum Requests
    Replies: 0
    Last Post: 06-11-2018, 11:51 AM
  2. Replies: 108
    Last Post: 03-20-2009, 08:03 PM
  3. Deob 377 Download
    By Llama in forum Downloads
    Replies: 32
    Last Post: 12-01-2008, 09:46 AM
  4. My Current Client
    By Eleclion in forum RS2 Client
    Replies: 2
    Last Post: 06-02-2007, 09:05 AM
  5. 377 client :D
    By Llama in forum RS2 Client
    Replies: 15
    Last Post: 05-07-2007, 12:38 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
  •