Merge remote-tracking branch 'runelite/master' into 1308-merge
This commit is contained in:
@@ -37,20 +37,18 @@ import okhttp3.Response;
|
||||
|
||||
public class OsbuddyClient
|
||||
{
|
||||
private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36";
|
||||
|
||||
public Map<Integer, OsbuddySummaryItem> getSummary() throws IOException
|
||||
{
|
||||
HttpUrl httpUrl = new HttpUrl.Builder()
|
||||
.scheme("https")
|
||||
.host("rsbuddy.com")
|
||||
.addPathSegment("exchange")
|
||||
.host("storage.googleapis.com")
|
||||
.addPathSegment("osb-exchange")
|
||||
.addPathSegment("summary.json")
|
||||
.build();
|
||||
|
||||
Request request = new Request.Builder()
|
||||
.url(httpUrl)
|
||||
.header("User-Agent", USER_AGENT)
|
||||
.header("User-Agent", "RuneLite")
|
||||
.build();
|
||||
|
||||
try (Response responseOk = RuneLiteAPI.CLIENT.newCall(request).execute())
|
||||
|
||||
@@ -151,7 +151,7 @@ public enum AgilityShortcut
|
||||
MOTHERLODE_MINE_WALL_EAST(54, "Wall", new WorldPoint(3124, 9703, 0), DARK_TUNNEL_10047),
|
||||
MOTHERLODE_MINE_WALL_WEST(54, "Wall", new WorldPoint(3118, 9702, 0), DARK_TUNNEL_10047),
|
||||
MISCELLANIA_DOCK_STEPPING_STONE(55, "Stepping Stone", new WorldPoint(2572, 3862, 0), STEPPING_STONE_11768),
|
||||
ISAFDAR_FOREST_OBSTACLES(56, "Trap", null, DENSE_FOREST_3938, DENSE_FOREST_3939, DENSE_FOREST_3998, DENSE_FOREST_3999, DENSE_FOREST, LEAVES, LEAVES_3924, LEAVES_3925, STICKS, TRIPWIRE),
|
||||
ISAFDAR_FOREST_OBSTACLES(56, "Trap", null, DENSE_FOREST_3938, DENSE_FOREST_3939, DENSE_FOREST_3998, DENSE_FOREST_3999, DENSE_FOREST, LEAVES, LEAVES_3924, LEAVES_3925, STICKS, TRIPWIRE, TRIPWIRE_3921),
|
||||
RELEKKA_EAST_FENCE(57, "Fence", new WorldPoint(2688, 3697, 0), BROKEN_FENCE),
|
||||
YANILLE_DUNGEON_MONKEY_BARS(57, "Monkey Bars", null, MONKEYBARS_23567),
|
||||
PHASMATYS_ECTOPOOL_SHORTCUT(58, "Weathered Wall", null, WEATHERED_WALL, WEATHERED_WALL_16526),
|
||||
|
||||
@@ -223,9 +223,9 @@ public enum ItemMapping
|
||||
ITEM_CRYSTAL_HARPOON(DRAGON_HARPOON, CRYSTAL_HARPOON, CRYSTAL_HARPOON_INACTIVE),
|
||||
ITEM_CRYSTAL_PICKAXE(DRAGON_PICKAXE, CRYSTAL_PICKAXE, CRYSTAL_PICKAXE_INACTIVE),
|
||||
ITEM_BLADE_OF_SAELDOR(BLADE_OF_SAELDOR_INACTIVE, BLADE_OF_SAELDOR),
|
||||
ITEM_CRYSTAL_BOW(CRYSTAL_WEAPON_SEED, CRYSTAL_BOW, CRYSTAL_BOW_INACTIVE),
|
||||
ITEM_CRYSTAL_HALBERD(CRYSTAL_WEAPON_SEED, CRYSTAL_HALBERD, CRYSTAL_HALBERD_INACTIVE),
|
||||
ITEM_CRYSTAL_SHIELD(CRYSTAL_WEAPON_SEED, CRYSTAL_SHIELD, CRYSTAL_SHIELD_INACTIVE);
|
||||
ITEM_CRYSTAL_BOW(CRYSTAL_WEAPON_SEED, CRYSTAL_BOW, CRYSTAL_BOW_24123, CRYSTAL_BOW_INACTIVE),
|
||||
ITEM_CRYSTAL_HALBERD(CRYSTAL_WEAPON_SEED, CRYSTAL_HALBERD, CRYSTAL_HALBERD_24125, CRYSTAL_HALBERD_INACTIVE),
|
||||
ITEM_CRYSTAL_SHIELD(CRYSTAL_WEAPON_SEED, CRYSTAL_SHIELD, CRYSTAL_SHIELD_24127, CRYSTAL_SHIELD_INACTIVE);
|
||||
|
||||
private static final Multimap<Integer, Integer> MAPPINGS = HashMultimap.create();
|
||||
private final int tradeableItem;
|
||||
|
||||
@@ -47,7 +47,7 @@ enum Courses
|
||||
SEERS(570.0, 435, 10806),
|
||||
POLLNIVNEACH(890.0, 540, 13358),
|
||||
RELLEKA(780.0, 475, 10553),
|
||||
PRIFDDINAS(1199.0, 968, 12895),
|
||||
PRIFDDINAS(1337.0, 1037, 12895),
|
||||
ARDOUGNE(793.0, 529, 10547);
|
||||
|
||||
private final static Map<Integer, Courses> coursesByRegion;
|
||||
|
||||
@@ -163,7 +163,8 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
||||
new AnagramClue("RUG DETER", "Gertrude", new WorldPoint(3151, 3412, 0), "West of Varrock, south of the Cooks' Guild"),
|
||||
new AnagramClue("SIR SHARE RED", "Hairdresser", new WorldPoint(2944, 3381, 0), "Western Falador"),
|
||||
new AnagramClue("TAUNT ROOF", "Fortunato", new WorldPoint(3080, 3250, 0), "Draynor Village Market"),
|
||||
new AnagramClue("HICK JET", "Jethick", new WorldPoint(2541, 3305, 0), "West Ardougne", "38")
|
||||
new AnagramClue("HICK JET", "Jethick", new WorldPoint(2541, 3305, 0), "West Ardougne", "38"),
|
||||
new AnagramClue("RUE GO", "Goreu", new WorldPoint(2335, 3162, 0), "Lletya")
|
||||
);
|
||||
|
||||
private final String text;
|
||||
|
||||
@@ -255,7 +255,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
||||
new CrypticClue("Search the chests upstairs in Al Kharid Palace.", CLOSED_CHEST_375, new WorldPoint(3301, 3169, 1), "The chest is located, in the northeast corner, on the first floor of the Al Kharid Palace"),
|
||||
new CrypticClue("Search the boxes just outside the Armour shop in East Ardougne.", BOXES_361, new WorldPoint(2654, 3299, 0), "Outside Zenesha's Plate Mail Body Shop"),
|
||||
new CrypticClue("Surrounded by white walls and gems.", "Herquin", new WorldPoint(2945, 3335, 0), "Talk to Herquin, the gem store owner in Falador."),
|
||||
new CrypticClue("Monk's residence in the far west. See robe storage device.", DRAWERS_350, new WorldPoint(1742, 3490, 1), "Search the drawers upstairs in the chapel found on the southern coast of Hosidius, directly south of the player-owned house portal."),
|
||||
new CrypticClue("Monk's residence in the far west. See robe storage device.", DRAWERS_350, new WorldPoint(1742, 3490, 1), "Search the drawers in the south tent of the monk's camp on the southern coast of Hosidius, directly south of the player-owned house portal."),
|
||||
new CrypticClue("Search the drawers in Catherby's Archery shop.", DRAWERS_350, new WorldPoint(2825, 3442, 0), "Hickton's Archery Emporium in Catherby."),
|
||||
new CrypticClue("The hand ain't listening.", "The Face", new WorldPoint(3019, 3232, 0), "Talk to The Face located by the manhole just north of the Port Sarim fishing shop."),
|
||||
new CrypticClue("Search the chest in the left-hand tower of Camelot Castle.", CLOSED_CHEST_25592, new WorldPoint(2748, 3495, 2), "Located on the second floor of the western tower of Camelot."),
|
||||
@@ -320,7 +320,10 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
||||
new CrypticClue("Search the boxes next to a chest that needs a crystal key.", BOXES_360, new WorldPoint(2915, 3452, 0), "The Crystal chest can be found in the house directly south of the Witch's house in Taverley."),
|
||||
new CrypticClue("Talk to Turael in Burthorpe.", "Turael", new WorldPoint(2930, 3536, 0), "Turael is located in the small house east of the Toad and Chicken inn."),
|
||||
new CrypticClue("More resources than I can handle, but in a very dangerous area. Can't wait to strike gold!", new WorldPoint(3183, 3941, 0), "Dig between the three gold ores in the Wilderness Resource Area."),
|
||||
new CrypticClue("Observing someone in a swamp, under the telescope lies treasure.", new WorldPoint(2221, 3091, 0), "Dig next to the telescope on Broken Handz's island in the poison wastes. (Accessible only through fairy ring DLR)")
|
||||
new CrypticClue("Observing someone in a swamp, under the telescope lies treasure.", new WorldPoint(2221, 3091, 0), "Dig next to the telescope on Broken Handz's island in the poison wastes. (Accessible only through fairy ring DLR)"),
|
||||
new CrypticClue("A general who sets a 'shining' example.", "General Hining", new WorldPoint(2186, 3148, 0), "Talk to General Hining in Tyras Camp."),
|
||||
new CrypticClue("Has no one told you it is rude to ask a lady her age?", "Lady Tangwen Trahaearn", new WorldPoint(3280, 6042, 0), "Talk to Lady Tangwen Trahaearn, SSE Prifddinas by the teleporter."),
|
||||
new CrypticClue("Elvish onions.", new WorldPoint(3303, 6092, 0), "Dig in the onion patch east of the Prifddinas allotments.")
|
||||
);
|
||||
|
||||
private final String text;
|
||||
|
||||
@@ -77,10 +77,12 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
|
||||
new EmoteClue("Panic in the heart of the Haunted Woods. Beware of double agents! Have no items equipped when you do.", "Haunted Woods", null, new WorldPoint(3611, 3492, 0), PANIC, emptySlot("Nothing at all", HEAD, CAPE, AMULET, WEAPON, BODY, SHIELD, LEGS, GLOVES, BOOTS, RING, AMMO)),
|
||||
new EmoteClue("Show your anger towards the Statue of Saradomin in Ellamaria's garden. Beware of double agents! Equip a zamorak godsword.", "Varrock Castle", BY_THE_BEAR_CAGE_IN_VARROCK_PALACE_GARDENS, new WorldPoint(3230, 3478, 0), ANGRY, item(ZAMORAK_GODSWORD)),
|
||||
new EmoteClue("Show your anger at the Wise old man. Beware of double agents! Equip an abyssal whip, a legend's cape and some spined chaps.", "Draynor Village", BEHIND_MISS_SCHISM_IN_DRAYNOR_VILLAGE, new WorldPoint(3088, 3254, 0), ANGRY, any("Abyssal whip", item(ABYSSAL_WHIP), item(VOLCANIC_ABYSSAL_WHIP), item(FROZEN_ABYSSAL_WHIP)), item(CAPE_OF_LEGENDS), item(SPINED_CHAPS)),
|
||||
new EmoteClue("Beckon by a collection of crystalline maple trees. Beware of double agents! Equip Bryophyta's staff and a nature tiara.", "North of Prifddinas", CRYSTALLINE_MAPLE_TREES, new WorldPoint(2211, 3427, 0), BECKON, range(BRYOPHYTAS_STAFF_UNCHARGED, BRYOPHYTAS_STAFF), item(NATURE_TIARA)),
|
||||
new EmoteClue("Beckon in the Digsite, near the eastern winch. Bow before you talk to me. Equip a green gnome hat, snakeskin boots and an iron pickaxe.", "Digsite", DIGSITE, new WorldPoint(3370, 3425, 0), BECKON, BOW, item(GREEN_HAT), item(SNAKESKIN_BOOTS), item(IRON_PICKAXE)),
|
||||
new EmoteClue("Beckon in Tai Bwo Wannai. Clap before you talk to me. Equip green dragonhide chaps, a ring of dueling and a mithril medium helmet.", "Tai Bwo Wannai", SOUTH_OF_THE_SHRINE_IN_TAI_BWO_WANNAI_VILLAGE, new WorldPoint(2803, 3073, 0), BECKON, CLAP, item(GREEN_DHIDE_CHAPS), any("Ring of dueling", item(RING_OF_DUELING1), item(RING_OF_DUELING2), item(RING_OF_DUELING3), item(RING_OF_DUELING4), item(RING_OF_DUELING5), item(RING_OF_DUELING6), item(RING_OF_DUELING7), item(RING_OF_DUELING8)), item(MITHRIL_MED_HELM)),
|
||||
new EmoteClue("Beckon in the combat ring of Shayzien. Show your anger before you talk to me. Equip an adamant platebody, adamant full helm and adamant platelegs.", "Shayzien combat ring", WEST_OF_THE_SHAYZIEN_COMBAT_RING, new WorldPoint(1545, 3594, 0), BECKON, ANGRY, item(ADAMANT_PLATELEGS), item(ADAMANT_PLATEBODY), item(ADAMANT_FULL_HELM)),
|
||||
new EmoteClue("Bow near Lord Iorwerth. Beware of double agents! Equip a new imbued crystal bow.", "Lord Iorwerth's camp", TENT_IN_LORD_IORWERTHS_ENCAMPMENT, new WorldPoint(2205, 3252, 0), BOW, any("Imbued crystal bow", item(NEW_CRYSTAL_BOW_I), item(CRYSTAL_BOW_FULL_I), item(CRYSTAL_BOW_910_I), item(CRYSTAL_BOW_810_I), item(CRYSTAL_BOW_710_I), item(CRYSTAL_BOW_610_I), item(CRYSTAL_BOW_510_I), item(CRYSTAL_BOW_410_I), item(CRYSTAL_BOW_310_I), item(CRYSTAL_BOW_210_I), item(CRYSTAL_BOW_110_I))),
|
||||
new EmoteClue("Bow near Lord Iorwerth. Beware of double agents! Equip a charged crystal bow.", "Lord Iorwerth's camp", TENT_IN_LORD_IORWERTHS_ENCAMPMENT, new WorldPoint(2205, 3252, 0), BOW, any("Crystal Bow", item(CRYSTAL_BOW), item(CRYSTAL_BOW_24123))),
|
||||
new EmoteClue("Bow in the Iorwerth Camp. Beware of double agents! Equip a charged crystal bow.", "Lord Iorwerth's camp", TENT_IN_LORD_IORWERTHS_ENCAMPMENT, new WorldPoint(2205, 3252, 0), BOW, any("Crystal Bow", item(CRYSTAL_BOW), item(CRYSTAL_BOW_24123))),
|
||||
new EmoteClue("Bow outside the entrance to the Legends' Guild. Equip iron platelegs, an emerald amulet and an oak longbow.", "Legend's Guild", OUTSIDE_THE_LEGENDS_GUILD_GATES, new WorldPoint(2729, 3349, 0), BOW, item(IRON_PLATELEGS), item(OAK_LONGBOW), item(EMERALD_AMULET)),
|
||||
new EmoteClue("Bow on the ground floor of the Legend's guild. Equip Legend's cape, a dragon battleaxe and an amulet of glory.", "Legend's Guild", OUTSIDE_THE_LEGENDS_GUILD_DOOR, new WorldPoint(2728, 3377, 0), BOW, item(CAPE_OF_LEGENDS), item(DRAGON_BATTLEAXE), any("Any amulet of glory", item(AMULET_OF_GLORY), item(AMULET_OF_GLORY1), item(AMULET_OF_GLORY2), item(AMULET_OF_GLORY3), item(AMULET_OF_GLORY4), item(AMULET_OF_GLORY5), item(AMULET_OF_GLORY6))),
|
||||
new EmoteClue("Bow in the ticket office of the Duel Arena. Equip an iron chain body, leather chaps and coif.", "Duel Arena", MUBARIZS_ROOM_AT_THE_DUEL_ARENA, new WorldPoint(3314, 3241, 0), BOW, item(IRON_CHAINBODY), item(LEATHER_CHAPS), item(COIF)),
|
||||
|
||||
@@ -31,37 +31,9 @@ import java.util.List;
|
||||
import javax.annotation.Nonnull;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.Item;
|
||||
import static net.runelite.api.ItemID.ARMADYL_HELMET;
|
||||
import static net.runelite.api.ItemID.BARRELCHEST_ANCHOR;
|
||||
import static net.runelite.api.ItemID.BARROWS_GLOVES;
|
||||
import static net.runelite.api.ItemID.BASALT;
|
||||
import static net.runelite.api.ItemID.BOOK_OF_BALANCE;
|
||||
import static net.runelite.api.ItemID.BOOK_OF_DARKNESS;
|
||||
import static net.runelite.api.ItemID.BOOK_OF_LAW;
|
||||
import static net.runelite.api.ItemID.BOOK_OF_WAR;
|
||||
import static net.runelite.api.ItemID.COOKING_GAUNTLETS;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_110;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_110_I;
|
||||
import static net.runelite.api.ItemID.DRAGON_DEFENDER;
|
||||
import static net.runelite.api.ItemID.DRAGON_SCIMITAR;
|
||||
import static net.runelite.api.ItemID.FIGHTER_TORSO;
|
||||
import static net.runelite.api.ItemID.GREENMANS_ALEM;
|
||||
import static net.runelite.api.ItemID.HOLY_BOOK;
|
||||
import static net.runelite.api.ItemID.INFERNAL_AXE;
|
||||
import static net.runelite.api.ItemID.IVANDIS_FLAIL;
|
||||
import static net.runelite.api.ItemID.LAVA_DRAGON_BONES;
|
||||
import static net.runelite.api.ItemID.MARK_OF_GRACE;
|
||||
import static net.runelite.api.ItemID.NEW_CRYSTAL_BOW;
|
||||
import static net.runelite.api.ItemID.NEW_CRYSTAL_BOW_I;
|
||||
import static net.runelite.api.ItemID.NUMULITE;
|
||||
import static net.runelite.api.ItemID.ROD_OF_IVANDIS_1;
|
||||
import static net.runelite.api.ItemID.ROD_OF_IVANDIS_10;
|
||||
import static net.runelite.api.ItemID.RUNE_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.TZHAARKETOM;
|
||||
import static net.runelite.api.ItemID.UNHOLY_BOOK;
|
||||
import static net.runelite.api.ItemID.WARRIOR_GUILD_TOKEN;
|
||||
import net.runelite.api.NPC;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
import static net.runelite.api.ItemID.*;
|
||||
import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR;
|
||||
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
||||
import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET;
|
||||
@@ -80,7 +52,7 @@ public class FaloTheBardClue extends ClueScroll implements TextClueScroll, NpcCl
|
||||
private static final List<FaloTheBardClue> CLUES = ImmutableList.of(
|
||||
new FaloTheBardClue("A blood red weapon, a strong curved sword, found on the island of primate lords.", item(DRAGON_SCIMITAR)),
|
||||
new FaloTheBardClue("A book that preaches of some great figure, lending strength, might and vigour.", any("Any god book (must be complete)", item(HOLY_BOOK), item(BOOK_OF_BALANCE), item(UNHOLY_BOOK), item(BOOK_OF_LAW), item(BOOK_OF_WAR), item(BOOK_OF_DARKNESS))),
|
||||
new FaloTheBardClue("A bow of elven craft was made, it shimmers bright, but will soon fade.", any("Crystal Bow", range(NEW_CRYSTAL_BOW, CRYSTAL_BOW_110), range(NEW_CRYSTAL_BOW_I, CRYSTAL_BOW_110_I))),
|
||||
new FaloTheBardClue("A bow of elven craft was made, it shimmers bright, but will soon fade.", any("Crystal Bow", item(CRYSTAL_BOW), item(CRYSTAL_BOW_24123))),
|
||||
new FaloTheBardClue("A fiery axe of great inferno, when you use it, you'll wonder where the logs go.", item(INFERNAL_AXE)),
|
||||
new FaloTheBardClue("A mark used to increase one's grace, found atop a seer's place.", item(MARK_OF_GRACE)),
|
||||
new FaloTheBardClue("A molten beast with fiery breath, you acquire these with its death.", item(LAVA_DRAGON_BONES)),
|
||||
|
||||
@@ -137,7 +137,8 @@ public enum STASHUnit
|
||||
NORTH_OF_MOUNT_KARUULM(NullObjectID.NULL_34647, new WorldPoint(1308, 3840, 0)),
|
||||
GYPSY_TENT_ENTRANCE(NullObjectID.NULL_34736, new WorldPoint(3206, 3422, 0)),
|
||||
FINE_CLOTHES_ENTRANCE(NullObjectID.NULL_34737, new WorldPoint(3209, 3416, 0)),
|
||||
BOB_AXES_ENTRANCE(NullObjectID.NULL_34738, new WorldPoint(3233, 3200, 0));
|
||||
BOB_AXES_ENTRANCE(NullObjectID.NULL_34738, new WorldPoint(3233, 3200, 0)),
|
||||
CRYSTALLINE_MAPLE_TREES(NullObjectID.NULL_34953, new WorldPoint(2213, 3427, 0));
|
||||
|
||||
private final int objectId;
|
||||
private final WorldPoint[] worldPoints;
|
||||
|
||||
@@ -138,14 +138,14 @@ public enum HotColdLocation
|
||||
NORTHEAST_OF_AL_KHARID_MINE(true, new WorldPoint(3332, 3313, 0), MISTHALIN, "Northeast of Al Kharid Mine"),
|
||||
WESTERN_PROVINCE_EAGLES_PEAK(new WorldPoint(2297, 3530, 0), WESTERN_PROVINCE, "North-west of Eagles' Peak."),
|
||||
WESTERN_PROVINCE_PISCATORIS(new WorldPoint(2337, 3689, 0), WESTERN_PROVINCE, "Piscatoris Fishing Colony"),
|
||||
WESTERN_PROVINCE_PISCATORIS_HUNTER_AREA(new WorldPoint(2361, 3566, 0), WESTERN_PROVINCE, "Eastern part of Piscatoris Hunter area, south-west of the Falconry."),
|
||||
WESTERN_PROVINCE_PISCATORIS_HUNTER_AREA(new WorldPoint(2359, 3564, 0), WESTERN_PROVINCE, "Eastern part of Piscatoris Hunter area, south-west of the Falconry."),
|
||||
WESTERN_PROVINCE_ARANDAR(new WorldPoint(2366, 3318, 0), WESTERN_PROVINCE, "South-west of the crystal gate to Arandar."),
|
||||
WESTERN_PROVINCE_ELF_CAMP_EAST(new WorldPoint(2270, 3244, 0), WESTERN_PROVINCE, "East of Elf Camp."),
|
||||
WESTERN_PROVINCE_ELF_CAMP_NW(new WorldPoint(2174, 3280, 0), WESTERN_PROVINCE, "North-west of Elf Camp."),
|
||||
WESTERN_PROVINCE_LLETYA(new WorldPoint(2335, 3166, 0), WESTERN_PROVINCE, "In Lletya."),
|
||||
WESTERN_PROVINCE_TYRAS(new WorldPoint(2204, 3157, 0), WESTERN_PROVINCE, "Near Tyras Camp."),
|
||||
WESTERN_PROVINCE_ZULANDRA(new WorldPoint(2196, 3057, 0), WESTERN_PROVINCE, "The northern house at Zul-Andra."),
|
||||
WILDERNESS_5(new WorldPoint(3169, 3558, 0), WILDERNESS, "North of the Grand Exchange, level 5 Wilderness."),
|
||||
WILDERNESS_5(new WorldPoint(3173, 3556, 0), WILDERNESS, "North of the Grand Exchange, level 5 Wilderness."),
|
||||
WILDERNESS_12(new WorldPoint(3038, 3612, 0), WILDERNESS, "South-east of the Dark Warriors' Fortress, level 12 Wilderness."),
|
||||
WILDERNESS_20(new WorldPoint(3225, 3676, 0), WILDERNESS, "East of the Corporeal Beast's lair, level 20 Wilderness."),
|
||||
WILDERNESS_27(new WorldPoint(3174, 3735, 0), WILDERNESS, "Inside the Ruins north of the Graveyard of Shadows, level 27 Wilderness."),
|
||||
@@ -157,7 +157,7 @@ public enum HotColdLocation
|
||||
WILDERNESS_49(new WorldPoint(3140, 3910, 0), WILDERNESS, "South-west of the Deserted Keep, level 49 Wilderness."),
|
||||
WILDERNESS_54(new WorldPoint(2983, 3946, 0), WILDERNESS, "West of the Wilderness Agility Course, level 54 Wilderness."),
|
||||
ZEAH_BLASTMINE_BANK(new WorldPoint(1507, 3856, 0), ZEAH, "Next to the bank in the Lovakengj blast mine."),
|
||||
ZEAH_BLASTMINE_NORTH(new WorldPoint(1490, 3883, 0), ZEAH, "Northern part of the Lovakengj blast mine."),
|
||||
ZEAH_BLASTMINE_NORTH(new WorldPoint(1488, 3881, 0), ZEAH, "Northern part of the Lovakengj blast mine."),
|
||||
ZEAH_LOVAKITE_FURNACE(new WorldPoint(1507, 3819, 0), ZEAH, "Next to the lovakite furnace in Lovakengj."),
|
||||
ZEAH_LOVAKENGJ_MINE(new WorldPoint(1477, 3779, 0), ZEAH, "Next to mithril rock in the Lovakengj mine."),
|
||||
ZEAH_SULPHR_MINE(new WorldPoint(1428, 3866, 0), ZEAH, "Western entrance in the Lovakengj sulphur mine."),
|
||||
@@ -177,7 +177,7 @@ public enum HotColdLocation
|
||||
ZEAH_MESS_HALL(new WorldPoint(1658, 3621, 0), ZEAH, "East of the Mess hall."),
|
||||
ZEAH_WATSONS_HOUSE(new WorldPoint(1653, 3573, 0), ZEAH, "East of Watson's house."),
|
||||
ZEAH_VANNAHS_FARM_STORE(new WorldPoint(1806, 3521, 0), ZEAH, "North of Vannah's Farm Store, between the chicken coop and willow trees."),
|
||||
ZEAH_FARMING_GUILD_W(new WorldPoint(1209, 3737, 0), ZEAH, "West of the Farming Guild."),
|
||||
ZEAH_FARMING_GUILD_W(new WorldPoint(1208, 3736, 0), ZEAH, "West of the Farming Guild."),
|
||||
ZEAH_DAIRY_COW(new WorldPoint(1320, 3718, 0), ZEAH, "North-east of the Kebos Lowlands, east of the dairy cow."),
|
||||
ZEAH_CRIMSON_SWIFTS(new WorldPoint(1186, 3583, 0), ZEAH, "South-west of the Kebos Swamp, below the crimson swifts.");
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.ChatMessageType;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.ItemDefinition;
|
||||
import net.runelite.api.ItemID;
|
||||
import net.runelite.api.events.ChatMessage;
|
||||
import net.runelite.api.events.GameStateChanged;
|
||||
import net.runelite.api.events.MenuOptionClicked;
|
||||
@@ -224,26 +225,32 @@ public class ExaminePlugin extends Plugin
|
||||
log.debug("Got examine for {} {}: {}", pendingExamine.getType(), pendingExamine.getId(), event.getMessage());
|
||||
|
||||
// If it is an item, show the price of it
|
||||
final ItemDefinition Itemdefinition;
|
||||
final ItemDefinition itemDefinition;
|
||||
if (pendingExamine.getType() == ExamineType.ITEM || pendingExamine.getType() == ExamineType.ITEM_BANK_EQ)
|
||||
{
|
||||
final int itemId = pendingExamine.getId();
|
||||
final int itemQuantity = pendingExamine.getQuantity();
|
||||
Itemdefinition = itemManager.getItemDefinition(itemId);
|
||||
|
||||
if (Itemdefinition != null)
|
||||
if (itemId == ItemID.COINS_995)
|
||||
{
|
||||
final int id = itemManager.canonicalize(Itemdefinition.getId());
|
||||
executor.submit(() -> getItemPrice(id, Itemdefinition, itemQuantity));
|
||||
return;
|
||||
}
|
||||
|
||||
itemDefinition = itemManager.getItemDefinition(itemId);
|
||||
|
||||
if (itemDefinition != null)
|
||||
{
|
||||
final int id = itemManager.canonicalize(itemDefinition.getId());
|
||||
executor.submit(() -> getItemPrice(id, itemDefinition, itemQuantity));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Itemdefinition = null;
|
||||
itemDefinition = null;
|
||||
}
|
||||
|
||||
// Don't submit examine info for tradeable items, which we already have from the RS item api
|
||||
if (Itemdefinition != null && Itemdefinition.isTradeable())
|
||||
if (itemDefinition != null && itemDefinition.isTradeable())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.itemskeptondeath;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import javax.annotation.Nullable;
|
||||
import lombok.AllArgsConstructor;
|
||||
import net.runelite.api.ItemID;
|
||||
|
||||
@@ -37,75 +38,76 @@ import net.runelite.api.ItemID;
|
||||
enum BrokenOnDeathItem
|
||||
{
|
||||
// Capes
|
||||
FIRE_CAPE(ItemID.FIRE_CAPE),
|
||||
FIRE_MAX_CAPE(ItemID.FIRE_MAX_CAPE),
|
||||
INFERNAL_CAPE(ItemID.INFERNAL_CAPE),
|
||||
INFERNAL_MAX_CAPE(ItemID.INFERNAL_MAX_CAPE),
|
||||
AVAS_ASSEMBLER(ItemID.AVAS_ASSEMBLER),
|
||||
ASSEMBLER_MAX_CAPE(ItemID.ASSEMBLER_MAX_CAPE),
|
||||
FIRE_CAPE(ItemID.FIRE_CAPE, 50000),
|
||||
FIRE_MAX_CAPE(ItemID.FIRE_MAX_CAPE, 50000),
|
||||
INFERNAL_CAPE(ItemID.INFERNAL_CAPE, 50000),
|
||||
INFERNAL_MAX_CAPE(ItemID.INFERNAL_MAX_CAPE, 50000),
|
||||
AVAS_ASSEMBLER(ItemID.AVAS_ASSEMBLER, 75000),
|
||||
ASSEMBLER_MAX_CAPE(ItemID.ASSEMBLER_MAX_CAPE, 75000),
|
||||
|
||||
// Defenders
|
||||
BRONZE_DEFENDER(ItemID.BRONZE_DEFENDER),
|
||||
IRON_DEFENDER(ItemID.IRON_DEFENDER),
|
||||
STEEL_DEFENDER(ItemID.STEEL_DEFENDER),
|
||||
BLACK_DEFENDER(ItemID.BLACK_DEFENDER),
|
||||
MITHRIL_DEFENDER(ItemID.MITHRIL_DEFENDER),
|
||||
ADAMANT_DEFENDER(ItemID.ADAMANT_DEFENDER),
|
||||
RUNE_DEFENDER(ItemID.RUNE_DEFENDER),
|
||||
DRAGON_DEFENDER(ItemID.DRAGON_DEFENDER),
|
||||
AVERNIC_DEFENDER(ItemID.AVERNIC_DEFENDER),
|
||||
BRONZE_DEFENDER(ItemID.BRONZE_DEFENDER, 1000),
|
||||
IRON_DEFENDER(ItemID.IRON_DEFENDER, 2000),
|
||||
STEEL_DEFENDER(ItemID.STEEL_DEFENDER, 2500),
|
||||
BLACK_DEFENDER(ItemID.BLACK_DEFENDER, 5000),
|
||||
MITHRIL_DEFENDER(ItemID.MITHRIL_DEFENDER, 15000),
|
||||
ADAMANT_DEFENDER(ItemID.ADAMANT_DEFENDER, 25000),
|
||||
RUNE_DEFENDER(ItemID.RUNE_DEFENDER, 35000),
|
||||
DRAGON_DEFENDER(ItemID.DRAGON_DEFENDER, 40000),
|
||||
AVERNIC_DEFENDER(ItemID.AVERNIC_DEFENDER, 1000000),
|
||||
|
||||
// Void
|
||||
VOID_MAGE_HELM(ItemID.VOID_MAGE_HELM),
|
||||
VOID_RANGER_HELM(ItemID.VOID_RANGER_HELM),
|
||||
VOID_MELEE_HELM(ItemID.VOID_MELEE_HELM),
|
||||
VOID_KNIGHT_TOP(ItemID.VOID_KNIGHT_TOP),
|
||||
VOID_KNIGHT_ROBE(ItemID.VOID_KNIGHT_ROBE),
|
||||
VOID_KNIGHT_GLOVES(ItemID.VOID_KNIGHT_GLOVES),
|
||||
VOID_KNIGHT_MACE(ItemID.VOID_KNIGHT_MACE),
|
||||
ELITE_VOID_TOP(ItemID.ELITE_VOID_TOP),
|
||||
ELITE_VOID_ROBE(ItemID.ELITE_VOID_ROBE),
|
||||
VOID_MAGE_HELM(ItemID.VOID_MAGE_HELM, 40000),
|
||||
VOID_RANGER_HELM(ItemID.VOID_RANGER_HELM, 40000),
|
||||
VOID_MELEE_HELM(ItemID.VOID_MELEE_HELM, 40000),
|
||||
VOID_KNIGHT_TOP(ItemID.VOID_KNIGHT_TOP, 45000),
|
||||
VOID_KNIGHT_ROBE(ItemID.VOID_KNIGHT_ROBE, 45000),
|
||||
VOID_KNIGHT_GLOVES(ItemID.VOID_KNIGHT_GLOVES, 30000),
|
||||
ELITE_VOID_TOP(ItemID.ELITE_VOID_TOP, 50000),
|
||||
ELITE_VOID_ROBE(ItemID.ELITE_VOID_ROBE, 50000),
|
||||
|
||||
// Barb Assault
|
||||
FIGHTER_HAT(ItemID.FIGHTER_HAT),
|
||||
RANGER_HAT(ItemID.RANGER_HAT),
|
||||
HEALER_HAT(ItemID.HEALER_HAT),
|
||||
FIGHTER_TORSO(ItemID.FIGHTER_TORSO),
|
||||
PENANCE_SKIRT(ItemID.PENANCE_SKIRT),
|
||||
FIGHTER_HAT(ItemID.FIGHTER_HAT, 45000),
|
||||
RANGER_HAT(ItemID.RANGER_HAT, 45000),
|
||||
HEALER_HAT(ItemID.HEALER_HAT, 45000),
|
||||
FIGHTER_TORSO(ItemID.FIGHTER_TORSO, 50000),
|
||||
PENANCE_SKIRT(ItemID.PENANCE_SKIRT, 20000),
|
||||
|
||||
// Castle Wars
|
||||
SARADOMIN_HALO(ItemID.SARADOMIN_HALO),
|
||||
ZAMORAK_HALO(ItemID.ZAMORAK_HALO),
|
||||
GUTHIX_HALO(ItemID.GUTHIX_HALO),
|
||||
DECORATIVE_MAGIC_HAT(ItemID.DECORATIVE_ARMOUR_11898),
|
||||
DECORATIVE_MAGIC_ROBE_TOP(ItemID.DECORATIVE_ARMOUR_11896),
|
||||
DECORATIVE_MAGIC_ROBE_LEGS(ItemID.DECORATIVE_ARMOUR_11897),
|
||||
DECORATIVE_RANGE_TOP(ItemID.DECORATIVE_ARMOUR_11899),
|
||||
DECORATIVE_RANGE_BOTTOM(ItemID.DECORATIVE_ARMOUR_11900),
|
||||
DECORATIVE_RANGE_QUIVER(ItemID.DECORATIVE_ARMOUR_11901),
|
||||
GOLD_DECORATIVE_HELM(ItemID.DECORATIVE_HELM_4511),
|
||||
GOLD_DECORATIVE_BODY(ItemID.DECORATIVE_ARMOUR_4509),
|
||||
GOLD_DECORATIVE_LEGS(ItemID.DECORATIVE_ARMOUR_4510),
|
||||
GOLD_DECORATIVE_SKIRT(ItemID.DECORATIVE_ARMOUR_11895),
|
||||
GOLD_DECORATIVE_SHIELD(ItemID.DECORATIVE_SHIELD_4512),
|
||||
GOLD_DECORATIVE_SWORD(ItemID.DECORATIVE_SWORD_4508);
|
||||
SARADOMIN_HALO(ItemID.SARADOMIN_HALO, 25000),
|
||||
ZAMORAK_HALO(ItemID.ZAMORAK_HALO, 25000),
|
||||
GUTHIX_HALO(ItemID.GUTHIX_HALO, 25000),
|
||||
DECORATIVE_MAGIC_HAT(ItemID.DECORATIVE_ARMOUR_11898, 5000),
|
||||
DECORATIVE_MAGIC_ROBE_TOP(ItemID.DECORATIVE_ARMOUR_11896, 5000),
|
||||
DECORATIVE_MAGIC_ROBE_LEGS(ItemID.DECORATIVE_ARMOUR_11897, 5000),
|
||||
DECORATIVE_RANGE_TOP(ItemID.DECORATIVE_ARMOUR_11899, 5000),
|
||||
DECORATIVE_RANGE_BOTTOM(ItemID.DECORATIVE_ARMOUR_11900, 5000),
|
||||
DECORATIVE_RANGE_QUIVER(ItemID.DECORATIVE_ARMOUR_11901, 5000),
|
||||
GOLD_DECORATIVE_HELM(ItemID.DECORATIVE_HELM_4511, 5000),
|
||||
GOLD_DECORATIVE_BODY(ItemID.DECORATIVE_ARMOUR_4509, 5000),
|
||||
GOLD_DECORATIVE_LEGS(ItemID.DECORATIVE_ARMOUR_4510, 5000),
|
||||
GOLD_DECORATIVE_SKIRT(ItemID.DECORATIVE_ARMOUR_11895, 5000),
|
||||
GOLD_DECORATIVE_SHIELD(ItemID.DECORATIVE_SHIELD_4512, 5000),
|
||||
GOLD_DECORATIVE_SWORD(ItemID.DECORATIVE_SWORD_4508, 5000);
|
||||
|
||||
private final int itemID;
|
||||
private final int repairPrice;
|
||||
|
||||
private static final ImmutableSet<Integer> ID_SET;
|
||||
private static final ImmutableMap<Integer, Integer> REPAIR_MAP;
|
||||
|
||||
static
|
||||
{
|
||||
final ImmutableSet.Builder<Integer> set = new ImmutableSet.Builder<>();
|
||||
final ImmutableMap.Builder<Integer, Integer> map = new ImmutableMap.Builder<>();
|
||||
for (final BrokenOnDeathItem p : values())
|
||||
{
|
||||
set.add(p.itemID);
|
||||
map.put(p.itemID, p.repairPrice);
|
||||
}
|
||||
ID_SET = set.build();
|
||||
REPAIR_MAP = map.build();
|
||||
}
|
||||
|
||||
static boolean isBrokenOnDeath(final int itemID)
|
||||
@Nullable
|
||||
static Integer getRepairPrice(int itemId)
|
||||
{
|
||||
return ID_SET.contains(itemID);
|
||||
return REPAIR_MAP.get(itemId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,8 +313,6 @@ public class ItemsKeptOnDeathPlugin extends Plugin
|
||||
continue;
|
||||
}
|
||||
|
||||
final ItemDefinition c = itemManager.getItemDefinition(i.getId());
|
||||
|
||||
// Bonds are always kept and do not count towards the limit.
|
||||
if (id == ItemID.OLD_SCHOOL_BOND || id == ItemID.OLD_SCHOOL_BOND_UNTRADEABLE)
|
||||
{
|
||||
@@ -356,7 +354,7 @@ public class ItemsKeptOnDeathPlugin extends Plugin
|
||||
if (!Pets.isPet(id)
|
||||
&& !LostIfNotProtected.isLostIfNotProtected(id)
|
||||
&& !isTradeable(itemManager.getItemDefinition(id)) && wildyLevel <= DEEP_WILDY
|
||||
&& (wildyLevel <= 0 || BrokenOnDeathItem.isBrokenOnDeath(i.getId())))
|
||||
&& (wildyLevel <= 0 || BrokenOnDeathItem.getRepairPrice(i.getId()) != null))
|
||||
{
|
||||
keptItems.add(new ItemStack(id, qty));
|
||||
}
|
||||
@@ -448,8 +446,6 @@ public class ItemsKeptOnDeathPlugin extends Plugin
|
||||
final DynamicPriceItem dynamicPrice = DynamicPriceItem.find(canonicalizedItemId);
|
||||
if (dynamicPrice != null)
|
||||
{
|
||||
final ItemDefinition c1 = itemManager.getItemDefinition(canonicalizedItemId);
|
||||
exchangePrice = c1.getPrice();
|
||||
final int basePrice = itemManager.getItemPrice(dynamicPrice.getChargedId(), true);
|
||||
return dynamicPrice.calculateDeathPrice(basePrice);
|
||||
}
|
||||
@@ -462,19 +458,29 @@ public class ItemsKeptOnDeathPlugin extends Plugin
|
||||
// Grab base item price
|
||||
exchangePrice = itemManager.getItemPrice(fixedPrice.getBaseId(), true);
|
||||
}
|
||||
else
|
||||
|
||||
// Jagex uses the repair price when determining which items are kept on death.
|
||||
final Integer repairPrice = BrokenOnDeathItem.getRepairPrice(canonicalizedItemId);
|
||||
if (repairPrice != null)
|
||||
{
|
||||
// Account for items whose death value comes from their tradeable variant (barrows) or components (ornate kits)
|
||||
for (final int mappedID : ItemMapping.map(canonicalizedItemId))
|
||||
{
|
||||
exchangePrice += itemManager.getItemPrice(mappedID, true);
|
||||
}
|
||||
exchangePrice = repairPrice;
|
||||
}
|
||||
|
||||
if (exchangePrice == 0)
|
||||
{
|
||||
final ItemDefinition c1 = itemManager.getItemDefinition(canonicalizedItemId);
|
||||
exchangePrice = c1.getPrice();
|
||||
// Account for items whose death value comes from their tradeable variant (barrows) or components (ornate kits)
|
||||
// ItemMapping.map will always return a collection with at least the passed ID
|
||||
for (final int mappedID : ItemMapping.map(canonicalizedItemId))
|
||||
{
|
||||
exchangePrice += itemManager.getItemPrice(mappedID, true);
|
||||
}
|
||||
|
||||
// If for some reason it still has no price default to the items store price
|
||||
if (exchangePrice == 0)
|
||||
{
|
||||
final ItemDefinition c1 = itemManager.getItemDefinition(canonicalizedItemId);
|
||||
exchangePrice = c1.getPrice();
|
||||
}
|
||||
}
|
||||
|
||||
// Apply fixed price offset
|
||||
|
||||
@@ -80,8 +80,8 @@ import net.runelite.client.ui.overlay.OverlayManager;
|
||||
@Singleton
|
||||
public class MiningPlugin extends Plugin
|
||||
{
|
||||
// private static final int ROCK_DISTANCE = 14;
|
||||
private static final int MINING_GUILD_REGION = 12183;
|
||||
private static final int ROCK_DISTANCE = 14;
|
||||
|
||||
private static final Pattern COAL_BAG_EMPTY_MESSAGE = Pattern.compile("^The coal bag is (now )?empty\\.$");
|
||||
private static final Pattern COAL_BAG_ONE_MESSAGE = Pattern.compile("^The coal bag contains one piece of coal\\.$");
|
||||
@@ -189,11 +189,12 @@ public class MiningPlugin extends Plugin
|
||||
}
|
||||
|
||||
final GameObject object = event.getGameObject();
|
||||
final int region = client.getLocalPlayer().getWorldLocation().getRegionID();
|
||||
|
||||
Rock rock = Rock.getRock(object.getId());
|
||||
if (rock != null)
|
||||
{
|
||||
RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(inMiningGuild()).toMillis(), rock.getZOffset());
|
||||
RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset());
|
||||
respawns.add(rockRespawn);
|
||||
}
|
||||
}
|
||||
@@ -206,13 +207,14 @@ public class MiningPlugin extends Plugin
|
||||
}
|
||||
|
||||
final WallObject object = event.getWallObject();
|
||||
final int region = client.getLocalPlayer().getWorldLocation().getRegionID();
|
||||
|
||||
switch (object.getId())
|
||||
{
|
||||
case EMPTY_WALL:
|
||||
{
|
||||
Rock rock = Rock.AMETHYST;
|
||||
RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(inMiningGuild()).toMillis(), rock.getZOffset());
|
||||
RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset());
|
||||
respawns.add(rockRespawn);
|
||||
break;
|
||||
}
|
||||
@@ -222,7 +224,7 @@ public class MiningPlugin extends Plugin
|
||||
case DEPLETED_VEIN_26668: // Depleted motherlode vein
|
||||
{
|
||||
Rock rock = Rock.ORE_VEIN;
|
||||
RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(inMiningGuild()).toMillis(), rock.getZOffset());
|
||||
RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset());
|
||||
respawns.add(rockRespawn);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -38,17 +38,25 @@ enum Rock
|
||||
IRON(Duration.ofMillis(5400), 0, ROCKS_11364, ROCKS_11365, ROCKS_36203)
|
||||
{
|
||||
@Override
|
||||
Duration getRespawnTime(boolean inMiningGuild)
|
||||
Duration getRespawnTime(int region)
|
||||
{
|
||||
return inMiningGuild ? Duration.ofMillis(2400) : super.respawnTime;
|
||||
return region == MINING_GUILD ? Duration.ofMillis(2400) : super.respawnTime;
|
||||
}
|
||||
},
|
||||
COAL(Duration.ofMillis(29400), 0, ROCKS_11366, ROCKS_11367, ROCKS_36204)
|
||||
{
|
||||
@Override
|
||||
Duration getRespawnTime(boolean inMiningGuild)
|
||||
Duration getRespawnTime(int region)
|
||||
{
|
||||
return inMiningGuild ? Duration.ofMillis(14400) : super.respawnTime;
|
||||
switch (region)
|
||||
{
|
||||
case MINING_GUILD:
|
||||
return Duration.ofMillis(14400);
|
||||
case MISCELLANIA:
|
||||
return Duration.ofMillis(6600);
|
||||
default:
|
||||
return super.respawnTime;
|
||||
}
|
||||
}
|
||||
},
|
||||
SILVER(Duration.ofMinutes(1), 0, ROCKS_11368, ROCKS_11369, ROCKS_36205),
|
||||
@@ -58,25 +66,25 @@ enum Rock
|
||||
MITHRIL(Duration.ofMinutes(2), 0, ROCKS_11372, ROCKS_11373, ROCKS_36207)
|
||||
{
|
||||
@Override
|
||||
Duration getRespawnTime(boolean inMiningGuild)
|
||||
Duration getRespawnTime(int region)
|
||||
{
|
||||
return inMiningGuild ? Duration.ofMinutes(1) : super.respawnTime;
|
||||
return region == MINING_GUILD ? Duration.ofMinutes(1) : super.respawnTime;
|
||||
}
|
||||
},
|
||||
ADAMANTITE(Duration.ofMinutes(4), 0, ROCKS_11374, ROCKS_11375, ROCKS_36208)
|
||||
{
|
||||
@Override
|
||||
Duration getRespawnTime(boolean inMiningGuild)
|
||||
Duration getRespawnTime(int region)
|
||||
{
|
||||
return inMiningGuild ? Duration.ofMinutes(2) : super.respawnTime;
|
||||
return region == MINING_GUILD || region == WILDERNESS_RESOURCE_AREA ? Duration.ofMinutes(2) : super.respawnTime;
|
||||
}
|
||||
},
|
||||
RUNITE(Duration.ofMinutes(12), 0, ROCKS_11376, ROCKS_11377, ROCKS_36209)
|
||||
{
|
||||
@Override
|
||||
Duration getRespawnTime(boolean inMiningGuild)
|
||||
Duration getRespawnTime(int region)
|
||||
{
|
||||
return inMiningGuild ? Duration.ofMinutes(6) : super.respawnTime;
|
||||
return region == MINING_GUILD ? Duration.ofMinutes(6) : super.respawnTime;
|
||||
}
|
||||
},
|
||||
ORE_VEIN(Duration.ofSeconds(MiningOverlay.ORE_VEIN_MAX_RESPAWN_TIME), 150),
|
||||
@@ -84,6 +92,9 @@ enum Rock
|
||||
ASH_VEIN(Duration.ofSeconds(30), 0, ASH_PILE),
|
||||
GEM_ROCK(Duration.ofMinutes(1), 0, ROCKS_11380, ROCKS_11381);
|
||||
|
||||
private static final int WILDERNESS_RESOURCE_AREA = 12605;
|
||||
private static final int MISCELLANIA = 10044;
|
||||
private static final int MINING_GUILD = 12183;
|
||||
private static final Map<Integer, Rock> ROCKS;
|
||||
|
||||
static
|
||||
@@ -111,7 +122,7 @@ enum Rock
|
||||
this.ids = ids;
|
||||
}
|
||||
|
||||
Duration getRespawnTime(boolean inMiningGuild)
|
||||
Duration getRespawnTime(int region)
|
||||
{
|
||||
return respawnTime;
|
||||
}
|
||||
|
||||
@@ -203,6 +203,7 @@ enum Task
|
||||
SCORPIA("Scorpia", ItemID.SCORPIAS_OFFSPRING),
|
||||
SCORPIONS("Scorpions", ItemID.ENSOULED_SCORPION_HEAD,
|
||||
asList("Scorpia"), Collections.emptyList()),
|
||||
SARACHNIS("Sarachnis", ItemID.SRARACHA),
|
||||
SEA_SNAKES("Sea snakes", ItemID.SNAKE_CORPSE),
|
||||
SHADES("Shades", ItemID.SHADE_ROBE_TOP,
|
||||
asList("Loar Shadow", "Loar Shade", "Phrin Shadow", "Phrin Shade", "Riyl Shadow", "Riyl Shade", "Asyn Shadow", "Asyn Shade", "Fiyr Shadow", "Fiyr Shade"), Collections.emptyList()),
|
||||
|
||||
@@ -91,9 +91,7 @@ public class WorldMapOverlay extends Overlay
|
||||
|
||||
final Rectangle worldMapRectangle = widget.getBounds();
|
||||
final Area mapViewArea = getWorldMapClipArea(worldMapRectangle);
|
||||
final Rectangle canvasBounds = client.getCanvas().getBounds();
|
||||
// in fixed, the bounds are offset by the size of the black borders outside the canvas
|
||||
canvasBounds.setLocation(0, 0);
|
||||
final Rectangle canvasBounds = new Rectangle(0, 0, client.getCanvasWidth(), client.getCanvasHeight());
|
||||
final Area canvasViewArea = getWorldMapClipArea(canvasBounds);
|
||||
Area currentClip = null;
|
||||
|
||||
@@ -265,7 +263,9 @@ public class WorldMapOverlay extends Overlay
|
||||
|
||||
drawPoint = new Point(drawPoint.getX() + TOOLTIP_OFFSET_WIDTH, drawPoint.getY() + TOOLTIP_OFFSET_HEIGHT);
|
||||
|
||||
graphics.setClip(client.getCanvas().getBounds());
|
||||
final Rectangle bounds = new Rectangle(0, 0, client.getCanvasWidth(), client.getCanvasHeight());
|
||||
final Area mapArea = getWorldMapClipArea(bounds);
|
||||
graphics.setClip(mapArea);
|
||||
graphics.setColor(JagexColors.TOOLTIP_BACKGROUND);
|
||||
graphics.setFont(FontManager.getRunescapeFont());
|
||||
FontMetrics fm = graphics.getFontMetrics();
|
||||
|
||||
@@ -31,7 +31,7 @@ uniform float smoothBanding;
|
||||
uniform vec4 fogColor;
|
||||
|
||||
in vec4 Color;
|
||||
in float fHsl;
|
||||
centroid in float fHsl;
|
||||
in vec4 fUv;
|
||||
in float fogAmount;
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
"level": 75,
|
||||
"icon": 23962,
|
||||
"name": "Prifddinas Agility Course",
|
||||
"xp": 1220
|
||||
"xp": 1337
|
||||
},
|
||||
{
|
||||
"level": 80,
|
||||
|
||||
@@ -608,4 +608,24 @@ public class ItemsKeptOnDeathPluginTest
|
||||
final List<ItemStack> kept = deathItems.getKeptItems();
|
||||
assertTrue(kept.contains(new ItemStack(ItemID.SHADOW_SWORD, 1)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void brokenOnDeathTestRepairPrice()
|
||||
{
|
||||
// Dragon defender price should actually be pulled from BrokenOnDeathItem, and be lost on death
|
||||
final Item[] inv = new Item[]
|
||||
{
|
||||
mItem(ItemID.BARROWS_GLOVES, 1, "Barrows gloves", false, 130000),
|
||||
mItem(ItemID.DRAGON_DEFENDER, 1, "Dragon defender", false, 68007),
|
||||
mItem(ItemID.DRAGON_SCIMITAR, 1, "Dragon scimitar", true, 63123),
|
||||
mItem(ItemID.HELM_OF_NEITIZNOT, 1, "Helm of neitiznot", true, 45519),
|
||||
};
|
||||
|
||||
plugin.wildyLevel = 21;
|
||||
|
||||
final DeathItems deathItems = plugin.calculateKeptLostItems(inv, new Item[0]);
|
||||
|
||||
final List<ItemStack> lost = deathItems.getLostItems();
|
||||
assertTrue(lost.contains(new ItemStack(ItemID.DRAGON_DEFENDER, 1)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user