timers: Track home and minigame teleports using vars (#14842)

This commit is contained in:
superiorser9
2022-05-26 23:33:10 +01:00
committed by GitHub
parent a830bc5572
commit 88e39ab152
3 changed files with 70 additions and 97 deletions

View File

@@ -1,68 +0,0 @@
/*
* Copyright (c) 2018, Jordan Atwood <jordan.atwood423@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.timers;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import javax.annotation.Nullable;
import net.runelite.api.widgets.WidgetInfo;
enum TeleportWidget
{
HOME_TELEPORT,
MINIGAME_TELEPORT,
TRAILBLAZER_AREA_TELEPORT,
;
private static final Collection HOME_TELEPORT_IDS = ImmutableList.of(
WidgetInfo.SPELL_LUMBRIDGE_HOME_TELEPORT.getId(),
WidgetInfo.SPELL_EDGEVILLE_HOME_TELEPORT.getId(),
WidgetInfo.SPELL_LUNAR_HOME_TELEPORT.getId(),
WidgetInfo.SPELL_ARCEUUS_HOME_TELEPORT.getId(),
WidgetInfo.SPELL_KOUREND_HOME_TELEPORT.getId(),
WidgetInfo.SPELL_CATHERBY_HOME_TELEPORT.getId()
);
private static final Collection MINIGAME_TELEPORT_IDS = ImmutableList.of(
WidgetInfo.MINIGAME_TELEPORT_BUTTON.getId()
);
@Nullable
static TeleportWidget of(int widgetId)
{
if (HOME_TELEPORT_IDS.contains(widgetId))
{
return HOME_TELEPORT;
}
else if (MINIGAME_TELEPORT_IDS.contains(widgetId))
{
return MINIGAME_TELEPORT;
}
else if (widgetId == WidgetInfo.TRAILBLAZER_AREA_TELEPORT.getId())
{
return TRAILBLAZER_AREA_TELEPORT;
}
return null;
}
}

View File

@@ -29,6 +29,7 @@ package net.runelite.client.plugins.timers;
import com.google.inject.Provides;
import java.time.Duration;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Inject;
@@ -45,7 +46,6 @@ import net.runelite.api.ItemContainer;
import net.runelite.api.ItemID;
import static net.runelite.api.ItemID.FIRE_CAPE;
import static net.runelite.api.ItemID.INFERNAL_CAPE;
import net.runelite.api.MenuAction;
import net.runelite.api.NPC;
import net.runelite.api.NpcID;
import net.runelite.api.Player;
@@ -152,11 +152,12 @@ public class TimersPlugin extends Plugin
private int lastPoisonVarp;
private int lastPvpVarb;
private int lastCorruptionVarb;
private int lastHomeTeleport;
private int lastMinigameTeleport;
private int lastImbuedHeartVarb;
private boolean imbuedHeartTimerActive;
private int nextPoisonTick;
private WorldPoint lastPoint;
private TeleportWidget lastTeleportClicked;
private int lastAnimation;
private boolean widgetHiddenChangedOnPvpWorld;
private ElapsedTimer tzhaarTimer;
@@ -185,6 +186,11 @@ public class TimersPlugin extends Plugin
@Override
public void startUp()
{
if (config.showHomeMinigameTeleports())
{
checkTeleport(VarPlayer.LAST_HOME_TELEPORT);
checkTeleport(VarPlayer.LAST_MINIGAME_TELEPORT);
}
}
@Override
@@ -193,7 +199,6 @@ public class TimersPlugin extends Plugin
infoBoxManager.removeIf(t -> t instanceof TimerTimer);
lastRaidVarb = -1;
lastPoint = null;
lastTeleportClicked = null;
lastAnimation = -1;
widgetHiddenChangedOnPvpWorld = false;
lastPoisonVarp = 0;
@@ -202,6 +207,8 @@ public class TimersPlugin extends Plugin
staminaTimer = null;
imbuedHeartTimerActive = false;
lastImbuedHeartVarb = 0;
lastHomeTeleport = 0;
lastMinigameTeleport = 0;
}
@Subscribe
@@ -214,6 +221,8 @@ public class TimersPlugin extends Plugin
int pvpVarb = client.getVarbitValue(Varbits.PVP_SPEC_ORB);
int corruptionCooldownVarb = client.getVarbitValue(Varbits.CORRUPTION_COOLDOWN);
int imbuedHeartCooldownVarb = client.getVarbitValue(Varbits.IMBUED_HEART_COOLDOWN);
int homeTeleportVarp = client.getVar(VarPlayer.LAST_HOME_TELEPORT);
int minigameTeleportVarp = client.getVar(VarPlayer.LAST_MINIGAME_TELEPORT);
if (lastRaidVarb != raidVarb)
{
@@ -320,6 +329,18 @@ public class TimersPlugin extends Plugin
lastImbuedHeartVarb = imbuedHeartCooldownVarb;
}
if (lastHomeTeleport != homeTeleportVarp)
{
checkTeleport(VarPlayer.LAST_HOME_TELEPORT);
lastHomeTeleport = homeTeleportVarp;
}
if (lastMinigameTeleport != minigameTeleportVarp)
{
checkTeleport(VarPlayer.LAST_MINIGAME_TELEPORT);
lastMinigameTeleport = minigameTeleportVarp;
}
}
@Subscribe
@@ -335,6 +356,11 @@ public class TimersPlugin extends Plugin
removeGameTimer(HOME_TELEPORT);
removeGameTimer(MINIGAME_TELEPORT);
}
else
{
checkTeleport(VarPlayer.LAST_HOME_TELEPORT);
checkTeleport(VarPlayer.LAST_MINIGAME_TELEPORT);
}
if (!config.showAntiFire())
{
@@ -491,15 +517,6 @@ public class TimersPlugin extends Plugin
return;
}
}
if (event.getMenuAction() == MenuAction.CC_OP)
{
TeleportWidget teleportWidget = TeleportWidget.of(event.getParam1());
if (teleportWidget != null)
{
lastTeleportClicked = teleportWidget;
}
}
}
@Subscribe
@@ -877,6 +894,37 @@ public class TimersPlugin extends Plugin
}
}
private void checkTeleport(VarPlayer varPlayer)
{
final GameTimer teleport;
switch (varPlayer)
{
case LAST_HOME_TELEPORT:
teleport = HOME_TELEPORT;
break;
case LAST_MINIGAME_TELEPORT:
teleport = MINIGAME_TELEPORT;
break;
default:
// Other var changes are not handled as teleports
return;
}
int lastTeleport = client.getVar(varPlayer);
long lastTeleportSeconds = (long) lastTeleport * 60;
Instant teleportExpireInstant = Instant.ofEpochSecond(lastTeleportSeconds).plus(teleport.getDuration().getSeconds(), ChronoUnit.SECONDS);
Duration remainingTime = Duration.between(Instant.now(), teleportExpireInstant);
if (remainingTime.getSeconds() > 0)
{
createGameTimer(teleport, remainingTime);
}
else
{
removeGameTimer(teleport);
}
}
@Subscribe
public void onGameTick(GameTick event)
{
@@ -956,23 +1004,6 @@ public class TimersPlugin extends Plugin
return;
}
if (config.showHomeMinigameTeleports()
&& client.getLocalPlayer().getAnimation() == AnimationID.IDLE
&& (lastAnimation == AnimationID.BOOK_HOME_TELEPORT_5
|| lastAnimation == AnimationID.COW_HOME_TELEPORT_6
|| lastAnimation == AnimationID.LEAGUE_HOME_TELEPORT_6
|| lastAnimation == AnimationID.SHATTERED_LEAGUE_HOME_TELEPORT_6))
{
if (lastTeleportClicked == TeleportWidget.HOME_TELEPORT)
{
createGameTimer(HOME_TELEPORT);
}
else if (lastTeleportClicked == TeleportWidget.MINIGAME_TELEPORT)
{
createGameTimer(MINIGAME_TELEPORT);
}
}
if (config.showDFSSpecial() && lastAnimation == AnimationID.DRAGONFIRE_SHIELD_SPECIAL)
{
createGameTimer(DRAGON_FIRE_SHIELD);