From 319d8a5392b80bc5e428c070233decc9b8272e29 Mon Sep 17 00:00:00 2001 From: illumineawake Date: Sun, 15 Aug 2021 22:39:46 +1000 Subject: [PATCH] iutils: grand exchange instant buying now increments if unsuccessful --- iutils/iutils.gradle.kts | 2 +- .../plugins/iutils/ui/GrandExchange.java | 166 +++++++++++------- plugins.json | 2 +- .../{iutils-4.4.2.jar => iutils-4.4.3.jar} | Bin 1029473 -> 1030251 bytes 4 files changed, 105 insertions(+), 65 deletions(-) rename release/{iutils-4.4.2.jar => iutils-4.4.3.jar} (99%) diff --git a/iutils/iutils.gradle.kts b/iutils/iutils.gradle.kts index 53469b11..5a05f108 100644 --- a/iutils/iutils.gradle.kts +++ b/iutils/iutils.gradle.kts @@ -23,7 +23,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -version = "4.4.2" +version = "4.4.3" project.extra["PluginName"] = "iUtils" project.extra["PluginDescription"] = "Illumine - Utils required for plugins to function with added automation" diff --git a/iutils/src/main/java/net/runelite/client/plugins/iutils/ui/GrandExchange.java b/iutils/src/main/java/net/runelite/client/plugins/iutils/ui/GrandExchange.java index e4dfe11d..24decbb2 100644 --- a/iutils/src/main/java/net/runelite/client/plugins/iutils/ui/GrandExchange.java +++ b/iutils/src/main/java/net/runelite/client/plugins/iutils/ui/GrandExchange.java @@ -3,15 +3,20 @@ package net.runelite.client.plugins.iutils.ui; import lombok.extern.slf4j.Slf4j; import net.runelite.api.GrandExchangeOffer; import net.runelite.api.GrandExchangeOfferState; +import net.runelite.api.ItemID; +import net.runelite.client.plugins.iutils.CalculationUtils; import net.runelite.client.plugins.iutils.api.GrandExchangePrices; import net.runelite.client.plugins.iutils.game.Game; import net.runelite.client.plugins.iutils.game.ItemQuantity; +import net.runelite.client.plugins.iutils.walking.BankLocations; +import javax.inject.Inject; import java.util.List; // TODO: selling, several offers at once, custom prices, collect to inventory @Slf4j public class GrandExchange { + private final Game game; public GrandExchange(Game game) { @@ -43,14 +48,14 @@ public class GrandExchange { /** * Buys items from GE, if prices are over 8000GP it will progressively buy, otherwise attempts to buy instantly - * */ + */ public void buy(int item, int quantity) { if (GrandExchangePrices.get(item).high * quantity > 1000) { - if (!buyProgressively(item, quantity,1.2, 30, 20)) { + if (!buyProgressively(item, quantity, 1.2, 30, CalculationUtils.random(15, 25))) { throw new AssertionError("Failed to buy GE item progressively"); } - } else { - buyInstantly(item, quantity); + } else if (!buyInstantly(item, quantity)) { + throw new AssertionError("Failed to buy GE item progressively"); } } @@ -62,7 +67,7 @@ public class GrandExchange { /** * Buys list of items at GE with a high max price to buy quickly - * */ + */ public void buyInstantly(List items) { for (ItemQuantity item : items) { buyInstantly(item.id, item.quantity); @@ -71,71 +76,89 @@ public class GrandExchange { /** * Buys items at GE with a high max price to buy quickly - * */ - public void buyInstantly(int item, int quantity) { - if (!isOpen()) { - log.info("Opening Grand Exchange"); - game.npcs().withName("Grand Exchange Clerk").nearest().interact("Exchange"); - game.waitUntil(this::isOpen); - game.tick(2, 4); - } + */ + public boolean buyInstantly(int item, int quantity) { + var lastprice = -1; - if (game.inventory().withId(995).first() == null) { - throw new IllegalStateException("you'll need some coins to buy stuff"); - } - log.info("Buying: {} quantity: {}", item, quantity); - var slot = freeSlot(); + for (int attempts = 0; attempts < 30; attempts++) { + if (!isOpen()) { + log.info("Opening Grand Exchange"); + game.npcs().withName("Grand Exchange Clerk").nearest().interact("Exchange"); + game.waitUntil(this::isOpen); + game.tick(2, 4); + } - startBuyOffer(slot); + if (game.inventory().withId(995).first() == null) { + throw new IllegalStateException("you'll need some coins to buy stuff"); + } + log.info("Buying: {} quantity: {}", item, quantity); + var slot = freeSlot(); - game.chooseItem(item); - game.waitUntil(() -> currentBuyItem() == item); + startBuyOffer(slot); - if (quantity != currentQuantity()) { // todo: use +/- buttons - game.widget(465, 24, 7).interact(0); + game.chooseItem(item); + game.waitUntil(() -> currentBuyItem() == item); + + if (quantity != currentQuantity()) { + game.widget(465, 24, 7).interact(0); + game.tick(2, 4); + + game.chooseNumber(quantity); + game.tick(2, 4); + } + + var price = Math.min( + (int) Math.ceil((10 + (attempts * 5)) * currentPrice()), + game.inventory().withId(995).first().quantity() / quantity + ); + + if (price == lastprice) { + log.info("Price is same as last attempt to buy item: {}. Checking bank for more GP", item); + if (bank().quantity(ItemID.COINS_995) > 0) { + bank().withdraw(ItemID.COINS_995, Integer.MAX_VALUE, false); + continue; + } else { + log.info("Not enough coins to buy item: {} from GE", item); + return false; + } + } + + lastprice = price; + + if (price != currentPrice()) { + game.widget(465, 24, 12).interact(0); + game.tick(2, 4); + + game.chooseNumber(price); + game.tick(2, 4); + } + + game.tick(); + + game.widget(465, 27).interact(0); + + game.waitUntil(() -> game.grandExchangeOffer(slot) != null); game.tick(2, 4); - game.chooseNumber(quantity); - game.tick(2, 4); - } - - var price = Math.min( - (int) Math.ceil(10 * currentPrice()), - game.inventory().withId(995).first().quantity() / quantity - ); - - if (price != currentPrice()) { - game.widget(465, 24, 12).interact(0); - game.tick(2, 4); - - game.chooseNumber(price); - game.tick(2, 4); - } - - game.tick(); - - game.widget(465, 27).interact(0); - - game.waitUntil(() -> game.grandExchangeOffer(slot) != null); - game.tick(2, 4); - - var ticks = 0; - - while (game.grandExchangeOffer(slot).getQuantitySold() != quantity && ticks++ < 10) { - game.tick(1, 4); - } - - if (game.grandExchangeOffer(slot).getQuantitySold() == quantity) { - collectToBank(); - return; - } - - if (game.grandExchangeOffer(slot).getQuantitySold() != quantity) { - game.widget(465, 7, 2).interact(1); - game.tick(4); - collectToInv(); - throw new IllegalStateException("timed out waiting for offer to complete: " + game.grandExchangeOffer(slot).getQuantitySold() + " / " + quantity); + var ticks = 0; + + while (game.grandExchangeOffer(slot).getQuantitySold() != quantity && ticks++ < 10) { + game.tick(1, 4); + } + + if (game.grandExchangeOffer(slot).getQuantitySold() == quantity) { + collectToBank(); + return true; + } + + if (game.grandExchangeOffer(slot).getQuantitySold() != quantity) { + game.widget(465, 7, 2).interact(1); + game.tick(4); + collectToInv(); + log.info("timed out waiting for offer to complete: " + game.grandExchangeOffer(slot).getQuantitySold() + " / " + quantity); + } } + return false; } /** @@ -286,4 +309,21 @@ public class GrandExchange { BUY_OFFER_CREATION, SELL_OFFER_CREATION, } + + private Bank bank() { + var bank = new Bank(game); + + if (!bank.isOpen()) { + BankLocations.walkToBank(game); + if (game.npcs().withName("Banker").withAction("Bank").exists()) { + game.npcs().withName("Banker").withAction("Bank").nearest().interact("Bank"); + } else if (game.objects().withName("Bank booth").withAction("Bank").exists()) { + game.objects().withName("Bank booth").withAction("Bank").nearest().interact("Bank"); + } else { + game.objects().withName("Bank chest").nearest().interact("Use"); + } + game.waitUntil(bank::isOpen, 10); + } + return bank; + } } diff --git a/plugins.json b/plugins.json index b931492d..6ee437f2 100644 --- a/plugins.json +++ b/plugins.json @@ -1 +1 @@ -[{"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"BotUtils","description":"Illumine - Utils required for plugins to function with added automation","id":"botutils-plugin","releases":[{"date":"2021-08-13","sha512sum":"A71C4F1B739303A6B543B80D6F10826A780D86365A495F0FFD3D2EE8A49585C18ADEE0EE59DA4729FEA017055F6C8E52FB46944653DF75681D5354FA62464CF0","version":"5.1.0","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/botutils-5.1.0.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"Disable Rendering","description":"Illumine - Disable rendering to improve performance","id":"disablerendering-plugin","releases":[{"date":"2021-08-13","sha512sum":"22584C6A481F3A4CBE569BFC7DF053F05BE8A4B6793E173090773E3C6919DBEB5705A205DD27EEC1084BD51571935D3263AB7F6EA2E7B8EDA1A9F7EE45F4683C","version":"1.0.0","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/disablerendering-1.0.0.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iBlackjack","description":"Illumine - Blackjack plugin","id":"iblackjack-plugin","releases":[{"date":"2021-08-13","sha512sum":"DE7063171C8DEFD8E17471060111624172D18E05478574C1267E3D62F0D328E2A9520DF3471B6C0A1710D228B4FAC8CB867AE968987C40718FBA32EC47AC0105","version":"2.1.2","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iblackjack-2.1.2.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iCombination Runecrafter Plugin","description":"Illumine - Combination Runecrafting plugin","id":"icombinationrunecrafterplugin-plugin","releases":[{"date":"2021-08-13","sha512sum":"525470A8CDE1E77C038D16D46FFD32F1E793F9A4F1095FFF11FEE9F682D80B2016EE369C5B0298D33B8C8D2E2404416501AF11856C8739A9D0DE3CB917031FF4","version":"3.1.3","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/icombinationrunecrafter-3.1.3.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iHerbCleaner","description":"Illumine - Herb Cleaner","id":"iherbcleaner-plugin","releases":[{"date":"2021-08-13","sha512sum":"947E7C27746385BA8B2F84B3900DB483430C94ADB92C0E9A5DF1B608A2B7DB0CC1EBF083FFEFE71095CDB922A407D12ED9E96F2700A33BD23FDE546844EFCAB6","version":"2.1.2","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iherbcleaner-2.1.2.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iMagic Caster","description":"Illumine automated magic caster","id":"imagiccaster-plugin","releases":[{"date":"2021-08-13","sha512sum":"B201FE2A998CA6584150F551A06BF6F2624DCF88082255EADBF2413A2D24FBA1865E7BAA0DC0B72939E76AD76C7E7B44CFB23C1536E20B350500CB48A14A7DCD","version":"4.1.2","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/imagiccaster-4.1.2.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iMenu Debugger Plugin","description":"Illumine - Menu Debugger plugin","id":"imenudebuggerplugin-plugin","releases":[{"date":"2021-08-13","sha512sum":"D9A00F68D0F8D185C6ABAB541BF6F84A516453F902000AE56E8A4223D0C8914FE17CA130E486E5423C187C99F4ED057D43117D98B413D3F8E4069CE7F590B001","version":"2.3.0","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/imenudebugger-2.3.0.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iPowerfighter Plugin","description":"Illumine - Powerfighter plugin","id":"ipowerfighterplugin-plugin","releases":[{"date":"2021-08-13","sha512sum":"91C82B66073E942668F888EC9816581C203FA9A69BBD109D694922370543CE1361D9B9608CD450EF4CB9C5B8C41A09D0C5F2525DF7F3749021F696E0A3E60223","version":"4.2.4","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/ipowerfighter-4.2.4.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iPower Skiller","description":"Illumine auto power skiller plugin","id":"ipowerskiller-plugin","releases":[{"date":"2021-08-13","sha512sum":"A39C5BD79FEF4F8839F406BBACD5162CE3E8CD3A7C0C8B8F13A706810162E9717C8AC0567B4F197DF80AE1DCED70AF8634FA765641D51A9C3A8FDF6249FBF376","version":"6.1.3","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/ipowerskiller-6.1.3.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iQuest Assistant","description":"Illumine - Quest Assistant plugin","id":"iquestassistant-plugin","releases":[{"date":"2021-08-13","sha512sum":"6DCA78B519680A344E615ED75955CEE1FD623AA9FCA534535B3946DFAE7B87D27F1FD41E8392F762B6BC77F0D76519536F347F631B792A7025E95AADEFB68C5D","version":"1.1.1","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iquestassistant-1.1.1.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iQuester Free","description":"Illumine - Free Quester plugin.","id":"iquesterfree-plugin","releases":[{"date":"2021-08-13","sha512sum":"B19CED68CBA64F6F37A221045BD178B892E293A30DBCB6C4EBA3E45C88BD2B001E44B1EBACE0C90253FAC80511D97966FB3C4F3424C705C79911B3695921DC25","version":"1.0.4","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iquesterfree-1.0.4.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iQuick Eater","description":"Illumine - auto eat food, consume potions and equip items","id":"iquickeater-plugin","releases":[{"date":"2021-08-13","sha512sum":"C8D92784447CC5D4726BD22B5B402A8BC9B719FB6381543985D87FCE3F4AAA8BE6BEF3D4369C95E2D179EBDE8E76392E029D9AD3E118A0003F4BDA0AFC42F510","version":"5.1.2","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iquickeater-5.1.2.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iRandom Handler","description":"illumine - Dismiss random events and handle genie","id":"irandomhandler-plugin","releases":[{"date":"2021-08-13","sha512sum":"FAC53D573FC9489E293B0DD19CDAF4A62E2C28874661D0CF4AC8BE1D8756AAD6752144615B21F70B595803C970D109A6C9BBC0E7BF0C57F848573EEE5DA0B04D","version":"3.1.1","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/irandomhandler-3.1.1.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iRooftop Agility","description":"Illumine automated rooftop agility plugin","id":"irooftopagility-plugin","releases":[{"date":"2021-08-13","sha512sum":"706A284A3354C409250895398CD68F9EE5D99A88304988E2AAB243BCDCC13D60709AF1C89967E7401629F9FB8FF92CB33E63DBEB896F34800E7BE9823C84BF30","version":"6.1.6","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/irooftopagility-6.1.6.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iTaskTemplate","description":"Illumine - Task Template plugin","id":"itasktemplate-plugin","releases":[{"date":"2021-08-13","sha512sum":"98C262B2D53F0ABDB3DE2961E514BB7DD496EAC9E5B3DB56B302146680BD8B180E91CB11F3F04502F828811AFFB45AFE0DCBBB170105E82BA65D14CAB82A1284","version":"4.0.1","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/itasktemplate-4.0.1.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iUtils","description":"Illumine - Utils required for plugins to function with added automation","id":"iutils-plugin","releases":[{"date":"2021-08-13","sha512sum":"AE616DE986CC388F43DB525D419CA60284A2F1A74FC42FA4B0EA34924CADFB24311A4E91DF2E883464A981325DF8980529BB68B73E9CD5193A9DFC0588714FDF","version":"4.4.2","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iutils-4.4.2.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iWorld Walker Plugin","description":"Illumine - World Walker plugin","id":"iworldwalkerplugin-plugin","releases":[{"date":"2021-08-13","sha512sum":"F1AAF978D489763F0DDC078CBF9AAD340D16B10B5D60DB02F5D60B38390FCE097380759B7B50558FBFF9DCE804BC11BEBFAE20EDF3A2DF520AA5C6EE785A6981","version":"4.0.1","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iworldwalker-4.0.1.jar?raw=true","requires":"^1.0.0"}]}] +[{"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"BotUtils","description":"Illumine - Utils required for plugins to function with added automation","id":"botutils-plugin","releases":[{"date":"2021-08-15","sha512sum":"A71C4F1B739303A6B543B80D6F10826A780D86365A495F0FFD3D2EE8A49585C18ADEE0EE59DA4729FEA017055F6C8E52FB46944653DF75681D5354FA62464CF0","version":"5.1.0","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/botutils-5.1.0.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"Disable Rendering","description":"Illumine - Disable rendering to improve performance","id":"disablerendering-plugin","releases":[{"date":"2021-08-15","sha512sum":"22584C6A481F3A4CBE569BFC7DF053F05BE8A4B6793E173090773E3C6919DBEB5705A205DD27EEC1084BD51571935D3263AB7F6EA2E7B8EDA1A9F7EE45F4683C","version":"1.0.0","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/disablerendering-1.0.0.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iBlackjack","description":"Illumine - Blackjack plugin","id":"iblackjack-plugin","releases":[{"date":"2021-08-15","sha512sum":"DE7063171C8DEFD8E17471060111624172D18E05478574C1267E3D62F0D328E2A9520DF3471B6C0A1710D228B4FAC8CB867AE968987C40718FBA32EC47AC0105","version":"2.1.2","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iblackjack-2.1.2.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iCombination Runecrafter Plugin","description":"Illumine - Combination Runecrafting plugin","id":"icombinationrunecrafterplugin-plugin","releases":[{"date":"2021-08-15","sha512sum":"525470A8CDE1E77C038D16D46FFD32F1E793F9A4F1095FFF11FEE9F682D80B2016EE369C5B0298D33B8C8D2E2404416501AF11856C8739A9D0DE3CB917031FF4","version":"3.1.3","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/icombinationrunecrafter-3.1.3.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iHerbCleaner","description":"Illumine - Herb Cleaner","id":"iherbcleaner-plugin","releases":[{"date":"2021-08-15","sha512sum":"947E7C27746385BA8B2F84B3900DB483430C94ADB92C0E9A5DF1B608A2B7DB0CC1EBF083FFEFE71095CDB922A407D12ED9E96F2700A33BD23FDE546844EFCAB6","version":"2.1.2","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iherbcleaner-2.1.2.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iMagic Caster","description":"Illumine automated magic caster","id":"imagiccaster-plugin","releases":[{"date":"2021-08-15","sha512sum":"B201FE2A998CA6584150F551A06BF6F2624DCF88082255EADBF2413A2D24FBA1865E7BAA0DC0B72939E76AD76C7E7B44CFB23C1536E20B350500CB48A14A7DCD","version":"4.1.2","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/imagiccaster-4.1.2.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iMenu Debugger Plugin","description":"Illumine - Menu Debugger plugin","id":"imenudebuggerplugin-plugin","releases":[{"date":"2021-08-15","sha512sum":"D9A00F68D0F8D185C6ABAB541BF6F84A516453F902000AE56E8A4223D0C8914FE17CA130E486E5423C187C99F4ED057D43117D98B413D3F8E4069CE7F590B001","version":"2.3.0","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/imenudebugger-2.3.0.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iPowerfighter Plugin","description":"Illumine - Powerfighter plugin","id":"ipowerfighterplugin-plugin","releases":[{"date":"2021-08-15","sha512sum":"91C82B66073E942668F888EC9816581C203FA9A69BBD109D694922370543CE1361D9B9608CD450EF4CB9C5B8C41A09D0C5F2525DF7F3749021F696E0A3E60223","version":"4.2.4","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/ipowerfighter-4.2.4.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iPower Skiller","description":"Illumine auto power skiller plugin","id":"ipowerskiller-plugin","releases":[{"date":"2021-08-15","sha512sum":"A39C5BD79FEF4F8839F406BBACD5162CE3E8CD3A7C0C8B8F13A706810162E9717C8AC0567B4F197DF80AE1DCED70AF8634FA765641D51A9C3A8FDF6249FBF376","version":"6.1.3","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/ipowerskiller-6.1.3.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iQuest Assistant","description":"Illumine - Quest Assistant plugin","id":"iquestassistant-plugin","releases":[{"date":"2021-08-15","sha512sum":"6DCA78B519680A344E615ED75955CEE1FD623AA9FCA534535B3946DFAE7B87D27F1FD41E8392F762B6BC77F0D76519536F347F631B792A7025E95AADEFB68C5D","version":"1.1.1","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iquestassistant-1.1.1.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iQuester Free","description":"Illumine - Free Quester plugin.","id":"iquesterfree-plugin","releases":[{"date":"2021-08-15","sha512sum":"B19CED68CBA64F6F37A221045BD178B892E293A30DBCB6C4EBA3E45C88BD2B001E44B1EBACE0C90253FAC80511D97966FB3C4F3424C705C79911B3695921DC25","version":"1.0.4","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iquesterfree-1.0.4.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iQuick Eater","description":"Illumine - auto eat food, consume potions and equip items","id":"iquickeater-plugin","releases":[{"date":"2021-08-15","sha512sum":"C8D92784447CC5D4726BD22B5B402A8BC9B719FB6381543985D87FCE3F4AAA8BE6BEF3D4369C95E2D179EBDE8E76392E029D9AD3E118A0003F4BDA0AFC42F510","version":"5.1.2","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iquickeater-5.1.2.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iRandom Handler","description":"illumine - Dismiss random events and handle genie","id":"irandomhandler-plugin","releases":[{"date":"2021-08-15","sha512sum":"FAC53D573FC9489E293B0DD19CDAF4A62E2C28874661D0CF4AC8BE1D8756AAD6752144615B21F70B595803C970D109A6C9BBC0E7BF0C57F848573EEE5DA0B04D","version":"3.1.1","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/irandomhandler-3.1.1.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iRooftop Agility","description":"Illumine automated rooftop agility plugin","id":"irooftopagility-plugin","releases":[{"date":"2021-08-15","sha512sum":"706A284A3354C409250895398CD68F9EE5D99A88304988E2AAB243BCDCC13D60709AF1C89967E7401629F9FB8FF92CB33E63DBEB896F34800E7BE9823C84BF30","version":"6.1.6","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/irooftopagility-6.1.6.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iTaskTemplate","description":"Illumine - Task Template plugin","id":"itasktemplate-plugin","releases":[{"date":"2021-08-15","sha512sum":"98C262B2D53F0ABDB3DE2961E514BB7DD496EAC9E5B3DB56B302146680BD8B180E91CB11F3F04502F828811AFFB45AFE0DCBBB170105E82BA65D14CAB82A1284","version":"4.0.1","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/itasktemplate-4.0.1.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iUtils","description":"Illumine - Utils required for plugins to function with added automation","id":"iutils-plugin","releases":[{"date":"2021-08-15","sha512sum":"70EEC3C4C4F8D6859EEC4C492349EE041F30C12EE0C72EFFC9A816E8B3933AD308D0C98E302CA48BE8A308E38B2A19E5714C42BB6C9722A1AC2F6AB086D54B25","version":"4.4.3","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iutils-4.4.3.jar?raw=true","requires":"^1.0.0"}]}, {"projectUrl":"https://discord.gg/9fGzEDR","provider":"illumine","name":"iWorld Walker Plugin","description":"Illumine - World Walker plugin","id":"iworldwalkerplugin-plugin","releases":[{"date":"2021-08-15","sha512sum":"F1AAF978D489763F0DDC078CBF9AAD340D16B10B5D60DB02F5D60B38390FCE097380759B7B50558FBFF9DCE804BC11BEBFAE20EDF3A2DF520AA5C6EE785A6981","version":"4.0.1","url":"https://github.com/illumineawake/illu-plugins/blob/master/release/iworldwalker-4.0.1.jar?raw=true","requires":"^1.0.0"}]}] diff --git a/release/iutils-4.4.2.jar b/release/iutils-4.4.3.jar similarity index 99% rename from release/iutils-4.4.2.jar rename to release/iutils-4.4.3.jar index 9d9875d038451bf12a069ae49a15385a4a127251..d87db159ce517336e916fccb29bad6dd8db19d9c 100644 GIT binary patch delta 7156 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 delta 6374 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 ZKzjj+-+p_q0U?#!L5$eiVW8Xd_kYh2=XwAD