Merge remote-tracking branch 'runelite/master'

This commit is contained in:
Owain van Brakel
2021-10-27 03:29:13 +02:00
6 changed files with 76 additions and 75 deletions

View File

@@ -85,11 +85,18 @@ public enum InventoryID
* Theater of Blood reward chest inventory (Raids 2) * Theater of Blood reward chest inventory (Raids 2)
*/ */
THEATRE_OF_BLOOD_CHEST(612), THEATRE_OF_BLOOD_CHEST(612),
/** /**
* Seed vault located inside the Farming Guild * Seed vault located inside the Farming Guild
*/ */
SEED_VAULT(626); SEED_VAULT(626),
/**
* Group ironman shared storage
*/
GROUP_STORAGE(659),
/**
* Player inventory when accessing group ironman shared storage
*/
GROUP_STORAGE_INV(660);
private final int id; private final int id;

View File

@@ -304,7 +304,10 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener
// input. We prevent having a tag tab open while also performing a normal search, so if a tag tab // input. We prevent having a tag tab open while also performing a normal search, so if a tag tab
// is active here it must mean we have placed the bank into search mode. See onScriptPostFired(). // is active here it must mean we have placed the bank into search mode. See onScriptPostFired().
TagTab activeTab = tabInterface.getActiveTab(); TagTab activeTab = tabInterface.getActiveTab();
String search = activeTab != null ? TAG_SEARCH + activeTab.getTag() : searchfilter; // Shared storage uses the bankmain filter scripts too. Allow using tag searches in it but don't
// apply the tag search from the active tab.
final boolean bankOpen = client.getItemContainer(InventoryID.BANK) != null;
String search = activeTab != null && bankOpen ? TAG_SEARCH + activeTab.getTag() : searchfilter;
if (search.isEmpty()) if (search.isEmpty())
{ {
@@ -487,8 +490,9 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener
if (event.getScriptId() == ScriptID.BANKMAIN_SEARCHING) if (event.getScriptId() == ScriptID.BANKMAIN_SEARCHING)
{ {
// The return value of bankmain_searching is on the stack. If we have a tag tab active // The return value of bankmain_searching is on the stack. If we have a tag tab active
// make it return true to put the bank in a searching state. // and are in the bank, make it return true to put the bank in a searching state.
if (tabInterface.getActiveTab() != null || tabInterface.isTagTabActive()) boolean bankOpen = client.getItemContainer(InventoryID.BANK) != null;
if (bankOpen && (tabInterface.getActiveTab() != null || tabInterface.isTagTabActive()))
{ {
client.getIntStack()[client.getIntStackSize() - 1] = 1; // true client.getIntStack()[client.getIntStackSize() - 1] = 1; // true
} }

View File

@@ -62,11 +62,7 @@ class PrayerDoseOverlay extends Overlay
private boolean trackTick = true; private boolean trackTick = true;
@Setter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE)
private boolean hasPrayerRestore; private int restoreAmount;
@Setter(AccessLevel.PACKAGE)
private int bonusPrayer;
@Setter(AccessLevel.PACKAGE)
private boolean hasHolyWrench;
@Inject @Inject
private PrayerDoseOverlay(final Client client, final TooltipManager tooltipManager, final PrayerPlugin plugin, final PrayerConfig config) private PrayerDoseOverlay(final Client client, final TooltipManager tooltipManager, final PrayerPlugin plugin, final PrayerConfig config)
@@ -127,7 +123,7 @@ class PrayerDoseOverlay extends Overlay
tooltipManager.add(new Tooltip(sb.toString())); tooltipManager.add(new Tooltip(sb.toString()));
} }
if (!config.showPrayerDoseIndicator() || !hasPrayerRestore) if (!config.showPrayerDoseIndicator() || restoreAmount == 0)
{ {
return null; return null;
} }
@@ -136,17 +132,7 @@ class PrayerDoseOverlay extends Overlay
final int maxPrayer = client.getRealSkillLevel(Skill.PRAYER); final int maxPrayer = client.getRealSkillLevel(Skill.PRAYER);
final int prayerPointsMissing = maxPrayer - currentPrayer; final int prayerPointsMissing = maxPrayer - currentPrayer;
if (prayerPointsMissing <= 0) if (prayerPointsMissing <= 0 || prayerPointsMissing < restoreAmount)
{
return null;
}
final double dosePercentage = hasHolyWrench ? .27 : .25;
final int basePointsRestored = (int) Math.floor(maxPrayer * dosePercentage);
final int pointsRestored = basePointsRestored + 7 + bonusPrayer;
if (prayerPointsMissing < pointsRestored)
{ {
return null; return null;
} }

View File

@@ -30,6 +30,7 @@ import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import javax.annotation.Nullable;
import javax.inject.Inject; import javax.inject.Inject;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
@@ -39,7 +40,6 @@ import net.runelite.api.InventoryID;
import net.runelite.api.Item; import net.runelite.api.Item;
import net.runelite.api.ItemContainer; import net.runelite.api.ItemContainer;
import net.runelite.api.Prayer; import net.runelite.api.Prayer;
import net.runelite.client.events.ConfigChanged;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.api.events.GameTick; import net.runelite.api.events.GameTick;
import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.ItemContainerChanged;
@@ -47,6 +47,7 @@ import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.game.SpriteManager; import net.runelite.client.game.SpriteManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
@@ -141,26 +142,15 @@ public class PrayerPlugin extends Plugin
@Subscribe @Subscribe
public void onItemContainerChanged(final ItemContainerChanged event) public void onItemContainerChanged(final ItemContainerChanged event)
{ {
final ItemContainer container = event.getItemContainer(); final int id = event.getContainerId();
final ItemContainer inventory = client.getItemContainer(InventoryID.INVENTORY); if (id == InventoryID.INVENTORY.getId())
final ItemContainer equipment = client.getItemContainer(InventoryID.EQUIPMENT);
if (container == inventory || container == equipment)
{ {
doseOverlay.setHasHolyWrench(false); updatePotionBonus(event.getItemContainer(),
doseOverlay.setHasPrayerRestore(false); client.getItemContainer(InventoryID.EQUIPMENT));
doseOverlay.setBonusPrayer(0); }
else if (id == InventoryID.EQUIPMENT.getId())
if (inventory != null) {
{ prayerBonus = totalPrayerBonus(event.getItemContainer().getItems());
checkContainerForPrayer(inventory.getItems());
}
if (equipment != null)
{
prayerBonus = checkContainerForPrayer(equipment.getItems());
}
} }
} }
@@ -222,26 +212,29 @@ public class PrayerPlugin extends Plugin
} }
} }
private int checkContainerForPrayer(Item[] items) private int totalPrayerBonus(Item[] items)
{ {
if (items == null)
{
return 0;
}
int total = 0; int total = 0;
for (Item item : items)
{
ItemStats is = itemManager.getItemStats(item.getId(), false);
if (is != null && is.getEquipment() != null)
{
total += is.getEquipment().getPrayer();
}
}
return total;
}
private void updatePotionBonus(ItemContainer inventory, @Nullable ItemContainer equip)
{
boolean hasPrayerPotion = false; boolean hasPrayerPotion = false;
boolean hasSuperRestore = false; boolean hasSuperRestore = false;
boolean hasSanfew = false; boolean hasSanfew = false;
boolean hasWrench = false;
for (Item item : items) for (Item item : inventory.getItems())
{ {
if (item == null)
{
continue;
}
final PrayerRestoreType type = PrayerRestoreType.getType(item.getId()); final PrayerRestoreType type = PrayerRestoreType.getType(item.getId());
if (type != null) if (type != null)
@@ -258,32 +251,45 @@ public class PrayerPlugin extends Plugin
hasSanfew = true; hasSanfew = true;
break; break;
case HOLYWRENCH: case HOLYWRENCH:
doseOverlay.setHasHolyWrench(true); hasWrench = true;
break; break;
} }
} }
ItemStats is = itemManager.getItemStats(item.getId(), false);
if (is != null && is.getEquipment() != null)
{
total += is.getEquipment().getPrayer();
}
} }
if (hasSanfew || hasSuperRestore || hasPrayerPotion) // Some items providing the holy wrench bonus can also be worn
if (!hasWrench && equip != null)
{ {
doseOverlay.setHasPrayerRestore(true); for (Item item : equip.getItems())
if (hasSanfew)
{ {
doseOverlay.setBonusPrayer(2); final PrayerRestoreType type = PrayerRestoreType.getType(item.getId());
} if (type == PrayerRestoreType.HOLYWRENCH)
else if (hasSuperRestore) {
{ hasWrench = true;
doseOverlay.setBonusPrayer(1); break;
}
} }
} }
return total; // Prayer potion: floor(7 + 25% of base level) - 27% with holy wrench
// Super restore: floor(8 + 25% of base level) - 27% with holy wrench
// Sanfew serum: floor(4 + 30% of base level) - 32% with holy wrench
final int prayerLevel = client.getRealSkillLevel(Skill.PRAYER);
int restored = 0;
if (hasSanfew)
{
restored = Math.max(restored, 4 + (int) Math.floor(prayerLevel * (hasWrench ? .32 : .30)));
}
if (hasSuperRestore)
{
restored = Math.max(restored, 8 + (int) Math.floor(prayerLevel * (hasWrench ? .27 : .25)));
}
if (hasPrayerPotion)
{
restored = Math.max(restored, 7 + (int) Math.floor(prayerLevel * (hasWrench ? .27 : .25)));
}
doseOverlay.setRestoreAmount(restored);
} }
double getTickProgress() double getTickProgress()

