Preserve prayer tracking in boost timer (#3530)
This commit is contained in:
committed by
Tomas Slusny
parent
52b70418bc
commit
d142e83bf6
@@ -36,6 +36,7 @@ import javax.inject.Inject;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Prayer;
|
||||||
import net.runelite.api.Skill;
|
import net.runelite.api.Skill;
|
||||||
import net.runelite.api.events.BoostedLevelChanged;
|
import net.runelite.api.events.BoostedLevelChanged;
|
||||||
import net.runelite.api.events.ConfigChanged;
|
import net.runelite.api.events.ConfigChanged;
|
||||||
@@ -97,6 +98,8 @@ public class BoostsPlugin extends Plugin
|
|||||||
|
|
||||||
private BufferedImage overallIcon;
|
private BufferedImage overallIcon;
|
||||||
|
|
||||||
|
private boolean preserveBeenActive = false;
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
BoostsConfig provideConfig(ConfigManager configManager)
|
BoostsConfig provideConfig(ConfigManager configManager)
|
||||||
{
|
{
|
||||||
@@ -206,8 +209,39 @@ public class BoostsPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the amount of time until boosted stats decay,
|
||||||
|
* accounting for the effect of preserve prayer.
|
||||||
|
* Preserve extends the time of boosted stats by 50% while active.
|
||||||
|
* The length of a boost is split into 4 sections of 15 seconds each.
|
||||||
|
* If the preserve prayer is active for the entire duration of the final
|
||||||
|
* section it will "activate" adding an additional 15 second section
|
||||||
|
* to the boost timing. If again the preserve prayer is active for that
|
||||||
|
* entire section a second 15 second section will be added.
|
||||||
|
*
|
||||||
|
* Preserve is only required to be on for the 4th and 5th sections of the boost timer
|
||||||
|
* to gain full effect (seconds 45-75).
|
||||||
|
*
|
||||||
|
* @return integer value in seconds until next boost change
|
||||||
|
*/
|
||||||
public int getChangeTime()
|
public int getChangeTime()
|
||||||
{
|
{
|
||||||
return 60 - (int) Duration.between(lastChange, Instant.now()).getSeconds();
|
int timeSinceChange = timeSinceLastChange();
|
||||||
|
boolean isPreserveActive = client.isPrayerActive(Prayer.PRESERVE);
|
||||||
|
|
||||||
|
if ((isPreserveActive && (timeSinceChange < 45 || preserveBeenActive)) || timeSinceChange > 75)
|
||||||
|
{
|
||||||
|
preserveBeenActive = true;
|
||||||
|
return 90 - timeSinceChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
preserveBeenActive = false;
|
||||||
|
return (timeSinceChange > 60) ? 75 - timeSinceChange : 60 - timeSinceChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int timeSinceLastChange()
|
||||||
|
{
|
||||||
|
return (int) Duration.between(lastChange, Instant.now()).getSeconds();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user