Merge remote-tracking branch 'runelite/master'
This commit is contained in:
@@ -250,15 +250,6 @@ public enum ItemMapping
|
||||
BLACK_MASK_I_25276, BLACK_MASK_1_I_25275, BLACK_MASK_2_I_25274, BLACK_MASK_3_I_25273, BLACK_MASK_4_I_25272, BLACK_MASK_5_I_25271, BLACK_MASK_6_I_25270, BLACK_MASK_7_I_25269, BLACK_MASK_8_I_25268, BLACK_MASK_9_I_25267, BLACK_MASK_10_I_25266,
|
||||
TZTOK_SLAYER_HELMET, TZTOK_SLAYER_HELMET_I, TZTOK_SLAYER_HELMET_I_25902, VAMPYRIC_SLAYER_HELMET, VAMPYRIC_SLAYER_HELMET_I, VAMPYRIC_SLAYER_HELMET_I_25908, TZKAL_SLAYER_HELMET, TZKAL_SLAYER_HELMET_I, TZKAL_SLAYER_HELMET_I_25914),
|
||||
|
||||
// Pharaoh's Sceptres
|
||||
ITEM_PHARAOHS_SCEPTRE_1(PHARAOHS_SCEPTRE, PHARAOHS_SCEPTRE_1),
|
||||
ITEM_PHARAOHS_SCEPTRE_2(PHARAOHS_SCEPTRE, PHARAOHS_SCEPTRE_2),
|
||||
ITEM_PHARAOHS_SCEPTRE_4(PHARAOHS_SCEPTRE, PHARAOHS_SCEPTRE_4),
|
||||
ITEM_PHARAOHS_SCEPTRE_5(PHARAOHS_SCEPTRE, PHARAOHS_SCEPTRE_5),
|
||||
ITEM_PHARAOHS_SCEPTRE_6(PHARAOHS_SCEPTRE, PHARAOHS_SCEPTRE_6),
|
||||
ITEM_PHARAOHS_SCEPTRE_7(PHARAOHS_SCEPTRE, PHARAOHS_SCEPTRE_7),
|
||||
ITEM_PHARAOHS_SCEPTRE_8(PHARAOHS_SCEPTRE, PHARAOHS_SCEPTRE_8),
|
||||
|
||||
// Revertible items
|
||||
ITEM_HYDRA_LEATHER(HYDRA_LEATHER, FEROCIOUS_GLOVES),
|
||||
ITEM_HYDRA_TAIL(HYDRA_TAIL, BONECRUSHER_NECKLACE),
|
||||
|
||||
@@ -82,7 +82,7 @@ public class BankPlugin extends Plugin
|
||||
private static final String SEED_VAULT_TITLE = "Seed Vault";
|
||||
|
||||
private static final String NUMBER_REGEX = "[0-9]+(\\.[0-9]+)?[kmb]?";
|
||||
private static final Pattern VALUE_SEARCH_PATTERN = Pattern.compile("^(?<mode>ge|ha|alch)?" +
|
||||
private static final Pattern VALUE_SEARCH_PATTERN = Pattern.compile("^(?<mode>qty|ge|ha|alch)?" +
|
||||
" *(((?<op>[<>=]|>=|<=) *(?<num>" + NUMBER_REGEX + "))|" +
|
||||
"((?<num1>" + NUMBER_REGEX + ") *- *(?<num2>" + NUMBER_REGEX + ")))$", Pattern.CASE_INSENSITIVE);
|
||||
|
||||
@@ -413,13 +413,26 @@ public class BankPlugin extends Plugin
|
||||
final int qty = itemQuantities.count(itemId);
|
||||
final long gePrice = (long) itemManager.getItemPrice(itemId) * qty;
|
||||
final long haPrice = (long) itemComposition.getHaPrice() * qty;
|
||||
final boolean isPlaceholder = itemComposition.getPlaceholderTemplateId() != -1;
|
||||
|
||||
long value = Math.max(gePrice, haPrice);
|
||||
|
||||
final String mode = matcher.group("mode");
|
||||
if (mode != null)
|
||||
{
|
||||
value = mode.toLowerCase().equals("ge") ? gePrice : haPrice;
|
||||
switch (mode.toLowerCase())
|
||||
{
|
||||
case "qty":
|
||||
value = isPlaceholder ? 0 : qty;
|
||||
break;
|
||||
case "ge":
|
||||
value = gePrice;
|
||||
break;
|
||||
case "ha":
|
||||
case "alch":
|
||||
value = haPrice;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
final String op = matcher.group("op");
|
||||
|
||||
@@ -107,7 +107,7 @@ import org.apache.commons.text.WordUtils;
|
||||
public class ChatCommandsPlugin extends Plugin
|
||||
{
|
||||
private static final Pattern KILLCOUNT_PATTERN = Pattern.compile("Your (?:completion count for |subdued |completed )?(.+?) (?:(?:kill|harvest|lap|completion) )?(?:count )?is: <col=ff0000>(\\d+)</col>");
|
||||
private static final String TEAM_SIZES = "(?<teamsize>\\d+(?:\\+|-\\d+)? players|Solo)";
|
||||
private static final String TEAM_SIZES = "(?<teamsize>\\d+(?:\\+|-\\d+)? players?|Solo)";
|
||||
private static final Pattern RAIDS_PB_PATTERN = Pattern.compile("<col=ef20ff>Congratulations - your raid is complete!</col><br>Team size: <col=ff0000>" + TEAM_SIZES + "</col> Duration:</col> <col=ff0000>(?<pb>[0-9:]+(?:\\.[0-9]+)?)</col> \\(new personal best\\)</col>");
|
||||
private static final Pattern RAIDS_DURATION_PATTERN = Pattern.compile("<col=ef20ff>Congratulations - your raid is complete!</col><br>Team size: <col=ff0000>" + TEAM_SIZES + "</col> Duration:</col> <col=ff0000>[0-9:.]+</col> Personal best: </col><col=ff0000>(?<pb>[0-9:]+(?:\\.[0-9]+)?)</col>");
|
||||
private static final Pattern KILL_DURATION_PATTERN = Pattern.compile("(?i)(?:(?:Fight |Lap |Challenge |Corrupted challenge )?duration:|Subdued in|(?<!total )completion time:) <col=[0-9a-f]{6}>[0-9:.]+</col>\\. Personal best: (?:<col=ff0000>)?(?<pb>[0-9:]+(?:\\.[0-9]+)?)");
|
||||
@@ -115,7 +115,7 @@ public class ChatCommandsPlugin extends Plugin
|
||||
private static final Pattern DUEL_ARENA_WINS_PATTERN = Pattern.compile("You (were defeated|won)! You have(?: now)? won ([\\d,]+|one) duels?");
|
||||
private static final Pattern DUEL_ARENA_LOSSES_PATTERN = Pattern.compile("You have(?: now)? lost ([\\d,]+|one) duels?");
|
||||
private static final Pattern ADVENTURE_LOG_TITLE_PATTERN = Pattern.compile("The Exploits of (.+)");
|
||||
private static final Pattern ADVENTURE_LOG_PB_PATTERN = Pattern.compile("Fastest (?:kill|run)(?: - \\(Team size: " + TEAM_SIZES + "\\))?: (?<time>[0-9:]+(?:\\.[0-9]+)?)");
|
||||
private static final Pattern ADVENTURE_LOG_PB_PATTERN = Pattern.compile("Fastest (?:kill|run|Room time)(?: - \\(Team size: \\(?" + TEAM_SIZES + "\\)\\)?)?: (?<time>[0-9:]+(?:\\.[0-9]+)?)");
|
||||
private static final Pattern HS_PB_PATTERN = Pattern.compile("Floor (?<floor>\\d) time: <col=ff0000>(?<floortime>[0-9:]+(?:\\.[0-9]+)?)</col>(?: \\(new personal best\\)|. Personal best: (?<floorpb>[0-9:]+(?:\\.[0-9]+)?))" +
|
||||
"(?:<br>Overall time: <col=ff0000>(?<otime>[0-9:]+(?:\\.[0-9]+)?)</col>(?: \\(new personal best\\)|. Personal best: (?<opb>[0-9:]+(?:\\.[0-9]+)?)))?");
|
||||
private static final Pattern HS_KC_FLOOR_PATTERN = Pattern.compile("You have completed Floor (\\d) of the Hallowed Sepulchre! Total completions: <col=ff0000>([0-9,]+)</col>\\.");
|
||||
@@ -673,7 +673,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
for (int i = 0; i < text.length; ++i)
|
||||
{
|
||||
String boss = longBossName(text[i]);
|
||||
double pb = Double.MAX_VALUE;
|
||||
|
||||
for (i = i + 1; i < text.length; ++i)
|
||||
{
|
||||
@@ -683,19 +682,35 @@ public class ChatCommandsPlugin extends Plugin
|
||||
break;
|
||||
}
|
||||
|
||||
// Some bosses have multiple pbs for each team size, just use the lowest
|
||||
Matcher matcher = ADVENTURE_LOG_PB_PATTERN.matcher(line);
|
||||
if (matcher.find())
|
||||
{
|
||||
double s = timeStringToSeconds(matcher.group("time"));
|
||||
pb = Math.min(pb, s);
|
||||
}
|
||||
}
|
||||
final double s = timeStringToSeconds(matcher.group("time"));
|
||||
String teamSize = matcher.group("teamsize");
|
||||
if (teamSize != null)
|
||||
{
|
||||
// 3 player -> 3 players
|
||||
// 1 player -> Solo
|
||||
// Solo -> Solo
|
||||
// 2 players -> 2 players
|
||||
if (teamSize.equals("1 player"))
|
||||
{
|
||||
teamSize = "Solo";
|
||||
}
|
||||
else if (teamSize.endsWith("player"))
|
||||
{
|
||||
teamSize = teamSize + "s";
|
||||
}
|
||||
|
||||
if (pb < Double.MAX_VALUE)
|
||||
{
|
||||
log.debug("Found adventure log PB for {}: {}", boss, pb);
|
||||
setPb(boss, pb);
|
||||
log.debug("Found team-size adventure log PB for {} {}: {}", boss, teamSize, s);
|
||||
setPb(boss + " " + teamSize, s);
|
||||
}
|
||||
else
|
||||
{
|
||||
log.debug("Found adventure log PB for {}: {}", boss, s);
|
||||
setPb(boss, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,7 +204,7 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
|
||||
new EmoteClue("Wave in the Falador gem store. Equip a Mithril pickaxe, Black platebody and an Iron Kiteshield.", "Falador", NEAR_HERQUINS_SHOP_IN_FALADOR, new WorldPoint(2945, 3335, 0), WAVE, item(MITHRIL_PICKAXE), item(BLACK_PLATEBODY), item(IRON_KITESHIELD)),
|
||||
new EmoteClue("Wave on Mudskipper Point. Equip a black cape, leather chaps and a steel mace.", "Mudskipper Point", MUDSKIPPER_POINT, new WorldPoint(2989, 3110, 0), WAVE, item(BLACK_CAPE), item(LEATHER_CHAPS), item(STEEL_MACE)),
|
||||
new EmoteClue("Wave on the northern wall of Castle Drakan. Beware of double agents! Wear a dragon sq shield, splitbark body and any boater.", "Castle Drakan", NORTHERN_WALL_OF_CASTLE_DRAKAN, new WorldPoint(3562, 3379, 0), DOUBLE_AGENT_141, WAVE, any("Dragon sq shield", item(DRAGON_SQ_SHIELD), item(DRAGON_SQ_SHIELD_G)), item(SPLITBARK_BODY), any("Any boater", item(RED_BOATER), item(ORANGE_BOATER), item(GREEN_BOATER), item(BLUE_BOATER), item(BLACK_BOATER), item(PINK_BOATER), item(PURPLE_BOATER), item(WHITE_BOATER))),
|
||||
new EmoteClue("Yawn in the 7th room of Pyramid Plunder. Beware of double agents! Equip a pharaoh sceptre and a full set of menaphite robes.", "Pyramid Plunder", _7TH_CHAMBER_OF_JALSAVRAH, new WorldPoint(1944, 4427, 0), DOUBLE_AGENT_141, YAWN, any("Pharaoh's sceptre", item(PHARAOHS_SCEPTRE), item(PHARAOHS_SCEPTRE_1), item(PHARAOHS_SCEPTRE_2), item(PHARAOHS_SCEPTRE_3), item(PHARAOHS_SCEPTRE_4), item(PHARAOHS_SCEPTRE_5), item(PHARAOHS_SCEPTRE_6), item(PHARAOHS_SCEPTRE_7), item(PHARAOHS_SCEPTRE_8)), any("Full set of menaphite robes", all(item(MENAPHITE_PURPLE_HAT), item(MENAPHITE_PURPLE_TOP), range(MENAPHITE_PURPLE_ROBE, MENAPHITE_PURPLE_KILT)), all(item(MENAPHITE_RED_HAT), item(MENAPHITE_RED_TOP), range(MENAPHITE_RED_ROBE, MENAPHITE_RED_KILT)))),
|
||||
new EmoteClue("Yawn in the 7th room of Pyramid Plunder. Beware of double agents! Equip a pharaoh sceptre and a full set of menaphite robes.", "Pyramid Plunder", _7TH_CHAMBER_OF_JALSAVRAH, new WorldPoint(1944, 4427, 0), DOUBLE_AGENT_141, YAWN, any("Pharaoh's sceptre", item(PHARAOHS_SCEPTRE), item(PHARAOHS_SCEPTRE), item(PHARAOHS_SCEPTRE_9045), item(PHARAOHS_SCEPTRE_9046), item(PHARAOHS_SCEPTRE_9047), item(PHARAOHS_SCEPTRE_9048), item(PHARAOHS_SCEPTRE_9049), item(PHARAOHS_SCEPTRE_9050), item(PHARAOHS_SCEPTRE_9051), item(PHARAOHS_SCEPTRE_13074), item(PHARAOHS_SCEPTRE_13075), item(PHARAOHS_SCEPTRE_13077), item(PHARAOHS_SCEPTRE_13078), item(PHARAOHS_SCEPTRE_16176), item(PHARAOHS_SCEPTRE_21445), item(PHARAOHS_SCEPTRE_21446), item(PHARAOHS_SCEPTRE_26948), item(PHARAOHS_SCEPTRE_26950)), any("Full set of menaphite robes", all(item(MENAPHITE_PURPLE_HAT), item(MENAPHITE_PURPLE_TOP), range(MENAPHITE_PURPLE_ROBE, MENAPHITE_PURPLE_KILT)), all(item(MENAPHITE_RED_HAT), item(MENAPHITE_RED_TOP), range(MENAPHITE_RED_ROBE, MENAPHITE_RED_KILT)))),
|
||||
new EmoteClue("Yawn in the Varrock library. Equip a green gnome robe top, HAM robe bottom and an iron warhammer.", "Varrock Castle", VARROCK_PALACE_LIBRARY, new WorldPoint(3209, 3492, 0), YAWN, item(GREEN_ROBE_TOP), item(HAM_ROBE), item(IRON_WARHAMMER)),
|
||||
new EmoteClue("Yawn in Draynor Marketplace. Equip studded leather chaps, an iron kiteshield and a steel longsword.", "Draynor", DRAYNOR_VILLAGE_MARKET, new WorldPoint(3083, 3253, 0), YAWN, item(STUDDED_CHAPS), item(IRON_KITESHIELD), item(STEEL_LONGSWORD)),
|
||||
new EmoteClue("Yawn in the Castle Wars lobby. Shrug before you talk to me. Equip a ruby amulet, a mithril scimitar and a Wilderness cape.", "Castle Wars", CASTLE_WARS_BANK, new WorldPoint(2440, 3092, 0), YAWN, SHRUG, item(RUBY_AMULET), item(MITHRIL_SCIMITAR), range("Any team cape", TEAM1_CAPE, TEAM50_CAPE)),
|
||||
|
||||
@@ -266,14 +266,6 @@ enum ItemWithCharge
|
||||
PASSAGE3(TELEPORT, NECKLACE_OF_PASSAGE3, 3),
|
||||
PASSAGE4(TELEPORT, NECKLACE_OF_PASSAGE4, 4),
|
||||
PASSAGE5(TELEPORT, NECKLACE_OF_PASSAGE5, 5),
|
||||
PHARAO1(TELEPORT, PHARAOHS_SCEPTRE_1, 1),
|
||||
PHARAO2(TELEPORT, PHARAOHS_SCEPTRE_2, 2),
|
||||
PHARAO3(TELEPORT, PHARAOHS_SCEPTRE_3, 3),
|
||||
PHARAO4(TELEPORT, PHARAOHS_SCEPTRE_4, 4),
|
||||
PHARAO5(TELEPORT, PHARAOHS_SCEPTRE_5, 5),
|
||||
PHARAO6(TELEPORT, PHARAOHS_SCEPTRE_6, 6),
|
||||
PHARAO7(TELEPORT, PHARAOHS_SCEPTRE_7, 7),
|
||||
PHARAO8(TELEPORT, PHARAOHS_SCEPTRE_8, 8),
|
||||
PRAYER1(POTION, PRAYER_POTION1, 1),
|
||||
PRAYER2(POTION, PRAYER_POTION2, 2),
|
||||
PRAYER3(POTION, PRAYER_POTION3, 3),
|
||||
|
||||
@@ -37,15 +37,9 @@ import lombok.Getter;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GameObject;
|
||||
import net.runelite.api.GameState;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE;
|
||||
import static net.runelite.api.NullObjectID.*;
|
||||
import static net.runelite.api.ObjectID.GRAND_GOLD_CHEST;
|
||||
import static net.runelite.api.ObjectID.SARCOPHAGUS_21255;
|
||||
import static net.runelite.api.ObjectID.SPEARTRAP_21280;
|
||||
import static net.runelite.api.ObjectID.TOMB_DOOR_20948;
|
||||
import static net.runelite.api.ObjectID.URN_21261;
|
||||
import static net.runelite.api.ObjectID.URN_21262;
|
||||
import static net.runelite.api.ObjectID.URN_21263;
|
||||
import net.runelite.api.ItemID;
|
||||
import net.runelite.api.NullObjectID;
|
||||
import net.runelite.api.ObjectID;
|
||||
import net.runelite.api.Tile;
|
||||
import net.runelite.api.TileObject;
|
||||
import net.runelite.api.Varbits;
|
||||
@@ -78,21 +72,21 @@ public class PyramidPlunderPlugin extends Plugin
|
||||
private static final Duration PYRAMID_PLUNDER_DURATION = Duration.of(501, RSTimeUnit.GAME_TICKS);
|
||||
private static final int PYRAMID_PLUNDER_REGION = 7749;
|
||||
|
||||
static final Set<Integer> TOMB_DOOR_WALL_IDS = ImmutableSet.of(NULL_26618, NULL_26619, NULL_26620, NULL_26621);
|
||||
static final int TOMB_DOOR_CLOSED_ID = TOMB_DOOR_20948;
|
||||
static final Set<Integer> TOMB_DOOR_WALL_IDS = ImmutableSet.of(NullObjectID.NULL_26618, NullObjectID.NULL_26619, NullObjectID.NULL_26620, NullObjectID.NULL_26621);
|
||||
static final int TOMB_DOOR_CLOSED_ID = ObjectID.TOMB_DOOR_20948;
|
||||
|
||||
static final int SPEARTRAP_ID = SPEARTRAP_21280;
|
||||
static final int SPEARTRAP_ID = ObjectID.SPEARTRAP;
|
||||
|
||||
static final Set<Integer> URN_IDS = ImmutableSet.of(NULL_26580, NULL_26600, NULL_26601, NULL_26602,
|
||||
NULL_26603, NULL_26604, NULL_26605, NULL_26606, NULL_26607, NULL_26608, NULL_26609, NULL_26610, NULL_26611,
|
||||
NULL_26612, NULL_26613);
|
||||
static final Set<Integer> URN_CLOSED_IDS = ImmutableSet.of(URN_21261, URN_21262, URN_21263);
|
||||
static final Set<Integer> URN_IDS = ImmutableSet.of(NullObjectID.NULL_26580, NullObjectID.NULL_26600, NullObjectID.NULL_26601, NullObjectID.NULL_26602,
|
||||
NullObjectID.NULL_26603, NullObjectID.NULL_26604, NullObjectID.NULL_26605, NullObjectID.NULL_26606, NullObjectID.NULL_26607, NullObjectID.NULL_26608,
|
||||
NullObjectID.NULL_26609, NullObjectID.NULL_26610, NullObjectID.NULL_26611, NullObjectID.NULL_26612, NullObjectID.NULL_26613);
|
||||
static final Set<Integer> URN_CLOSED_IDS = ImmutableSet.of(ObjectID.URN_21261, ObjectID.URN_21262, ObjectID.URN_21263);
|
||||
|
||||
static final int GRAND_GOLD_CHEST_ID = NULL_26616;
|
||||
static final int GRAND_GOLD_CHEST_CLOSED_ID = GRAND_GOLD_CHEST;
|
||||
static final int GRAND_GOLD_CHEST_ID = NullObjectID.NULL_26616;
|
||||
static final int GRAND_GOLD_CHEST_CLOSED_ID = ObjectID.GRAND_GOLD_CHEST;
|
||||
|
||||
static final int SARCOPHAGUS_ID = NULL_26626;
|
||||
static final int SARCOPHAGUS_CLOSED_ID = SARCOPHAGUS_21255;
|
||||
static final int SARCOPHAGUS_ID = NullObjectID.NULL_26626;
|
||||
static final int SARCOPHAGUS_CLOSED_ID = ObjectID.SARCOPHAGUS_21255;
|
||||
|
||||
@Inject
|
||||
private Client client;
|
||||
@@ -173,7 +167,7 @@ public class PyramidPlunderPlugin extends Plugin
|
||||
{
|
||||
int ppTimer = client.getVarbitValue(Varbits.PYRAMID_PLUNDER_TIMER);
|
||||
Duration remaining = PYRAMID_PLUNDER_DURATION.minus(ppTimer, RSTimeUnit.GAME_TICKS);
|
||||
timer = new PyramidPlunderTimer(remaining, itemManager.getImage(PHARAOHS_SCEPTRE), this,
|
||||
timer = new PyramidPlunderTimer(remaining, itemManager.getImage(ItemID.PHARAOHS_SCEPTRE), this,
|
||||
config, client);
|
||||
infoBoxManager.addInfoBox(timer);
|
||||
}
|
||||
|
||||
@@ -738,7 +738,8 @@
|
||||
],
|
||||
"stone tablet": [
|
||||
699,
|
||||
22991
|
||||
22991,
|
||||
26954
|
||||
],
|
||||
"mixed chemicals": [
|
||||
705,
|
||||
@@ -1394,7 +1395,9 @@
|
||||
25790,
|
||||
25791,
|
||||
25792,
|
||||
26566
|
||||
26566,
|
||||
26943,
|
||||
26944
|
||||
],
|
||||
"radimus notes": [
|
||||
714,
|
||||
@@ -1426,7 +1429,8 @@
|
||||
755,
|
||||
9633,
|
||||
9649,
|
||||
22475
|
||||
22475,
|
||||
26942
|
||||
],
|
||||
"book": [
|
||||
757,
|
||||
@@ -2490,7 +2494,8 @@
|
||||
11027,
|
||||
11028,
|
||||
11029,
|
||||
11030
|
||||
11030,
|
||||
26926
|
||||
],
|
||||
"banana": [
|
||||
1963,
|
||||
@@ -2508,7 +2513,12 @@
|
||||
24994,
|
||||
24996,
|
||||
26417,
|
||||
26419
|
||||
26419,
|
||||
26971,
|
||||
26973,
|
||||
26975,
|
||||
26977,
|
||||
26979
|
||||
],
|
||||
"empty cup": [
|
||||
1980,
|
||||
@@ -3326,10 +3336,6 @@
|
||||
3716,
|
||||
3743
|
||||
],
|
||||
"full bucket": [
|
||||
3722,
|
||||
4693
|
||||
],
|
||||
"sealed vase": [
|
||||
3738,
|
||||
3739,
|
||||
@@ -5010,6 +5016,10 @@
|
||||
10485,
|
||||
10512
|
||||
],
|
||||
"chest": [
|
||||
6759,
|
||||
26955
|
||||
],
|
||||
"rat pole": [
|
||||
6773,
|
||||
6774,
|
||||
@@ -6381,14 +6391,24 @@
|
||||
],
|
||||
"pharaohs sceptre": [
|
||||
9044,
|
||||
9045,
|
||||
9046,
|
||||
9047,
|
||||
9048,
|
||||
9049,
|
||||
9050,
|
||||
9051,
|
||||
13074,
|
||||
13075,
|
||||
13076,
|
||||
13077,
|
||||
13078
|
||||
13078,
|
||||
16176,
|
||||
21445,
|
||||
21446,
|
||||
26945,
|
||||
26948,
|
||||
26950
|
||||
],
|
||||
"emerald lantern": [
|
||||
9064,
|
||||
@@ -10387,6 +10407,10 @@
|
||||
26256,
|
||||
26258
|
||||
],
|
||||
"magical cleaning potion": [
|
||||
26278,
|
||||
26924
|
||||
],
|
||||
"secret santa present": [
|
||||
26298,
|
||||
26300,
|
||||
@@ -10625,5 +10649,17 @@
|
||||
26896,
|
||||
26897,
|
||||
26898
|
||||
],
|
||||
"vat": [
|
||||
26932,
|
||||
26933
|
||||
],
|
||||
"scarab emblem": [
|
||||
26953,
|
||||
26956
|
||||
],
|
||||
"circlet of water": [
|
||||
26967,
|
||||
26969
|
||||
]
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
3FA5FFC8DB18A42971CED41A9BC7CEA407A0EC98061D56B2822F66CD910E4BAF
|
||||
7295A7B0C6DEBDBAB737A307974DAEF4AFD7DBD011B30AC45D2972FE75C54868
|
||||
@@ -1,21 +1,21 @@
|
||||
.id 3238
|
||||
.int_stack_count 4
|
||||
.int_stack_count 5
|
||||
.string_stack_count 0
|
||||
.int_var_count 5 ; +1 for filter result
|
||||
.int_var_count 6 ; +1 for filter result
|
||||
.string_var_count 0
|
||||
iconst -1 ; set to 1 to hide, 0 to show
|
||||
iconst -1 ; set to 1 to hide, 0 to show
|
||||
iload 0 ; quest struct
|
||||
sconst "questFilter"
|
||||
runelite_callback
|
||||
runelite_callback
|
||||
pop_int ; quest struct
|
||||
istore 4 ; save result
|
||||
istore 5 ; save result
|
||||
; compare with -1
|
||||
iload 4 ; load result
|
||||
iconst -1
|
||||
iload 5 ; load result
|
||||
iconst -1
|
||||
if_icmpeq continue
|
||||
; return value
|
||||
iload 4
|
||||
return
|
||||
iload 5
|
||||
return
|
||||
|
||||
continue:
|
||||
iload 0
|
||||
@@ -48,12 +48,12 @@ LABEL22:
|
||||
iconst 1
|
||||
return
|
||||
LABEL24:
|
||||
iload 1
|
||||
iconst 0
|
||||
iload 4
|
||||
iconst 1
|
||||
if_icmpeq LABEL28
|
||||
jump LABEL34
|
||||
LABEL28:
|
||||
get_varbit 13775
|
||||
get_varbit 13890
|
||||
iconst 1
|
||||
if_icmpeq LABEL32
|
||||
jump LABEL34
|
||||
@@ -62,11 +62,11 @@ LABEL32:
|
||||
return
|
||||
LABEL34:
|
||||
iload 1
|
||||
iconst 1
|
||||
iconst 0
|
||||
if_icmpeq LABEL38
|
||||
jump LABEL44
|
||||
LABEL38:
|
||||
get_varbit 13776
|
||||
get_varbit 13775
|
||||
iconst 1
|
||||
if_icmpeq LABEL42
|
||||
jump LABEL44
|
||||
@@ -75,11 +75,11 @@ LABEL42:
|
||||
return
|
||||
LABEL44:
|
||||
iload 1
|
||||
iconst 2
|
||||
iconst 1
|
||||
if_icmpeq LABEL48
|
||||
jump LABEL54
|
||||
LABEL48:
|
||||
get_varbit 13777
|
||||
get_varbit 13776
|
||||
iconst 1
|
||||
if_icmpeq LABEL52
|
||||
jump LABEL54
|
||||
@@ -88,41 +88,54 @@ LABEL52:
|
||||
return
|
||||
LABEL54:
|
||||
iload 1
|
||||
iconst 1
|
||||
if_icmpeq LABEL58
|
||||
jump LABEL68
|
||||
LABEL58:
|
||||
get_varbit 13778
|
||||
iconst 2
|
||||
if_icmpeq LABEL58
|
||||
jump LABEL64
|
||||
LABEL58:
|
||||
get_varbit 13777
|
||||
iconst 1
|
||||
if_icmpeq LABEL62
|
||||
jump LABEL68
|
||||
jump LABEL64
|
||||
LABEL62:
|
||||
iload 2
|
||||
iconst 0
|
||||
if_icmpeq LABEL66
|
||||
jump LABEL68
|
||||
LABEL66:
|
||||
iconst 1
|
||||
return
|
||||
LABEL68:
|
||||
LABEL64:
|
||||
iload 1
|
||||
iconst 1
|
||||
if_icmpeq LABEL72
|
||||
jump LABEL82
|
||||
LABEL72:
|
||||
get_varbit 13779
|
||||
if_icmpeq LABEL68
|
||||
jump LABEL78
|
||||
LABEL68:
|
||||
get_varbit 13778
|
||||
iconst 2
|
||||
if_icmpeq LABEL76
|
||||
jump LABEL82
|
||||
LABEL76:
|
||||
iload 3
|
||||
if_icmpeq LABEL72
|
||||
jump LABEL78
|
||||
LABEL72:
|
||||
iload 2
|
||||
iconst 0
|
||||
if_icmpeq LABEL80
|
||||
jump LABEL82
|
||||
LABEL80:
|
||||
if_icmpeq LABEL76
|
||||
jump LABEL78
|
||||
LABEL76:
|
||||
iconst 1
|
||||
return
|
||||
LABEL78:
|
||||
iload 1
|
||||
iconst 1
|
||||
if_icmpeq LABEL82
|
||||
jump LABEL92
|
||||
LABEL82:
|
||||
get_varbit 13779
|
||||
iconst 2
|
||||
if_icmpeq LABEL86
|
||||
jump LABEL92
|
||||
LABEL86:
|
||||
iload 3
|
||||
iconst 0
|
||||
if_icmpeq LABEL90
|
||||
jump LABEL92
|
||||
LABEL90:
|
||||
iconst 1
|
||||
return
|
||||
LABEL92:
|
||||
iconst 0
|
||||
return
|
||||
iconst -1
|
||||
|
||||
@@ -0,0 +1,345 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Ron Young <https://github.com/raiyni>
|
||||
* 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.game;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import static net.runelite.api.ItemID.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class ItemVariationMappingTest
|
||||
{
|
||||
private static final Map<Integer, Integer> ITEMS_MAP = new LinkedHashMap<Integer, Integer>()
|
||||
{{
|
||||
put(_12_ANCHOVY_PIZZA, ANCHOVY_PIZZA);
|
||||
put(_12_MEAT_PIZZA, MEAT_PIZZA);
|
||||
put(_12_PINEAPPLE_PIZZA, PINEAPPLE_PIZZA);
|
||||
put(_12_PLAIN_PIZZA, PLAIN_PIZZA);
|
||||
put(ADAMANT_PLATELEGS_T, ADAMANT_PLATELEGS);
|
||||
put(ADAMANT_PLATESKIRT_T, ADAMANT_PLATESKIRT);
|
||||
put(AGILITY_CAPET, AGILITY_CAPE);
|
||||
put(AGILITY_MIX1, AGILITY_MIX2);
|
||||
put(AGILITY_MIX2, AGILITY_MIX2);
|
||||
put(AHRIMS_ROBETOP_100, AHRIMS_ROBETOP);
|
||||
put(AHRIMS_ROBETOP_25, AHRIMS_ROBETOP);
|
||||
put(AHRIMS_ROBETOP_50, AHRIMS_ROBETOP);
|
||||
put(AHRIMS_ROBETOP_75, AHRIMS_ROBETOP);
|
||||
put(AHRIMS_STAFF_0, AHRIMS_STAFF);
|
||||
put(AMULET_OF_GLORY5, AMULET_OF_GLORY);
|
||||
put(AMULET_OF_GLORY6, AMULET_OF_GLORY);
|
||||
put(AMULET_OF_MAGIC_T, AMULET_OF_MAGIC);
|
||||
put(ANCIENT_PAGE_1, ANCIENT_PAGE);
|
||||
put(ANCIENT_PAGE_2, ANCIENT_PAGE);
|
||||
put(ANTIDOTE2, ANTIDOTE_UNF);
|
||||
put(ANTIDOTE3, ANTIDOTE_UNF);
|
||||
put(ANTIDOTE4, ANTIDOTE_UNF);
|
||||
put(ANTIDOTE1_5958, ANTIDOTE_UNF);
|
||||
put(ANTIDOTE2_5956, ANTIDOTE_UNF);
|
||||
put(APPLES2, APPLES1);
|
||||
put(APPLES3, APPLES1);
|
||||
put(APPLES4, APPLES1);
|
||||
put(APPLES5, APPLES1);
|
||||
put(ARCHERS_RING_I, ARCHERS_RING);
|
||||
put(ASGARNIAN_ALEM4, ASGARNIAN_ALE);
|
||||
put(ATTACK_CAPET, ATTACK_CAPE);
|
||||
put(ATTACK_MIX1, ATTACK_MIX2);
|
||||
put(ATTACK_MIX2, ATTACK_MIX2);
|
||||
put(ATTACK_POTION1, ATTACK_POTION3);
|
||||
put(BANANAS2, BANANAS1);
|
||||
put(BANANAS3, BANANAS1);
|
||||
put(BANANAS4, BANANAS1);
|
||||
put(BANANAS5, BANANAS1);
|
||||
put(BANDOS_PAGE_1, BANDOS_PAGE_1);
|
||||
put(BLACK_KITESHIELD_T, BLACK_KITESHIELD);
|
||||
put(BLACK_MASK_1, BLACK_MASK_10);
|
||||
put(BLACK_MASK_2, BLACK_MASK_10);
|
||||
put(BLACK_MASK_3, BLACK_MASK_10);
|
||||
put(BLACK_MASK_4, BLACK_MASK_10);
|
||||
put(BLUE_SKIRT_T, BLUE_SKIRT);
|
||||
put(BLUE_WIZARD_HAT_T, BLUE_WIZARD_HAT);
|
||||
put(BLUE_WIZARD_ROBE_T, BLUE_WIZARD_ROBE);
|
||||
put(BOOK_PAGE_1, BOOK_PAGE_1);
|
||||
put(BOOK_PAGE_2, BOOK_PAGE_1);
|
||||
put(BROODOO_SHIELD_9, BROODOO_SHIELD_10);
|
||||
put(BROWN_SPICE_1, BROWN_SPICE_4);
|
||||
put(BROWN_SPICE_2, BROWN_SPICE_4);
|
||||
put(BROWN_SPICE_3, BROWN_SPICE_4);
|
||||
put(BROWN_SPICE_4, BROWN_SPICE_4);
|
||||
put(CASKET_ELITE, CASKET);
|
||||
put(CASKET_HARD, CASKET);
|
||||
put(CASKET_MEDIUM, CASKET);
|
||||
put(CASTLE_SKETCH_1, CASTLE_SKETCH_1);
|
||||
put(CASTLE_SKETCH_2, CASTLE_SKETCH_1);
|
||||
put(CHEFS_DELIGHTM2, CHEFS_DELIGHT);
|
||||
put(CHEFS_DELIGHTM3, CHEFS_DELIGHT);
|
||||
put(CHEFS_DELIGHTM4, CHEFS_DELIGHT);
|
||||
put(CIDER1, CIDER);
|
||||
put(CIDER2, CIDER);
|
||||
put(CLUE_NEST_ELITE, CLUE_NEST_EASY);
|
||||
put(CLUE_NEST_HARD, CLUE_NEST_EASY);
|
||||
put(CLUE_NEST_MEDIUM, CLUE_NEST_EASY);
|
||||
put(CLUE_SCROLL_EASY, CLUE_SCROLL);
|
||||
put(CLUE_SCROLL_ELITE, CLUE_SCROLL);
|
||||
put(COMMORB_V2, COMMORB_V2);
|
||||
put(COMPOST_POTION1, COMPOST_POTION4);
|
||||
put(COMPOST_POTION2, COMPOST_POTION4);
|
||||
put(COMPOST_POTION3, COMPOST_POTION4);
|
||||
put(COMPOST_POTION4, COMPOST_POTION4);
|
||||
put(CRYSTAL_BOW_510_I, NEW_CRYSTAL_BOW);
|
||||
put(CRYSTAL_BOW_510, NEW_CRYSTAL_BOW);
|
||||
put(CRYSTAL_BOW_610_I, NEW_CRYSTAL_BOW);
|
||||
put(CRYSTAL_BOW_610, NEW_CRYSTAL_BOW);
|
||||
put(CRYSTAL_BOW_710_I, NEW_CRYSTAL_BOW);
|
||||
put(CRYSTAL_HALBERD_510_I, NEW_CRYSTAL_HALBERD_FULL_I);
|
||||
put(CRYSTAL_HALBERD_510, NEW_CRYSTAL_HALBERD_FULL_I);
|
||||
put(CRYSTAL_HALBERD_610_I, NEW_CRYSTAL_HALBERD_FULL_I);
|
||||
put(CRYSTAL_HALBERD_610, NEW_CRYSTAL_HALBERD_FULL_I);
|
||||
put(CRYSTAL_HALBERD_710_I, NEW_CRYSTAL_HALBERD_FULL_I);
|
||||
put(CRYSTAL_SHIELD_510_I, NEW_CRYSTAL_SHIELD);
|
||||
put(CRYSTAL_SHIELD_510, NEW_CRYSTAL_SHIELD);
|
||||
put(CRYSTAL_SHIELD_610_I, NEW_CRYSTAL_SHIELD);
|
||||
put(CRYSTAL_SHIELD_610, NEW_CRYSTAL_SHIELD);
|
||||
put(CRYSTAL_SHIELD_710_I, NEW_CRYSTAL_SHIELD);
|
||||
put(DEFENCE_POTION2, DEFENCE_POTION3);
|
||||
put(DEFENCE_POTION3, DEFENCE_POTION3);
|
||||
put(DEFENCE_POTION4, DEFENCE_POTION3);
|
||||
put(DESERT_AMULET_1, DESERT_AMULET);
|
||||
put(DESERT_AMULET_2, DESERT_AMULET);
|
||||
put(DHAROKS_PLATEBODY_50, DHAROKS_PLATEBODY);
|
||||
put(DHAROKS_PLATEBODY_75, DHAROKS_PLATEBODY);
|
||||
put(DHAROKS_PLATELEGS_0, DHAROKS_PLATELEGS);
|
||||
put(DHAROKS_PLATELEGS_100, DHAROKS_PLATELEGS);
|
||||
put(DHAROKS_PLATELEGS_25, DHAROKS_PLATELEGS);
|
||||
put(DRAGON_BITTERM3, DRAGON_BITTER);
|
||||
put(DRAGON_BITTERM4, DRAGON_BITTER);
|
||||
put(DRAGON_DEFENDER_T, DRAGON_DEFENDER);
|
||||
put(DRAGONSTONE_BOLTS, DRAGONSTONE_BOLTS_E);
|
||||
put(DRAGONSTONE_DRAGON_BOLTS, DRAGONSTONE_DRAGON_BOLTS_E);
|
||||
put(ENCHANTED_LYRE2, ENCHANTED_LYRE);
|
||||
put(ENCHANTED_LYRE3, ENCHANTED_LYRE);
|
||||
put(ENCHANTED_LYRE4, ENCHANTED_LYRE);
|
||||
put(ENCHANTED_LYRE5, ENCHANTED_LYRE);
|
||||
put(ENERGY_MIX1, ENERGY_MIX2);
|
||||
put(EXTENDED_SUPER_ANTIFIRE_MIX1, EXTENDED_SUPER_ANTIFIRE_MIX2);
|
||||
put(EXTENDED_SUPER_ANTIFIRE_MIX2, EXTENDED_SUPER_ANTIFIRE_MIX2);
|
||||
put(EXTENDED_SUPER_ANTIFIRE1, EXTENDED_SUPER_ANTIFIRE4);
|
||||
put(EXTENDED_SUPER_ANTIFIRE2, EXTENDED_SUPER_ANTIFIRE4);
|
||||
put(EXTENDED_SUPER_ANTIFIRE3, EXTENDED_SUPER_ANTIFIRE4);
|
||||
put(FRAGMENT_1, FRAGMENT_1);
|
||||
put(FRAGMENT_2, FRAGMENT_1);
|
||||
put(FRAGMENT_3, FRAGMENT_1);
|
||||
put(FREMENNIK_SEA_BOOTS_1, FREMENNIK_SEA_BOOTS);
|
||||
put(FREMENNIK_SEA_BOOTS_2, FREMENNIK_SEA_BOOTS);
|
||||
put(GAMES_NECKLACE3, GAMES_NECKLACE8);
|
||||
put(GAMES_NECKLACE4, GAMES_NECKLACE8);
|
||||
put(GAMES_NECKLACE5, GAMES_NECKLACE8);
|
||||
put(GAMES_NECKLACE6, GAMES_NECKLACE8);
|
||||
put(GAMES_NECKLACE7, GAMES_NECKLACE8);
|
||||
put(GREENMANS_ALE4, GREENMANS_ALE);
|
||||
put(GREENMANS_ALEM1, GREENMANS_ALE);
|
||||
put(GREENMANS_ALEM2, GREENMANS_ALE);
|
||||
put(GREENMANS_ALEM3, GREENMANS_ALE);
|
||||
put(GREENMANS_ALEM4, GREENMANS_ALE);
|
||||
put(GUTHANS_PLATEBODY_75, GUTHANS_PLATEBODY);
|
||||
put(GUTHANS_WARSPEAR_0, GUTHANS_WARSPEAR);
|
||||
put(GUTHANS_WARSPEAR_100, GUTHANS_WARSPEAR);
|
||||
put(GUTHANS_WARSPEAR_25, GUTHANS_WARSPEAR);
|
||||
put(GUTHANS_WARSPEAR_50, GUTHANS_WARSPEAR);
|
||||
put(HALF_A_GARDEN_PIE, PART_GARDEN_PIE);
|
||||
put(HALF_A_MEAT_PIE, MEAT_PIE);
|
||||
put(MUSHROOM_PIE, HALF_A_MUSHROOM_PIE);
|
||||
put(HALF_A_REDBERRY_PIE, REDBERRY_PIE);
|
||||
put(HALF_A_ROCK, ROCK);
|
||||
put(HUNTING_MIX1, HUNTING_MIX2);
|
||||
put(HUNTING_MIX2, HUNTING_MIX2);
|
||||
put(IMPINABOX1, IMPINABOX2);
|
||||
put(IMPINABOX2, IMPINABOX2);
|
||||
put(IRON_FULL_HELM_T, IRON_FULL_HELM);
|
||||
put(KARILS_COIF_100, KARILS_COIF);
|
||||
put(KARILS_COIF_25, KARILS_COIF);
|
||||
put(KARILS_COIF_50, KARILS_COIF);
|
||||
put(KARILS_COIF_75, KARILS_COIF);
|
||||
put(KARILS_CROSSBOW_0, KARILS_CROSSBOW);
|
||||
put(KEY_MEDIUM, KEY);
|
||||
put(KODAI_POTION_1, KODAI_POTION_1);
|
||||
put(KODAI_POTION_2, KODAI_POTION_1);
|
||||
put(KODAI_POTION_3, KODAI_POTION_1);
|
||||
put(KODAI_POTION_4, KODAI_POTION_1);
|
||||
put(MAGIC_POTION1, MAGIC_POTION4);
|
||||
put(MAGIC_POTION2, MAGIC_POTION4);
|
||||
put(MAGIC_POTION3, MAGIC_POTION4);
|
||||
put(MAGIC_POTION4, MAGIC_POTION4);
|
||||
put(MAGIC_SHORTBOW_I, MAGIC_SHORTBOW_U);
|
||||
put(MITHRIL_FULL_HELM_T, MITHRIL_FULL_HELM);
|
||||
put(MITHRIL_KITESHIELD_T, MITHRIL_KITESHIELD);
|
||||
put(MITHRIL_PLATEBODY_T, MITHRIL_PLATEBODY);
|
||||
put(MITHRIL_PLATELEGS_T, MITHRIL_PLATELEGS);
|
||||
put(MITHRIL_PLATESKIRT_T, MITHRIL_PLATESKIRT);
|
||||
put(NECKLACE_OF_PASSAGE1, NECKLACE_OF_PASSAGE5);
|
||||
put(NECKLACE_OF_PASSAGE2, NECKLACE_OF_PASSAGE5);
|
||||
put(NECKLACE_OF_PASSAGE3, NECKLACE_OF_PASSAGE5);
|
||||
put(NECKLACE_OF_PASSAGE4, NECKLACE_OF_PASSAGE5);
|
||||
put(NECKLACE_OF_PASSAGE5, NECKLACE_OF_PASSAGE5);
|
||||
put(OLIVE_OIL4, OLIVE_OIL4);
|
||||
put(ONIONS1, ONIONS1);
|
||||
put(ONIONS2, ONIONS1);
|
||||
put(ONIONS3, ONIONS1);
|
||||
put(ONIONS4, ONIONS1);
|
||||
put(ORANGES3, ORANGES1);
|
||||
put(ORANGES4, ORANGES1);
|
||||
put(ORANGES5, ORANGES1);
|
||||
put(OVERLOAD_1, OVERLOAD_4);
|
||||
put(OVERLOAD_2, OVERLOAD_4);
|
||||
put(PRAEL_BAT_1, PRAEL_BAT_1);
|
||||
put(PRAYER_CAPET, PRAYER_CAPE);
|
||||
put(PRAYER_ENHANCE_1_20965, PRAYER_ENHANCE_1);
|
||||
put(PRAYER_ENHANCE_2_20966, PRAYER_ENHANCE_1);
|
||||
put(PRAYER_ENHANCE_3_20967, PRAYER_ENHANCE_1);
|
||||
put(RANGING_MIX1, RANGING_MIX2);
|
||||
put(RANGING_MIX2, RANGING_MIX2);
|
||||
put(RANGING_POTION1, RANGING_POTION3);
|
||||
put(RANGING_POTION2, RANGING_POTION3);
|
||||
put(RANGING_POTION3, RANGING_POTION3);
|
||||
put(RED_DHIDE_BODY_T, RED_DHIDE_BODY);
|
||||
put(RED_DHIDE_CHAPS_T, RED_DHIDE_CHAPS);
|
||||
put(RED_SLAYER_HELMET_I, SLAYER_HELMET);
|
||||
put(RED_SPICE_1, RED_SPICE_4);
|
||||
put(RED_SPICE_2, RED_SPICE_4);
|
||||
put(RESTORE_MIX1, RESTORE_MIX2);
|
||||
put(RESTORE_MIX2, RESTORE_MIX2);
|
||||
put(RESTORE_POTION1, RESTORE_POTION3);
|
||||
put(RESTORE_POTION2, RESTORE_POTION3);
|
||||
put(RESTORE_POTION3, RESTORE_POTION3);
|
||||
put(RING_OF_DUELING5, RING_OF_DUELING8);
|
||||
put(RING_OF_DUELING6, RING_OF_DUELING8);
|
||||
put(RING_OF_DUELING7, RING_OF_DUELING8);
|
||||
put(RING_OF_DUELING8, RING_OF_DUELING8);
|
||||
put(RING_OF_RETURNING1, RING_OF_RETURNING5);
|
||||
put(ROD_OF_IVANDIS_4, ROD_OF_IVANDIS_10);
|
||||
put(ROD_OF_IVANDIS_5, ROD_OF_IVANDIS_10);
|
||||
put(ROD_OF_IVANDIS_6, ROD_OF_IVANDIS_10);
|
||||
put(ROD_OF_IVANDIS_7, ROD_OF_IVANDIS_10);
|
||||
put(ROD_OF_IVANDIS_8, ROD_OF_IVANDIS_10);
|
||||
put(SACRED_OIL3, SACRED_OIL4);
|
||||
put(SACRED_OIL4, SACRED_OIL4);
|
||||
put(SALVE_AMULET_E, SALVE_AMULET);
|
||||
put(SALVE_AMULETI, SALVE_AMULET);
|
||||
put(SANDSTONE_1KG, SANDSTONE_1KG);
|
||||
put(SARADOMIN_PAGE_4, SARADOMIN_PAGE_1);
|
||||
put(SEERS_RING_I, SEERS_RING);
|
||||
put(SHAYZIEN_BOOTS_1, SHAYZIEN_BOOTS_1);
|
||||
put(SHAYZIEN_BOOTS_2, SHAYZIEN_BOOTS_1);
|
||||
put(SHAYZIEN_BOOTS_3, SHAYZIEN_BOOTS_1);
|
||||
put(SHAYZIEN_HELM_4, SHAYZIEN_HELM_1);
|
||||
put(SHAYZIEN_HELM_5, SHAYZIEN_HELM_1);
|
||||
put(SHAYZIEN_PLATEBODY_1, SHAYZIEN_PLATEBODY_1);
|
||||
put(SHAYZIEN_PLATEBODY_2, SHAYZIEN_PLATEBODY_1);
|
||||
put(SHAYZIEN_PLATEBODY_3, SHAYZIEN_PLATEBODY_1);
|
||||
put(SHAYZIEN_SUPPLY_GREAVES_4, SHAYZIEN_SUPPLY_GREAVES_1);
|
||||
put(SHAYZIEN_SUPPLY_GREAVES_5, SHAYZIEN_SUPPLY_GREAVES_1);
|
||||
put(SHAYZIEN_SUPPLY_HELM_1, SHAYZIEN_SUPPLY_HELM_1);
|
||||
put(SHAYZIEN_SUPPLY_HELM_2, SHAYZIEN_SUPPLY_HELM_1);
|
||||
put(SHAYZIEN_SUPPLY_HELM_3, SHAYZIEN_SUPPLY_HELM_1);
|
||||
put(SHEEP_BONES_4, SHEEP_BONES_1);
|
||||
put(SINHAZA_SHROUD_TIER_1, SINHAZA_SHROUD_TIER_1);
|
||||
put(SINHAZA_SHROUD_TIER_2, SINHAZA_SHROUD_TIER_1);
|
||||
put(SINHAZA_SHROUD_TIER_3, SINHAZA_SHROUD_TIER_1);
|
||||
put(SINHAZA_SHROUD_TIER_4, SINHAZA_SHROUD_TIER_1);
|
||||
put(SLAYER_RING_6, SLAYER_RING_8);
|
||||
put(SLAYER_RING_7, SLAYER_RING_8);
|
||||
put(SLAYER_RING_8, SLAYER_RING_8);
|
||||
put(SLAYER_RING_ETERNAL, SLAYER_RING_8);
|
||||
put(SLAYERS_RESPITE1, SLAYERS_RESPITE);
|
||||
put(STAMINA_POTION4, STAMINA_POTION4);
|
||||
put(STASH_UNITS_EASY, STASH_UNITS_EASY);
|
||||
put(STASH_UNITS_ELITE, STASH_UNITS_EASY);
|
||||
put(STASH_UNITS_HARD, STASH_UNITS_EASY);
|
||||
put(STASH_UNITS_MASTER, STASH_UNITS_EASY);
|
||||
put(STRENGTH_POTION1, STRENGTH_POTION4);
|
||||
put(STRENGTH_POTION2, STRENGTH_POTION4);
|
||||
put(STRENGTH_POTION3, STRENGTH_POTION4);
|
||||
put(STRENGTH_POTION4, STRENGTH_POTION4);
|
||||
put(STUDDED_BODY_T, STUDDED_BODY);
|
||||
put(SUPER_DEF_MIX1, SUPER_DEF_MIX2);
|
||||
put(SUPER_DEF_MIX2, SUPER_DEF_MIX2);
|
||||
put(SUPER_DEFENCE1, SUPER_DEFENCE3);
|
||||
put(SUPER_DEFENCE2, SUPER_DEFENCE3);
|
||||
put(SUPER_DEFENCE3, SUPER_DEFENCE3);
|
||||
put(SUPER_RESTORE_MIX1, SUPER_RESTORE_MIX2);
|
||||
put(SUPER_RESTORE_MIX2, SUPER_RESTORE_MIX2);
|
||||
put(SUPER_RESTORE1, SUPER_RESTORE4);
|
||||
put(SUPER_RESTORE2, SUPER_RESTORE4);
|
||||
put(SUPER_RESTORE3, SUPER_RESTORE4);
|
||||
put(TEAK_SHELVES_2, TEAK_SHELVES_1);
|
||||
put(TELEPORT_CRYSTAL_1, TELEPORT_CRYSTAL_4);
|
||||
put(TELEPORT_CRYSTAL_2, TELEPORT_CRYSTAL_4);
|
||||
put(TELEPORT_CRYSTAL_3, TELEPORT_CRYSTAL_4);
|
||||
put(TELEPORT_CRYSTAL_4, TELEPORT_CRYSTAL_4);
|
||||
put(TOPAZ_BOLTS, TOPAZ_BOLTS_E);
|
||||
put(TOPAZ_DRAGON_BOLTS, TOPAZ_DRAGON_BOLTS_E);
|
||||
put(TORAGS_HAMMERS_0, TORAGS_HAMMERS);
|
||||
put(TORAGS_HAMMERS_100, TORAGS_HAMMERS);
|
||||
put(TORAGS_HAMMERS_25, TORAGS_HAMMERS);
|
||||
put(TORAGS_PLATELEGS_50, TORAGS_PLATELEGS);
|
||||
put(TORAGS_PLATELEGS_75, TORAGS_PLATELEGS);
|
||||
put(TREASONOUS_RING_I, TREASONOUS_RING);
|
||||
put(TRIDENT_OF_THE_SEAS_E, TRIDENT_OF_THE_SEAS_FULL);
|
||||
put(TRIDENT_OF_THE_SWAMP_E, TRIDENT_OF_THE_SWAMP);
|
||||
put(VERACS_BRASSARD_50, VERACS_BRASSARD);
|
||||
put(VERACS_BRASSARD_75, VERACS_BRASSARD);
|
||||
put(VERACS_FLAIL_0, VERACS_FLAIL);
|
||||
put(VERACS_FLAIL_100, VERACS_FLAIL);
|
||||
put(VERACS_FLAIL_25, VERACS_FLAIL);
|
||||
put(VOID_SEAL1, VOID_SEAL8);
|
||||
put(VOID_SEAL2, VOID_SEAL8);
|
||||
put(VOID_SEAL3, VOID_SEAL8);
|
||||
put(VOID_SEAL4, VOID_SEAL8);
|
||||
put(VOID_SEAL5, VOID_SEAL8);
|
||||
put(WATERSKIN3, WATERSKIN4);
|
||||
put(WATERSKIN4, WATERSKIN4);
|
||||
put(WESTERN_BANNER_1, WESTERN_BANNER);
|
||||
put(WESTERN_BANNER_2, WESTERN_BANNER);
|
||||
put(WESTERN_BANNER_3, WESTERN_BANNER);
|
||||
put(YELLOW_SPICE_2, YELLOW_SPICE_4);
|
||||
put(YELLOW_SPICE_3, YELLOW_SPICE_4);
|
||||
put(YELLOW_SPICE_4, YELLOW_SPICE_4);
|
||||
put(ZAMORAK_BREW1, ZAMORAK_BREW3);
|
||||
put(ZAMORAK_BREW2, ZAMORAK_BREW3);
|
||||
}};
|
||||
|
||||
@Test
|
||||
public void testMappedNames()
|
||||
{
|
||||
ITEMS_MAP.forEach((key, value) ->
|
||||
{
|
||||
assertEquals(value, (Integer) ItemVariationMapping.map(key));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Ron Young <https://github.com/raiyni>
|
||||
* Copyright (c) 2019, Adam <Adam@sigterm.info>
|
||||
* 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.bank;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.testing.fieldbinder.Bind;
|
||||
import com.google.inject.testing.fieldbinder.BoundFieldModule;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.InventoryID;
|
||||
import net.runelite.api.Item;
|
||||
import net.runelite.api.ItemComposition;
|
||||
import net.runelite.api.ItemContainer;
|
||||
import net.runelite.api.ItemID;
|
||||
import net.runelite.client.game.ItemManager;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class BankPluginTest
|
||||
{
|
||||
@Mock
|
||||
@Bind
|
||||
private Client client;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
private ItemManager itemManager;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
private BankConfig bankConfig;
|
||||
|
||||
@Inject
|
||||
private BankPlugin bankPlugin;
|
||||
|
||||
@Before
|
||||
public void before()
|
||||
{
|
||||
Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValueSearch()
|
||||
{
|
||||
int itemId = ItemID.ABYSSAL_WHIP;
|
||||
|
||||
ItemContainer itemContainer = mock(ItemContainer.class);
|
||||
when(itemContainer.getItems()).thenReturn(new Item[]{new Item(itemId, 30)});
|
||||
when(client.getItemContainer(InventoryID.BANK)).thenReturn(itemContainer);
|
||||
|
||||
ItemComposition comp = mock(ItemComposition.class);
|
||||
|
||||
// 60k HA price * 30 = 1.8m
|
||||
when(comp.getHaPrice())
|
||||
.thenReturn(60_000);
|
||||
|
||||
// 400k GE Price * 30 = 12m
|
||||
when(itemManager.getItemPrice(itemId))
|
||||
.thenReturn(400_000);
|
||||
when(itemManager.getItemComposition(itemId))
|
||||
.thenReturn(comp);
|
||||
|
||||
assertTrue(bankPlugin.valueSearch(itemId, ">500k"));
|
||||
assertTrue(bankPlugin.valueSearch(itemId, "< 5.5b"));
|
||||
assertTrue(bankPlugin.valueSearch(itemId, "500k - 20.6m"));
|
||||
|
||||
assertTrue(bankPlugin.valueSearch(itemId, "ha=1.8m"));
|
||||
assertTrue(bankPlugin.valueSearch(itemId, "ha 500k - 20.6m"));
|
||||
assertTrue(bankPlugin.valueSearch(itemId, "ha > 940k"));
|
||||
|
||||
assertTrue(bankPlugin.valueSearch(itemId, "qty=0"));
|
||||
assertTrue(bankPlugin.valueSearch(itemId, "qty<600"));
|
||||
|
||||
assertFalse(bankPlugin.valueSearch(itemId, "<500k"));
|
||||
assertFalse(bankPlugin.valueSearch(itemId, "ha >2m"));
|
||||
assertFalse(bankPlugin.valueSearch(itemId, "ge > 0.02b"));
|
||||
|
||||
assertFalse(bankPlugin.valueSearch(itemId, "qty=1"));
|
||||
assertFalse(bankPlugin.valueSearch(itemId, "qty>30"));
|
||||
|
||||
assertFalse(bankPlugin.valueSearch(itemId, "1000k"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCalculate()
|
||||
{
|
||||
Item coins = new Item(ItemID.COINS_995, Integer.MAX_VALUE);
|
||||
|
||||
Item whip = new Item(ItemID.ABYSSAL_WHIP, 1_000_000_000);
|
||||
|
||||
Item[] items = ImmutableList.of(
|
||||
coins,
|
||||
whip
|
||||
).toArray(new Item[0]);
|
||||
|
||||
ItemComposition whipComp = mock(ItemComposition.class);
|
||||
when(whipComp.getHaPrice())
|
||||
.thenReturn(4); // 4 * 1m overflows
|
||||
when(itemManager.getItemComposition(ItemID.ABYSSAL_WHIP))
|
||||
.thenReturn(whipComp);
|
||||
when(itemManager.getItemPrice(ItemID.ABYSSAL_WHIP))
|
||||
.thenReturn(3); // 1b * 3 overflows
|
||||
|
||||
final ContainerPrices prices = bankPlugin.calculate(items);
|
||||
assertNotNull(prices);
|
||||
|
||||
assertTrue(prices.getHighAlchPrice() > Integer.MAX_VALUE);
|
||||
assertTrue(prices.getGePrice() > Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
@@ -1087,6 +1087,10 @@ public class ChatCommandsPluginTest
|
||||
"Theatre of Blood",
|
||||
"Fastest Room time (former): <col=ffffff>18:45</col>",
|
||||
"Fastest Wave time (former): <col=ffffff>22:01</col>",
|
||||
"Fastest Room time - (Team size: (1 player): <col=ffffff>1:01:57.00</col>",
|
||||
"Fastest Overall time - (Team size: 1 player): <col=ffffff>1:06:40.20</col>",
|
||||
"Fastest Room time - (Team size: (2 player): <col=ffffff>22:43.80</col>",
|
||||
"Fastest Overall time - (Team size: 2 player): <col=ffffff>27:36.60</col>",
|
||||
"Fastest Room time - (Team size: (3 player): <col=ffffff>19:50</col>",
|
||||
"Fastest Overall time - (Team size: 3 player): <col=ffffff>22:47</col>",
|
||||
"Fastest Room time - (Team size: (4 player): <col=ffffff>17:38</col>",
|
||||
@@ -1138,7 +1142,10 @@ public class ChatCommandsPluginTest
|
||||
|
||||
verify(configManager).setRSProfileConfiguration("personalbest", "tztok-jad", 2033.0);
|
||||
verify(configManager).setRSProfileConfiguration("personalbest", "tempoross", 234.0);
|
||||
verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric", 1360.0); // the lowest time
|
||||
verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric solo", 60 * 28 + 7.);
|
||||
verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric 2 players", 60 * 24 + 40.);
|
||||
verify(configManager).setRSProfileConfiguration("personalbest", "theatre of blood solo", 3600 + 60 + 57.);
|
||||
verify(configManager).setRSProfileConfiguration("personalbest", "theatre of blood 3 players", 19 * 60 + 50.);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user