From 2e9808c32c9ecee7071af26db78771fff7bbdfcd Mon Sep 17 00:00:00 2001 From: Yuri Moens Date: Thu, 20 Jan 2022 01:27:24 +0100 Subject: [PATCH] Add auto TP feature --- .../io/reisub/openosrs/consume/Config.java | 38 ++++++- .../io/reisub/openosrs/consume/Consume.java | 98 ++++++++++++++++++- 2 files changed, 129 insertions(+), 7 deletions(-) diff --git a/consume/src/main/java/io/reisub/openosrs/consume/Config.java b/consume/src/main/java/io/reisub/openosrs/consume/Config.java index 43a5a28..16f629d 100644 --- a/consume/src/main/java/io/reisub/openosrs/consume/Config.java +++ b/consume/src/main/java/io/reisub/openosrs/consume/Config.java @@ -27,6 +27,10 @@ package io.reisub.openosrs.consume; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigSection; +import net.runelite.client.config.Keybind; + +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; @ConfigGroup("chaosconsume") @@ -223,7 +227,7 @@ public interface Config extends net.runelite.client.config.Config { unhide = "drinkStrength" ) default int strengthLevel() { - return 100; + return 1; } @ConfigItem( @@ -260,7 +264,7 @@ public interface Config extends net.runelite.client.config.Config { unhide = "drinkAttack" ) default int attackLevel() { - return 100; + return 1; } @ConfigItem( @@ -297,7 +301,7 @@ public interface Config extends net.runelite.client.config.Config { unhide = "drinkDefence" ) default int defenceLevel() { - return 100; + return 1; } @ConfigItem( @@ -334,7 +338,7 @@ public interface Config extends net.runelite.client.config.Config { unhide = "drinkRanged" ) default int rangedLevel() { - return 100; + return 1; } @ConfigItem( @@ -371,7 +375,7 @@ public interface Config extends net.runelite.client.config.Config { unhide = "drinkMagic" ) default int magicLevel() { - return 100; + return 1; } @ConfigItem( @@ -426,5 +430,29 @@ public interface Config extends net.runelite.client.config.Config { ) default int specialCost() { return 100; } + @ConfigItem( + keyName = "pkTeleport", + name = "PK teleport hotkey", + description = "Pressing the hotkey will toggle watching for skulled players or players attacking you and try to teleport away. Requires an equipped charged amulet of glory.", + position = 50 + ) + default Keybind pkTeleport() { + return new Keybind(KeyEvent.VK_F1, InputEvent.CTRL_DOWN_MASK); + } + @ConfigItem( + keyName = "tpOnDangerousPlayer", + name = "TP on dangerous player", + description = "Attempt to teleport when a skulled player within level range appears.", + position = 51 + ) + default boolean tpOnDangerousPlayer() { return true; } + + @ConfigItem( + keyName = "tpOnPlayerAttack", + name = "TP on player attack", + description = "Attempt to teleport when we're being attacked by a player.", + position = 52 + ) + default boolean tpOnPlayerAttack() { return true; } } \ No newline at end of file diff --git a/consume/src/main/java/io/reisub/openosrs/consume/Consume.java b/consume/src/main/java/io/reisub/openosrs/consume/Consume.java index 0acadfe..3b91e79 100644 --- a/consume/src/main/java/io/reisub/openosrs/consume/Consume.java +++ b/consume/src/main/java/io/reisub/openosrs/consume/Consume.java @@ -11,21 +11,28 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; +import net.runelite.client.input.KeyListener; +import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.iutils.game.EquipmentItem; import net.runelite.client.plugins.iutils.game.Game; import net.runelite.client.plugins.iutils.game.InventoryItem; import net.runelite.client.plugins.iutils.game.iWidget; import net.runelite.client.plugins.iutils.iUtils; import net.runelite.client.plugins.iutils.ui.Bank; +import net.runelite.client.plugins.iutils.ui.Equipment; import org.pf4j.Extension; import javax.inject.Inject; +import java.awt.event.KeyEvent; import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @Extension @PluginDependency(Util.class) @@ -36,7 +43,7 @@ import java.util.concurrent.TimeUnit; enabledByDefault = false ) @Slf4j -public class Consume extends Plugin { +public class Consume extends Plugin implements KeyListener { @SuppressWarnings("unused") @Inject private Game game; @@ -45,6 +52,9 @@ public class Consume extends Plugin { @Inject private Config config; + @Inject + private KeyManager keyManager; + @SuppressWarnings("unused") @Inject private Calculations calc; @@ -52,6 +62,9 @@ public class Consume extends Plugin { @Inject private Bank bank; + @Inject + private Equipment equipment; + private final Set IGNORE_FOOD = Set.of(ItemID.DWARVEN_ROCK_CAKE, ItemID.DWARVEN_ROCK_CAKE_7510); private final Set DRINK_SET = Set.of(ItemID.JUG_OF_WINE, ItemID.SARADOMIN_BREW1, ItemID.SARADOMIN_BREW2, ItemID.SARADOMIN_BREW3, ItemID.SARADOMIN_BREW4, ItemID.XERICS_AID_1, ItemID.XERICS_AID_2, ItemID.XERICS_AID_3, ItemID.XERICS_AID_4, ItemID.XERICS_AID_1_20977, ItemID.XERICS_AID_2_20978, ItemID.XERICS_AID_3_20979, ItemID.XERICS_AID_4_20980, ItemID.XERICS_AID_1_20981, ItemID.XERICS_AID_2_20982, ItemID.XERICS_AID_3_20983, ItemID.XERICS_AID_4_20984, ItemID.BANDAGES); private final Set ANTI_POISON_IDS = Set.of(ItemID.ANTIPOISON1, ItemID.ANTIPOISON2, ItemID.ANTIPOISON3, ItemID.ANTIPOISON4, ItemID.SUPERANTIPOISON1, ItemID.SUPERANTIPOISON2, ItemID.SUPERANTIPOISON3, ItemID.SUPERANTIPOISON4, @@ -113,6 +126,7 @@ public class Consume extends Plugin { private boolean shouldDrinkMagic; private long lastMagic; private boolean shouldUseSpecial; + private boolean pkTeleport; @SuppressWarnings("unused") @Provides @@ -128,6 +142,7 @@ public class Consume extends Plugin { generateNewPrayerThreshold(); executor = Executors.newSingleThreadScheduledExecutor(); + keyManager.registerKeyListener(this); } @Override @@ -135,6 +150,7 @@ public class Consume extends Plugin { log.info("Stopping Chaos Consume"); executor.shutdownNow(); + keyManager.unregisterKeyListener(this); } @SuppressWarnings("unused") @@ -237,7 +253,6 @@ public class Consume extends Plugin { } private void tick() { - int hp = game.modifiedLevel(Skill.HITPOINTS); if (config.enableEating() && hp <= eatThreshold && canEat()) { @@ -357,6 +372,85 @@ public class Consume extends Plugin { } } + @Subscribe + private void onPlayerSpawned(PlayerSpawned event) { + if (!config.tpOnDangerousPlayer() || !pkTeleport || game.client().getVar(Varbits.IN_WILDERNESS) == 0 || event.getPlayer() == null) return; + + iWidget wildernessLevelWidget = game.widget(WidgetInfo.PVP_WILDERNESS_LEVEL); + if (wildernessLevelWidget == null || wildernessLevelWidget.text() == null) return; + + Pattern regex = Pattern.compile("\\d+-\\d+"); + Matcher levelMatcher = regex.matcher(wildernessLevelWidget.text()); + + if (levelMatcher.find()) { + String[] levelRange = levelMatcher.group(0).split("-"); + int lowerLevel = Integer.parseInt(levelRange[0]); + int upperLevel = Integer.parseInt(levelRange[1]); + + int playerLevel = event.getPlayer().getCombatLevel(); + + if (event.getPlayer().getSkullIcon() != null && (playerLevel >= lowerLevel && playerLevel <= upperLevel)) { + log.info("Dangerous player spawned: " + event.getPlayer().getName()); + executor.schedule(this::teleport, 0, TimeUnit.MILLISECONDS); + } + } + } + + @Subscribe + private void onInteractingChanged(InteractingChanged event) { + if (!config.tpOnPlayerAttack() || !pkTeleport || game.client().getVar(Varbits.IN_WILDERNESS) == 0) return; + + if (event.getSource() == null || event.getTarget() == null) return; + + if (event.getSource() instanceof Player && event.getTarget().equals(game.client().getLocalPlayer())) { + log.info("Player attacking us: " + event.getSource().getName()); + executor.schedule(this::teleport, 0, TimeUnit.MILLISECONDS); + } + } + + private void teleport() { + pkTeleport = false; + + iWidget wildernessLevelWidget = game.widget(WidgetInfo.PVP_WILDERNESS_LEVEL); + if (wildernessLevelWidget == null || wildernessLevelWidget.text() == null) return; + + Pattern regex = Pattern.compile("Level: \\d+"); + Matcher levelMatcher = regex.matcher(wildernessLevelWidget.text()); + + if (!levelMatcher.find()) return; + + if (Integer.parseInt(levelMatcher.group(0).split(" ")[1]) > 30) return; + + EquipmentItem amuletOfGlory = game.equipment().withAction("Edgeville").first(); + if (amuletOfGlory == null) return; + + amuletOfGlory.interact("Edgeville"); + game.tick(3); + } + + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyPressed(KeyEvent e) { + if (config.pkTeleport().matches(e)) { + pkTeleport = !pkTeleport; + + if (pkTeleport) { + game.utils.sendGameMessage("Enabled PK teleport"); + } else { + game.utils.sendGameMessage("Disabled PK teleport"); + } + } + } + + @Override + public void keyReleased(KeyEvent e) { + + } + private void generateNewEatThreshold() { eatThreshold = calc.random(config.minEatHP(), config.maxEatHP() + 1); }