Add auto TP feature

This commit is contained in:
Yuri Moens 2022-01-20 01:27:24 +01:00
parent 9ec09e42d5
commit 2e9808c32c
Signed by: ymo
GPG Key ID: F6D51D6FE15BE924
2 changed files with 129 additions and 7 deletions

View File

@ -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; }
}

View File

@ -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<Integer> IGNORE_FOOD = Set.of(ItemID.DWARVEN_ROCK_CAKE, ItemID.DWARVEN_ROCK_CAKE_7510);
private final Set<Integer> 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<Integer> 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);
}