View File

@@ -30,7 +30,9 @@ import net.runelite.api.ItemID;
enum PrayerRestoreType enum PrayerRestoreType
{ {
RESTOREPOT(ItemID.SUPER_RESTORE4, ItemID.SUPER_RESTORE3, ItemID.SUPER_RESTORE2, ItemID.SUPER_RESTORE1), RESTOREPOT(ItemID.SUPER_RESTORE4, ItemID.SUPER_RESTORE3, ItemID.SUPER_RESTORE2, ItemID.SUPER_RESTORE1,
ItemID.BLIGHTED_SUPER_RESTORE4, ItemID.BLIGHTED_SUPER_RESTORE3, ItemID.BLIGHTED_SUPER_RESTORE2,
ItemID.BLIGHTED_SUPER_RESTORE1),
PRAYERPOT(ItemID.PRAYER_POTION4, ItemID.PRAYER_POTION3, ItemID.PRAYER_POTION2, ItemID.PRAYER_POTION1), PRAYERPOT(ItemID.PRAYER_POTION4, ItemID.PRAYER_POTION3, ItemID.PRAYER_POTION2, ItemID.PRAYER_POTION1),
SANFEWPOT(ItemID.SANFEW_SERUM4, ItemID.SANFEW_SERUM3, ItemID.SANFEW_SERUM2, ItemID.SANFEW_SERUM1), SANFEWPOT(ItemID.SANFEW_SERUM4, ItemID.SANFEW_SERUM3, ItemID.SANFEW_SERUM2, ItemID.SANFEW_SERUM1),
HOLYWRENCH(ItemID.PRAYER_CAPE, ItemID.PRAYER_CAPET, ItemID.MAX_CAPE, HOLYWRENCH(ItemID.PRAYER_CAPE, ItemID.PRAYER_CAPET, ItemID.MAX_CAPE,

View File

@@ -99,7 +99,6 @@ public class PrayerPluginTest
when(client.isPrayerActive(Prayer.PRESERVE)).thenReturn(true); when(client.isPrayerActive(Prayer.PRESERVE)).thenReturn(true);
when(client.getBoostedSkillLevel(Skill.PRAYER)).thenReturn(99); when(client.getBoostedSkillLevel(Skill.PRAYER)).thenReturn(99);
when(client.getItemContainer(InventoryID.EQUIPMENT)).thenReturn(itemContainer);
prayerPlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.EQUIPMENT.getId(), itemContainer)); prayerPlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.EQUIPMENT.getId(), itemContainer));
@@ -114,7 +113,6 @@ public class PrayerPluginTest
when(client.isPrayerActive(Prayer.PRESERVE)).thenReturn(true); when(client.isPrayerActive(Prayer.PRESERVE)).thenReturn(true);
when(client.getBoostedSkillLevel(Skill.PRAYER)).thenReturn(99); when(client.getBoostedSkillLevel(Skill.PRAYER)).thenReturn(99);
when(client.getItemContainer(InventoryID.EQUIPMENT)).thenReturn(itemContainer);
prayerPlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.EQUIPMENT.getId(), itemContainer)); prayerPlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.EQUIPMENT.getId(), itemContainer));
@@ -129,7 +127,6 @@ public class PrayerPluginTest
when(client.isPrayerActive(Prayer.PRESERVE)).thenReturn(true); when(client.isPrayerActive(Prayer.PRESERVE)).thenReturn(true);
when(client.getBoostedSkillLevel(Skill.PRAYER)).thenReturn(99); when(client.getBoostedSkillLevel(Skill.PRAYER)).thenReturn(99);
when(client.getItemContainer(InventoryID.EQUIPMENT)).thenReturn(itemContainer);
prayerPlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.EQUIPMENT.getId(), itemContainer)); prayerPlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.EQUIPMENT.getId(), itemContainer));
@@ -145,7 +142,6 @@ public class PrayerPluginTest
when(client.isPrayerActive(Prayer.PRESERVE)).thenReturn(true); when(client.isPrayerActive(Prayer.PRESERVE)).thenReturn(true);
when(client.getBoostedSkillLevel(Skill.PRAYER)).thenReturn(99); when(client.getBoostedSkillLevel(Skill.PRAYER)).thenReturn(99);
when(client.getItemContainer(InventoryID.EQUIPMENT)).thenReturn(itemContainer);
prayerPlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.EQUIPMENT.getId(), itemContainer)); prayerPlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.EQUIPMENT.getId(), itemContainer));