diff --git a/gradle.properties b/gradle.properties index c23f4c0aa38..42d4cbeb03e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,11 +28,11 @@ org.gradle.parallel=true org.gradle.caching=false project.build.group=net.runelite -project.build.version=1.12.31.1 -runelite.injected-client.version=1.12.31.1 +project.build.version=1.12.32 +runelite.injected-client.version=1.12.32 glslang.path= -microbot.version=2.6.12 +microbot.version=2.6.13 microbot.commit.sha=nogit microbot.repo.url=http://138.201.81.246:8081/repository/microbot-snapshot/ microbot.repo.username= diff --git a/runelite-api/src/main/java/net/runelite/api/Animation.java b/runelite-api/src/main/java/net/runelite/api/Animation.java index fcfecbb131f..95adf226984 100644 --- a/runelite-api/src/main/java/net/runelite/api/Animation.java +++ b/runelite-api/src/main/java/net/runelite/api/Animation.java @@ -75,4 +75,18 @@ public interface Animation * {@code null} for {@link #isMayaAnim()} animations */ int[] getFrameLengths(); + + /** + * Get the left hand item for this animation + * @see net.runelite.api.gameval.ItemID + * @return the item id or -1 + */ + int getLeftHandItem(); + + /** + * Get the right hand item for this animation + * @see net.runelite.api.gameval.ItemID + * @return the item id or -1 + */ + int getRightHandItem(); } diff --git a/runelite-api/src/main/java/net/runelite/api/ItemID.java b/runelite-api/src/main/java/net/runelite/api/ItemID.java index 8b6630117df..7e9d653412d 100644 --- a/runelite-api/src/main/java/net/runelite/api/ItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/ItemID.java @@ -8629,6 +8629,9 @@ public final class ItemID public static final int CABBAGE_RUNE = 13680; public static final int CRUCIFEROUS_CODEX = 13681; public static final int PHARAOHS_SCEPTRE_16176 = 16176; + public static final int STAKE_16492 = 16492; + public static final int GOLDEN_KEY_16494 = 16494; + public static final int IRON_KEY_16495 = 16495; public static final int USELESS_KEY_16684 = 16684; public static final int NEW_CRYSTAL_BOW_16888 = 16888; public static final int NEW_CRYSTAL_BOW_I_16889 = 16889; @@ -16395,8 +16398,8 @@ public final class ItemID public static final int TARNISHED_BATTLEAXE = 33683; public static final int TARNISHED_HALBERD = 33685; public static final int TARNISHED_RING = 33687; - public static final int TARNISHED_NECKLACE = 33689; - public static final int TARNISHED_NECKLACE_33691 = 33691; + public static final int TARNISHED_BRACELET = 33689; + public static final int TARNISHED_NECKLACE = 33691; public static final int TARNISHED_AMULET = 33693; public static final int VENATOR_HEART = 33695; public static final int DRIED_OUT_VENATOR_HEART = 33697; @@ -16519,5 +16522,7 @@ public final class ItemID public static final int STYMPHIKE = 33824; public static final int LETVEK_33825 = 33825; public static final int VENATOR = 33826; + public static final int ANCIENT_SCEPTRE_L_BROKEN = 33827; + public static final int ANCIENT_SCEPTRE_L_MANGLED = 33829; /* This file is automatically generated. Do not edit. */ } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/Model.java b/runelite-api/src/main/java/net/runelite/api/Model.java index 456b82e87f4..598f2dabfbc 100644 --- a/runelite-api/src/main/java/net/runelite/api/Model.java +++ b/runelite-api/src/main/java/net/runelite/api/Model.java @@ -52,6 +52,8 @@ public interface Model extends Mesh, Renderable void calculateBoundsCylinder(); + byte getTransparency(); + byte[] getFaceRenderPriorities(); byte[] getFaceBias(); diff --git a/runelite-api/src/main/java/net/runelite/api/NpcID.java b/runelite-api/src/main/java/net/runelite/api/NpcID.java index 59e94b88930..865d3c7e9fa 100644 --- a/runelite-api/src/main/java/net/runelite/api/NpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/NpcID.java @@ -13111,7 +13111,7 @@ public final class NpcID public static final int VENATOR_15767 = 15767; public static final int VENATOR_15768 = 15768; public static final int VENATOR_15769 = 15769; - public static final int SUPERIOR_VENATOR = 15770; + public static final int BLOODSTARVED_VENATOR = 15770; public static final int VASILE = 15772; public static final int VASILE_15773 = 15773; public static final int OLD_MAN_RAL = 15774; diff --git a/runelite-api/src/main/java/net/runelite/api/NullItemID.java b/runelite-api/src/main/java/net/runelite/api/NullItemID.java index 4db777a975e..b469afb774e 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullItemID.java @@ -16990,5 +16990,7 @@ public final class NullItemID public static final int NULL_33723 = 33723; public static final int NULL_33822 = 33822; public static final int NULL_33823 = 33823; + public static final int NULL_33828 = 33828; + public static final int NULL_33830 = 33830; /* This file is automatically generated. Do not edit. */ } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/RuneLiteObjectController.java b/runelite-api/src/main/java/net/runelite/api/RuneLiteObjectController.java index 2d120e6591e..b2b6ce7e900 100644 --- a/runelite-api/src/main/java/net/runelite/api/RuneLiteObjectController.java +++ b/runelite-api/src/main/java/net/runelite/api/RuneLiteObjectController.java @@ -27,6 +27,7 @@ import lombok.Getter; import lombok.Setter; import net.runelite.api.coords.LocalPoint; +import org.intellij.lang.annotations.MagicConstant; @Getter @Setter @@ -62,6 +63,19 @@ public abstract class RuneLiteObjectController */ private int orientation = 0; + /** + * The render mode to use when drawing the model. + * @see net.runelite.api.Renderable + */ + @MagicConstant(intValues = { + Renderable.RENDERMODE_DEFAULT, + Renderable.RENDERMODE_SORTED, + Renderable.RENDERMODE_SORTED_NO_DEPTH, + Renderable.RENDERMODE_UNSORTED, + Renderable.RENDERMODE_UNSORTED_NO_DEPTH, + }) + private int renderMode = Renderable.RENDERMODE_DEFAULT; + /** * Sets the location in the scene for the RuneLiteObjectController */ diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java b/runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java index 7bd742765a5..60e574d4d06 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java @@ -570,6 +570,7 @@ public final class AnimationID public static final int CHATBORED2 = 563; public static final int CHATBORED3 = 564; public static final int CHATBORED4 = 565; + public static final int HUMAN_WEAPONS_CRIMSON_KISTEN_ATTACK_ALT = 566; public static final int CHATHAP1 = 567; public static final int CHATHAP2 = 568; public static final int CHATHAP3 = 569; diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java b/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java index 8806b676944..c74cd09120d 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java @@ -5045,15 +5045,20 @@ public static final class Music */ public static final int COL_SECONDARY_TRACK = 11; + /** + * dbrow + */ + public static final int COL_PARENT_TRACK = 12; + /** * integer */ - public static final int COL_RELEASE_TYPE = 12; + public static final int COL_RELEASE_TYPE = 13; /** * integer */ - public static final int COL_RELATED_CONTENT = 13; + public static final int COL_RELATED_CONTENT = 14; public static final class Row { @@ -22272,7 +22277,6 @@ public static final class Row public static final int SKILL_FEATURE_AGILITY_VAMPYRIUM_CRAWL = 16895; public static final int SKILL_FEATURE_AGILITY_VAMPYRIUM_PILLAR_JUMPS = 16896; public static final int SKILL_FEATURE_AGILITY_VAMPYRIUM_SLIDES = 16897; - public static final int SKILL_FEATURE_CRAFTING_NECKLACE_OF_RUPTURE = 16898; public static final int SKILL_FEATURE_FISHING_LEECHFIN = 16899; public static final int SKILL_FEATURE_HITPOINTS_NECKLACEOFRUPTURE = 16900; public static final int SKILL_FEATURE_HUNTER_STYMPHIKE = 16901; @@ -23609,6 +23613,16 @@ public static final class CastleDrakanDoor */ public static final int COL_MAP_DETAILS = 9; + /** + * dbrow + */ + public static final int COL_UNLOCK_SIDE = 10; + + /** + * namedobj + */ + public static final int COL_KEY = 11; + /** * integer */ diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java b/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java index 39c727293c4..b652d7b8272 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java @@ -934,6 +934,7 @@ public final class InterfaceID public static final int EVENT_REWARDS = 927; public static final int BALLOT = 928; public static final int TUTORIAL_PLAYER_EXPERIENCE = 929; + public static final int SANGVESTI_WORLD_MAP = 930; public static final int SAILING_BT_HUD = 931; public static final int SAILING_BT_SELECTION = 932; public static final int SAILING_BT_STATISTICS = 933; @@ -30464,6 +30465,22 @@ public static final class TutorialPlayerExperience public static final int BUTTON_EXPERIENCED = 0x03a1_0007; } + public static final class SangvestiWorldMap + { + public static final int UNIVERSE = 0x03a2_0000; + public static final int CONTENTS = 0x03a2_0001; + public static final int FRAME = 0x03a2_0002; + public static final int BACKGROUND = 0x03a2_0003; + public static final int DRAG = 0x03a2_0004; + public static final int MAIN = 0x03a2_0005; + public static final int MAP = 0x03a2_0006; + public static final int MAP_GRAPHIC0 = 0x03a2_0007; + public static final int MAP_BACK = 0x03a2_0008; + public static final int MAP_FRONT = 0x03a2_0009; + public static final int CLOSE = 0x03a2_000a; + public static final int TOOLTIP = 0x03a2_000b; + } + public static final class SailingBtHud { public static final int UNIVERSE = 0x03a3_0000; @@ -31328,6 +31345,7 @@ public static final class CastleDrakanWorldMap public static final int MAP_BACK = 0x03c7_000c; public static final int MAP_FRONT = 0x03c7_000d; public static final int CLOSE = 0x03c7_000e; + public static final int TOOLTIP = 0x03c7_000f; } public static final class Myq6IntegrityBar diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java b/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java index 0d774943843..d75f8d97d4b 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java @@ -46496,6 +46496,21 @@ public final class ItemID */ public static final int PLACEHOLDER_NTK_JEWELLED_SCEPTRE_8 = 16176; + /** + * Stake + */ + public static final int PLACEHOLDER_STAKE = 16492; + + /** + * Golden key + */ + public static final int PLACEHOLDER_PIPKEY_GOLD = 16494; + + /** + * Iron key + */ + public static final int PLACEHOLDER_PIPKEY_IRON = 16495; + /** * Useless key */ @@ -88044,7 +88059,7 @@ public final class ItemID public static final int TARNISHED_RING = 33687; /** - * Tarnished necklace + * Tarnished bracelet */ public static final int TARNISHED_BRACELET = 33689; @@ -88663,6 +88678,16 @@ public final class ItemID */ public static final int SLAYERGUIDE_VENATOR = 33826; + /** + * Ancient sceptre (l) (broken) + */ + public static final int ANCIENT_SCEPTRE_TROUVER_BROKEN = 33827; + + /** + * Ancient sceptre (l) (mangled) + */ + public static final int ANCIENT_SCEPTRE_TROUVER_MANGLED = 33829; + public static final class Cert { public static final int TWPART1 = 7; @@ -102963,6 +102988,8 @@ public static final class Placeholder public static final int HALLOWED_FLAIL = 33719; public static final int SUNSPEAR = 33723; public static final int RAW_IMPALER_MEAT = 33823; + public static final int ANCIENT_SCEPTRE_TROUVER_BROKEN = 33828; + public static final int ANCIENT_SCEPTRE_TROUVER_MANGLED = 33830; } /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/NpcID.java b/runelite-api/src/main/java/net/runelite/api/gameval/NpcID.java index fbf9e81f7b7..b6d811857c9 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/NpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/NpcID.java @@ -68279,7 +68279,7 @@ public final class NpcID public static final int VENATOR_5 = 15769; /** - * Superior venator + * Blood-starved venator */ public static final int SUPERIOR_VENATOR = 15770; public static final int BURGH_BREWING_HELPER = 15771; diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java b/runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java index b158cd0bb28..7bbac1fc73c 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java @@ -1796,6 +1796,7 @@ public final class SpotanimID public static final int ELDRITCH_SMOKE_IMPACT = 1789; public static final int VANSTROM_BLOODVELD_BURST = 1790; public static final int VANSTROM_ORB_EXPLODE = 1791; + public static final int MAGGOT_KING_POISON_PROJECTILE = 1792; public static final int VANSTROM_ENRAGE_POWERUP = 1793; public static final int VANSTROM_LIGHTNING = 1794; public static final int HALLOWED_GRAPPLE_SPOT = 1795; diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java b/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java index 5d95cd3e551..fdcc37063c6 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java @@ -857,6 +857,7 @@ public final class SpriteID public static final int CASTLE_DRAKAN_ROOM_51 = 8511; public static final int LEAFYTREE_DARKWOOD = 8512; public static final int LEAFYTREE_DARKWOOD_TILED = 8513; + public static final int SANGVESTI = 8515; public static final class _2XStandardSpellsOn { @@ -12315,5 +12316,6 @@ public static final class CastleDrakanRoomIcons public static final int _1 = 8455; public static final int _2 = 8456; public static final int _3 = 8457; + public static final int _4 = 8514; } } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java b/runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java index 4cd6bc5fc26..cb386dd122e 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java @@ -2918,5 +2918,8 @@ public final class VarPlayerID public static final int MAGGOT_KING_ATTEMPTS = 5665; public static final int DRAKAN_ENCOUNTER_ATTEMPTS = 5666; public static final int DRAKAN_FINAL_MIN_HP = 5667; + public static final int SANGVESTI_GENERAL_3 = 5668; + public static final int SANGVESTI_PLAYER_POS = 5669; + public static final int SANGVESTI_PLAYER_LAST_DEATH_POS = 5670; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java b/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java index d50b66250b2..7705c126cce 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java @@ -10230,6 +10230,28 @@ public final class VarbitID public static final int DRAKAN_ENCOUNTER_3_ATTEMPTS = 15622; public static final int DRAKAN_ENCOUNTER_4_ATTEMPTS = 15623; public static final int VAMPYRE_AGGRESSION_DARKMEYER = 15624; + public static final int VAMPYRIUM_AGILITY_FLAVOUR_DIALOGUE = 15625; + public static final int MAGGOT_KING_REDUCED_DEATH_FEE_KILLS = 15626; + public static final int MYQ6_OWED_SPEAR = 15627; + public static final int CASTLE_DRAKAN_EMBLEM_HOLDER_USED = 15628; + public static final int SANGVESTI_CLOTHES_SHOP_DOOR_FOUND = 15629; + public static final int SANGVESTI_CLOTHES_SHOP_BACK_DOOR_FOUND = 15630; + public static final int SANGVESTI_FANCY_HOUSE_3_DOOR_FOUND = 15631; + public static final int SANGVESTI_FANCY_HOUSE_3_BACK_DOOR_FOUND = 15632; + public static final int SANGVESTI_CHAPEL_BACK_DOOR_1_FOUND = 15633; + public static final int SANGVESTI_CHAPEL_BACK_DOOR_2_FOUND = 15634; + public static final int SANGVESTI_TRAPDOOR_FOUND = 15635; + public static final int SANGVESTI_BLACKSMITH_DOOR_FOUND = 15636; + public static final int SANGVESTI_BASIC_HOUSE_DOOR_FOUND = 15637; + public static final int SANGVESTI_PUB_DOOR_FOUND = 15638; + public static final int SANGVESTI_PUB_BACK_DOOR_FOUND = 15639; + public static final int SANGVESTI_MYRMEL_MANOR_DOOR_FOUND = 15640; + public static final int SANGVESTI_MYRMEL_MANOR_BACK_DOOR_FOUND = 15641; + public static final int SANGVESTI_BANK_DOOR_FOUND = 15642; + public static final int SANGVESTI_INTERIOR_BANK_DOOR_FOUND = 15643; + public static final int SANGVESTI_SHADUM_MANOR_DOOR_FOUND = 15644; + public static final int SANGVESTI_FANCY_HOUSE_1_DOOR_FOUND = 15645; + public static final int SANGVESTI_FANCY_HOUSE_1_BACK_DOOR_FOUND = 15646; public static final int LEAGUE_HASNT_USED_BOOTS_FOR_MOUNT_QUID = 15647; public static final int LEAGUE_ELVES_KILLED = 15648; public static final int LEAGUE_BASALT_STONES_STARTED = 15649; @@ -10249,7 +10271,24 @@ public final class VarbitID public static final int LEAGUE_RUNE_DART_TIPS_IN_PRIF = 15663; public static final int LEAGUE_RED_CHINCHOMPAS_IN_TIRANNWN = 15664; public static final int LEAGUE_ZAHUR_POTION_COUNTER = 15665; + public static final int SANGVESTI_VITUR_MANOR_DOOR_FOUND = 15666; + public static final int SANGVESTI_FANCY_HOUSE_2_DOOR_FOUND = 15667; + public static final int SANGVESTI_FANCY_HOUSE_2_BACK_DOOR_FOUND = 15668; + public static final int SANGVESTI_FOOD_SHOP_DOOR_FOUND = 15669; + public static final int SANGVESTI_FOOD_SHOP_BACK_DOOR_FOUND = 15670; public static final int XMAS24_INVITE_GERTRUDE = 15671; + public static final int SANGVESTI_GENERAL_STORE_DOOR_FOUND = 15672; + public static final int SANGVESTI_BASIC_HOUSE_2_DOOR_FOUND = 15673; + public static final int SANGVESTI_BASIC_HOUSE_3_DOOR_FOUND = 15674; + public static final int SANGVESTI_HINT_FANCY_HOUSE_3 = 15675; + public static final int SANGVESTI_HINT_VITUR_MANOR = 15676; + public static final int SANGVESTI_HINT_CHAPEL = 15677; + public static final int SANGVESTI_HINT_FOOD_SHOP = 15678; + public static final int SANGVESTI_HINT_BASIC_HOUSE_3 = 15679; + public static final int SANGVESTI_HINT_PUB = 15680; + public static final int SANGVESTI_HINT_CLOTHES_SHOP = 15681; + public static final int SANGVESTI_HINT_FANCY_HOUSE_1 = 15682; + public static final int SANGVESTI_HINT_BLACKSMITH = 15683; public static final int XMAS24_INVITE_CHARLIE = 15796; public static final int XMAS24_INVITES = 15800; public static final int XMAS24_MATCH_AMIK = 15892; diff --git a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java index 3b7c6fbfb66..f5cbce8f3bc 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java +++ b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java @@ -228,6 +228,8 @@ public boolean matches(Client client, TileObject object) GREAT_CONCH_STEPPING_STONE(61, "Stepping Stone", new WorldPoint(3208, 2394, 0), ObjectID.GREAT_CONCH_STEPPING_STONE), LAGUNA_AURORAE_SHORTCUT_1(61, "Rocks", new WorldPoint(1152, 2804, 0), ObjectID.LAGUNA_AURORAE_SHORTCUT_1), LAGUNA_AURORAE_SHORTCUT_2(61, "Rocks", new WorldPoint(1142, 2803, 0), ObjectID.LAGUNA_AURORAE_SHORTCUT_2), + CASTLE_DRAKAN_ROCKS_UP(61, "Rocks", new WorldPoint(2555, 7821, 0), ObjectID.VOROS_ROCKSLIDE02_SHORTCUT_UP), + APSUL_HUNTING_GROUND_ROCKS_UP(61, "Rocks", new WorldPoint(2576, 7768, 0), ObjectID.VOROS_ROCKSLIDE02_SHORTCUT_UP_BIG), MOUNT_KARUULM_UPPER(62, "Rocks", new WorldPoint(1322, 3791, 0), ObjectID.MOUNT_KARUULM_SHORTCUT_ROCKS), NECROPOLIS_STEPPING_STONE_NORTH(62, "Stepping Stone", new WorldPoint(3293, 2706, 0), ObjectID.NECROPOLIS_STEPPING_STONE_2), NECROPOLIS_STEPPING_STONES_SOUTH(62, "Stepping Stones", new WorldPoint(3291, 2700, 0), ObjectID.NECROPOLIS_STEPPING_STONE_1), @@ -236,7 +238,10 @@ public boolean matches(Client client, TileObject object) DARKMEYER_WALL(63, "Wall (Long rope)", new WorldPoint(3669, 3375, 0), ObjectID.DARKM_OUTER_WALL_3H_SHORTCUT, ObjectID.DARKM_OUTER_WALL_2H_SHORTCUT), TROLLHEIM_WILDERNESS_ROCKS_EAST(64, "Rocks", new WorldPoint(2945, 3678, 0), ObjectID.TROLLHEIM_WILDY_CLIMB_ROCKS), TROLLHEIM_WILDERNESS_ROCKS_WEST(64, "Rocks", new WorldPoint(2917, 3672, 0), ObjectID.TROLLHEIM_WILDY_CLIMB_ROCKS), + STALKER_DEN_STEEPING_STONE(64, "Stepping Stone", new WorldPoint(1372, 9720, 0), ObjectID.STALKER_DEN_STEPPING_STONE), FOSSIL_ISLAND_VOLCANO(64, "Rope", new WorldPoint(3780, 3822, 0), ObjectID.FOSSIL_VOLCANO_AGILITY_ROPE_BOTTOM, ObjectID.FOSSIL_VOLCANO_AGILITY_ROPE_TOP), + SANGVESTI_BUSH_WEST(64, "Bush", new WorldPoint(2656, 7816, 0), ObjectID.BUSH_SHORTCUT), + SANGVESTI_BUSH_EAST(64, "Bush", new WorldPoint(2666, 7837, 0), ObjectID.BUSH_SHORTCUT), MORYTANIA_TEMPLE(65, "Loose Railing", new WorldPoint(3422, 3476, 0), ObjectID.MORYTANIA_CLIMBINGROCKS_SC_TOP, ObjectID.MORYTANIA_CLIMBINGROCKS_SC_BOTTOM, ObjectID.MORYTANIA_RAILING_SC_FENCE_1, ObjectID.MORYTANIA_RAILING_SC_FENCE_2), REVENANT_CAVES_GREEN_DRAGONS(65, "Jump", new WorldPoint(3220, 10086, 0), ObjectID.WILD_CAVE_AGILITY_JUMP), COSMIC_ALTAR_ADVANCED_WALKWAY(66, "Narrow Walkway", new WorldPoint(2408, 4401, 0), ObjectID.FAIRY_SC_JUTTINGWALL), @@ -289,6 +294,14 @@ public boolean matches(Client client, TileObject object) COF_PLATFORM_TOP(73, "Platform Edge", new WorldPoint(1309, 10099, 0), new WorldPoint(1438, 10098, 2), ObjectID.COF_AGILITY_LIP), COF_PLATFORM_MID(73, "Jump", new WorldPoint(1314, 10002, 0), new WorldPoint(1443, 10097, 1), ObjectID.COF_AGILITY_JUMP), ARCEUUS_ESSENSE_MINE_WEST(73, "Rock Climb", new WorldPoint(1742, 3853, 0), ObjectID.ARCHEUUS_RUNESTONE_SHORTCUT_GREY_TOP, ObjectID.ARCHEUUS_RUNESTONE_SHORTCUT_GREY_BOTTOM), + VAMPYRIUM_PILLAR(73, "Pillar Jump", new WorldPoint(2571, 7797, 0), ObjectID.VAMPYRIUM_STEPPING_STONE_SHORTCUT_PILLAR) + { + @Override + public boolean matches(Client client, TileObject object) + { + return client.getVarbitValue(VarbitID.VAMPYRIUM_TRAVERSAL_ROCK_MINED) == 1; + } + }, LAVA_DRAGON_ISLE_JUMP(74, "Stepping Stone", new WorldPoint(3200, 3807, 0), ObjectID.WILDERNESS_LAVA_DRAGONS_SHORTCUT), MEIYERDITCH_LAB_TUNNELS_NORTH(74, "Cave", new WorldPoint(3623, 9747, 0), ObjectID.MYQ5_WALL_CAVE_SHORTCUT_1, ObjectID.MYQ5_WALL_CAVE_SHORTCUT_2), MEIYERDITCH_LAB_TUNNELS_SOUTH(74, "Cave", new WorldPoint(3618, 9722, 0), ObjectID.MYQ5_WALL_CAVE_SHORTCUT_3, ObjectID.MYQ5_WALL_CAVE_SHORTCUT_4), @@ -305,6 +318,8 @@ public boolean matches(Client client, TileObject object) WILDERNESS_SLAYER_CAVE_CREVICE_SOUTH_WEST(77, "Crevice", new WorldPoint(3333, 10119, 0), ObjectID.WILDERNESS_SLAYER_CAVE_CREVICE), IORWERTHS_DUNGEON_NORTHERN_SHORTCUT_EAST(78, "Tight Gap", new WorldPoint(3221, 12441, 0), ObjectID.PRIF_SLAYER_DUNGEON_SHORTCUT_1A), IORWERTHS_DUNGEON_NORTHERN_SHORTCUT_WEST(78, "Tight Gap", new WorldPoint(3215, 12441, 0), ObjectID.PRIF_SLAYER_DUNGEON_SHORTCUT_1B), + CASTLE_DRAKAN_ROCKS_DOWN(78, "Rocks", new WorldPoint(2555, 7821, 0), ObjectID.VOROS_ROCKSLIDE02_SHORTCUT_DOWN), + APSUL_HUNTING_GROUND_ROCKS_DOWN(78, "Rocks", new WorldPoint(2576, 7768, 0), ObjectID.VOROS_ROCKSLIDE02_SHORTCUT_DOWN_BIG), SHILO_VILLAGE_ROCKS(79, "Rocks", new WorldPoint(2870, 3003, 0), ObjectID.SHORTCUT_SHILO_ROCKS_TOP, ObjectID.SHORTCUT_SHILO_ROCKS_BOTTOM), KHARAZI_JUNGLE_VINE_CLIMB(79, "Vine", new WorldPoint(2897, 2939, 0), ObjectID.KHARAZI_SHORTCUT_VINE_END, ObjectID.KHARAZI_SHORTCUT_VINE_DIAG1), TAVERLEY_DUNGEON_SPIKED_BLADES(80, "Strange Floor", new WorldPoint(2877, 9813, 0), ObjectID.TAVERLY_DUNGEON_FLOOR_SPIKES_SC), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsService.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsService.java index 48301c22162..cca7f39509d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsService.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsService.java @@ -49,6 +49,10 @@ public interface BankTagsService * Option to prevent {@link #openBankTag(String, int)} from performing a layout */ int OPTION_NO_LAYOUT = 0x4; + /** + * Option to put items in the bank but not in the layout at the bottom + */ + int OPTION_ITEMS_NOT_IN_LAYOUT_AT_BOTTOM = 0x8; /** * Open the given bank tag. The tag may have an associated {@link net.runelite.client.plugins.banktags.tabs.TagTab}, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/Layout.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/Layout.java index 1ac4778e730..98912df77f2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/Layout.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/Layout.java @@ -197,4 +197,16 @@ public void resize(int size) } layout = n; } + + int lastItemIndex() + { + for (int i = layout.length - 1; i >= 0; --i) + { + if (layout[i] != -1) + { + return i; + } + } + return -1; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/LayoutManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/LayoutManager.java index 5b4da2127dc..c30740dca4c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/LayoutManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/LayoutManager.java @@ -272,24 +272,24 @@ private void layout(Layout l) drawItem(l, c, bank, bankItemId, pos); } - int lastEmptySlot = -1; + int insertionSlot = (plugin.getOptions() & BankTagsService.OPTION_ITEMS_NOT_IN_LAYOUT_AT_BOTTOM) != 0 ? l.lastItemIndex() : -1; boolean modified = false; // Items from the bank but not in the layout. for (int itemId : bankItems) { do { - ++lastEmptySlot; + ++insertionSlot; } - while (lastEmptySlot < layout.length && layout[lastEmptySlot] > -1); + while (l.getItemAtPos(insertionSlot) > -1); - Widget c = itemContainer.getChild(lastEmptySlot); + Widget c = itemContainer.getChild(insertionSlot); if (c == null || c.getOriginalHeight() != BANK_ITEM_HEIGHT) // check for tabs { break; } - drawItem(l, c, bank, itemId, lastEmptySlot); + drawItem(l, c, bank, itemId, insertionSlot); if (log.isDebugEnabled()) { @@ -300,26 +300,27 @@ private void layout(Layout l) } int layoutItemId = itemManager.canonicalize(itemId); - l.addItem(layoutItemId); + l.addItemAfter(layoutItemId, insertionSlot); modified = true; } // Fill the remaining slots with -1 so that items can be dragged to them + insertionSlot = -1; while (true) { do { - ++lastEmptySlot; + ++insertionSlot; } - while (lastEmptySlot < layout.length && layout[lastEmptySlot] > -1); + while (l.getItemAtPos(insertionSlot) > -1); - Widget c = itemContainer.getChild(lastEmptySlot); + Widget c = itemContainer.getChild(insertionSlot); if (c == null || c.getOriginalHeight() != BANK_ITEM_HEIGHT) // check for tabs { break; } - drawItem(l, c, bank, -1, lastEmptySlot); + drawItem(l, c, bank, -1, insertionSlot); } if (modified) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java index 107bfbe5218..3c393fb61c8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java @@ -161,7 +161,7 @@ public enum HotColdLocation WESTERN_PROVINCE_EAGLES_PEAK(MASTER, new WorldPoint(2297, 3529, 0), WESTERN_PROVINCE, "North-west of Eagles' Peak.", BRASSICAN_MAGE), WESTERN_PROVINCE_PISCATORIS(MASTER, new WorldPoint(2334, 3685, 0), WESTERN_PROVINCE, "Piscatoris Fishing Colony", ANCIENT_WIZARDS), WESTERN_PROVINCE_PISCATORIS_HUNTER_AREA(MASTER, new WorldPoint(2359, 3564, 0), WESTERN_PROVINCE, "Eastern part of Piscatoris Hunter area, south-west of the Falconry.", BRASSICAN_MAGE), - WESTERN_PROVINCE_ARANDAR(MASTER, new WorldPoint(2370, 3319, 0), WESTERN_PROVINCE, "South-west of the crystal gate to Arandar.", BRASSICAN_OR_WIZARDS), + WESTERN_PROVINCE_ARANDAR(MASTER, new WorldPoint(2370, 3318, 0), WESTERN_PROVINCE, "South-west of the crystal gate to Arandar.", BRASSICAN_OR_WIZARDS), WESTERN_PROVINCE_ELF_CAMP_EAST(MASTER, new WorldPoint(2268, 3242, 0), WESTERN_PROVINCE, "East of Iorwerth Camp.", BRASSICAN_MAGE), WESTERN_PROVINCE_ELF_CAMP_NW(MASTER, new WorldPoint(2177, 3282, 0), WESTERN_PROVINCE, "North-west of Iorwerth Camp.", BRASSICAN_MAGE), WESTERN_PROVINCE_LLETYA(MASTER, new WorldPoint(2337, 3166, 0), WESTERN_PROVINCE, "In Lletya.", BRASSICAN_MAGE), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java index eb20b4887da..789d40a8463 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java @@ -106,6 +106,7 @@ int uploadSortedModel(Projection proj, Model model, int orientation, int x, int final short[] faceTextures = model.getFaceTextures(); final byte[] transparencies = model.getFaceTransparencies(); + final byte modelTransparency = model.getTransparency(); final byte[] bias = model.getFaceBias(); float orientSine = 0; @@ -232,7 +233,7 @@ int uploadSortedModel(Projection proj, Model model, int orientation, int x, int } int alphaBias = 0; - alphaBias |= transparencies != null ? (transparencies[faceIdx] & 0xff) << 24 : 0; + alphaBias |= faceTransparency(modelTransparency, transparencies != null ? transparencies[faceIdx] & 0xff : 0) << 24; alphaBias |= bias != null ? (bias[faceIdx] & 0xff) << 16 : 0; int texture = faceTextures != null ? faceTextures[faceIdx] + 1 : 0; @@ -268,8 +269,9 @@ int uploadSortedModel(Projection proj, Model model, int orientation, int x, int { for (char face = zsortHead[i]; face != (char) -1; face = zsortNext[face]) { - var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; - b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); + int offset = face * FACE_SIZE; + var b = (vertexBuffer[offset + 3] & 0xff000000) != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, offset, FACE_SIZE); } } } @@ -346,8 +348,9 @@ else if (pri == 10) while (pri == 0 && currFaceDistance > avg12) { final int face = dynFaces[drawnFaces++]; - var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; - b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); + int offset = face * FACE_SIZE; + var b = (vertexBuffer[offset + 3] & 0xff000000) != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, offset, FACE_SIZE); if (drawnFaces == numDynFaces && dynFaces != orderedFaces[11]) { @@ -370,8 +373,9 @@ else if (pri == 10) while (pri == 3 && currFaceDistance > avg34) { final int face = dynFaces[drawnFaces++]; - var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; - b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); + int offset = face * FACE_SIZE; + var b = (vertexBuffer[offset + 3] & 0xff000000) != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, offset, FACE_SIZE); if (drawnFaces == numDynFaces && dynFaces != orderedFaces[11]) { @@ -394,8 +398,9 @@ else if (pri == 10) while (pri == 5 && currFaceDistance > avg68) { final int face = dynFaces[drawnFaces++]; - var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; - b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); + int offset = face * FACE_SIZE; + var b = (vertexBuffer[offset + 3] & 0xff000000) != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, offset, FACE_SIZE); if (drawnFaces == numDynFaces && dynFaces != orderedFaces[11]) { @@ -421,16 +426,18 @@ else if (pri == 10) for (int faceIdx = 0; faceIdx < priNum; ++faceIdx) { final int face = priFaces[faceIdx]; - var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; - b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); + int offset = face * FACE_SIZE; + var b = (vertexBuffer[offset + 3] & 0xff000000) != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, offset, FACE_SIZE); } } while (currFaceDistance != -1000) { final int face = dynFaces[drawnFaces++]; - var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; - b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); + int offset = face * FACE_SIZE; + var b = (vertexBuffer[offset + 3] & 0xff000000) != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, offset, FACE_SIZE); if (drawnFaces == numDynFaces && dynFaces != orderedFaces[11]) { @@ -453,4 +460,20 @@ else if (pri == 10) return len; } + + private static int faceTransparency(byte modelTransparency, int faceTransparency) + { + if (modelTransparency == -1) + { + return 255; + } + int t = modelTransparency & 255; + if (t > 0 && faceTransparency < 253) + { + int a = (253 - faceTransparency) * t >> 8; + assert (faceTransparency & 255) == faceTransparency; + return faceTransparency + a; + } + return faceTransparency; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java index ae96637ac02..4797098d6fd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java @@ -1218,7 +1218,7 @@ public void drawTemp(Projection worldProjection, Scene scene, GameObject gameObj Renderable renderable = gameObject.getRenderable(); int size = m.getFaceCount() * 3 * VAO.VERT_SIZE; int renderMode = renderable.getRenderMode(); - if (renderMode == Renderable.RENDERMODE_SORTED_NO_DEPTH || m.getFaceTransparencies() != null) + if (renderMode == Renderable.RENDERMODE_SORTED_NO_DEPTH || m.getFaceTransparencies() != null || m.getTransparency() != 0) { VAO o = vaoO.get(size); VAO a = vaoA.get(size); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java index c54c231b1b8..bdb70902514 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java @@ -178,6 +178,7 @@ public void onGameObjectSpawned(GameObjectSpawned event) case ObjectID.HUNTING_BOXTRAP_FULL_CHINCHOMPA_BIG: // Red chinchompa caught case ObjectID.HUNTING_BOXTRAP_FULL_FERRET: // Ferret caught case ObjectID.HUNTING_BOXTRAP_FULL_JERBOA: // Embertailed jerboa caught + case ObjectID.HUNTING_BOXTRAP_FULL_LETVEK: // Letvek caught case ObjectID.HUNTING_DEADFALL_FULL_SPIKE: // Prickly kebbit caught case ObjectID.HUNTING_DEADFALL_FULL_SABRE: // Sabre-tooth kebbit caught case ObjectID.HUNTING_DEADFALL_FULL_BARBED: // Barb-tailed kebbit caught @@ -261,6 +262,12 @@ public void onGameObjectSpawned(GameObjectSpawned event) case ObjectID.HUNTING_BOXTRAP_TRAPPING_JERBOA_S: case ObjectID.HUNTING_BOXTRAP_TRAPPING_JERBOA_W: + // Letvek box + case ObjectID.HUNTING_BOXTRAP_TRAPPING_LETVEK_N: + case ObjectID.HUNTING_BOXTRAP_TRAPPING_LETVEK_E: + case ObjectID.HUNTING_BOXTRAP_TRAPPING_LETVEK_S: + case ObjectID.HUNTING_BOXTRAP_TRAPPING_LETVEK_W: + // Bird traps case ObjectID.HUNTING_OJIBWAY_TRAP_FAILING: case ObjectID.HUNTING_OJIBWAY_TRAP_TRAPPING_COLOURED: diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java index 2f3b6c3bf44..ac23d4680d0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java @@ -238,6 +238,10 @@ enum ItemWithCharge FISHING4(POTION, ItemID._4DOSEFISHERSPOTION, 4), FISHING_MIX_1(POTION, ItemID.BRUTAL_1DOSEFISHERSPOTION, 1), FISHING_MIX_2(POTION, ItemID.BRUTAL_2DOSEFISHERSPOTION, 2), + FOUL_CHUNKY1(POTION, ItemID.VAMPYRIUM_CHUNKY_POTION_1, 1), + FOUL_CHUNKY2(POTION, ItemID.VAMPYRIUM_CHUNKY_POTION_2, 2), + FOUL_CHUNKY3(POTION, ItemID.VAMPYRIUM_CHUNKY_POTION_3, 3), + FOUL_CHUNKY4(POTION, ItemID.VAMPYRIUM_CHUNKY_POTION_4, 4), FUNGICIDE0(FUNGICIDE_SPRAY, ItemID.SLAYER_SPRAY_PUMP_0, 0), FUNGICIDE1(FUNGICIDE_SPRAY, ItemID.SLAYER_SPRAY_PUMP_1, 1), FUNGICIDE2(FUNGICIDE_SPRAY, ItemID.SLAYER_SPRAY_PUMP_2, 2), @@ -318,12 +322,24 @@ enum ItemWithCharge PRAYER4(POTION, ItemID._4DOSEPRAYERRESTORE, 4), PRAYER_MIX_1(POTION, ItemID.BRUTAL_1DOSEPRAYERRESTORE, 1), PRAYER_MIX_2(POTION, ItemID.BRUTAL_2DOSEPRAYERRESTORE, 2), + PUTRID_STICKY1(POTION, ItemID.VAMPYRIUM_STICKY_POTION_1, 1), + PUTRID_STICKY2(POTION, ItemID.VAMPYRIUM_STICKY_POTION_2, 2), + PUTRID_STICKY3(POTION, ItemID.VAMPYRIUM_STICKY_POTION_3, 3), + PUTRID_STICKY4(POTION, ItemID.VAMPYRIUM_STICKY_POTION_4, 4), + RANCID_SLIMY1(POTION, ItemID.VAMPYRIUM_SLIMY_POTION_1, 1), + RANCID_SLIMY2(POTION, ItemID.VAMPYRIUM_SLIMY_POTION_2, 2), + RANCID_SLIMY3(POTION, ItemID.VAMPYRIUM_SLIMY_POTION_3, 3), + RANCID_SLIMY4(POTION, ItemID.VAMPYRIUM_SLIMY_POTION_4, 4), RANGING1(POTION, ItemID._1DOSERANGERSPOTION, 1), RANGING2(POTION, ItemID._2DOSERANGERSPOTION, 2), RANGING3(POTION, ItemID._3DOSERANGERSPOTION, 3), RANGING4(POTION, ItemID._4DOSERANGERSPOTION, 4), RANGING_MIX_1(POTION, ItemID.BRUTAL_1DOSERANGERSPOTION, 1), RANGING_MIX_2(POTION, ItemID.BRUTAL_2DOSERANGERSPOTION, 2), + RANK_FROTHY1(POTION, ItemID.VAMPYRIUM_FROTHY_POTION_1, 1), + RANK_FROTHY2(POTION, ItemID.VAMPYRIUM_FROTHY_POTION_2, 2), + RANK_FROTHY3(POTION, ItemID.VAMPYRIUM_FROTHY_POTION_3, 3), + RANK_FROTHY4(POTION, ItemID.VAMPYRIUM_FROTHY_POTION_4, 4), RELICYMS1(POTION, ItemID.RELICYMS_BALM1, 1), RELICYMS2(POTION, ItemID.RELICYMS_BALM2, 2), RELICYMS3(POTION, ItemID.RELICYMS_BALM3, 3), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java index 0b2f8d5d173..c25cefb0d64 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java @@ -73,7 +73,7 @@ private void init() { add(food(-5), ItemID.TBWT_POORLY_COOKED_KARAMBWAN); add(food(1), ItemID.POTATO, ItemID.ONION, ItemID.CABBAGE, ItemID.POT_OF_CREAM, ItemID.BOWL_ONION, ItemID.ANCHOVIES, ItemID.BOWL_NETTLEWATER, ItemID.EQUA_LEAVES, - ItemID.SWAN_MONKFISH /* Cooked */, ItemID.COOKED_CHICKEN_UNDEAD /* Undead */, ItemID.COOKED_MEAT_UNDEAD /* Undead */); + ItemID.SWAN_MONKFISH, ItemID.COOKED_CHICKEN_UNDEAD, ItemID.COOKED_MEAT_UNDEAD); add(food(2), ItemID.TOMATO, ItemID.BOWL_TOMATO, ItemID.BANANA, ItemID.TBWT_SLICED_BANANA, ItemID.ORANGE, ItemID.ORANGE_SLICES, ItemID.ORANGE_CHUNKS, ItemID.PINEAPPLE_RING, ItemID.PINEAPPLE_CHUNKS, ItemID.BOWL_CHILLI, ItemID.CHEESE, ItemID.SPINACH_ROLL, ItemID.LEMON, ItemID.LEMON_CHUNKS, ItemID.LEMON_SLICES, ItemID.LIME, ItemID.LIME_CHUNKS, ItemID.LIME_SLICES, ItemID.DWELLBERRIES, ItemID.KING_WORM, ItemID.BOWL_CARNE, ItemID.BOWL_SPICYTOMATO, ItemID.MDAUGHTER_WHITE_PEARL_FRUIT); @@ -97,7 +97,7 @@ private void init() add(food(9), ItemID.PREMADE_PINEAPPLE_PUNCH, ItemID.PINEAPPLE_PUNCH, ItemID.PREMADE_FRUIT_BLAST, ItemID.FRUIT_BLAST, ItemID.SALMON, ItemID.ANCHOVIE_PIZZA, ItemID.HALF_ANCHOVIE_PIZZA); add(food(10), ItemID.TUNA, ItemID.HUNDRED_PIRATE_GIANT_CRAB_MEAT_5, ItemID.BOWL_TUNA, ItemID.COOKED_CHOMPY, ItemID.PEST_FIELD_RATION, ItemID.DRAGONFRUIT, - ItemID.DEADMAN_STARTER_TUNA /* Deadman Starter Pack */); + ItemID.DEADMAN_STARTER_TUNA); add(food(11), ItemID.HUNTING_FISH_SPECIAL, ItemID.STEW, ItemID.PINEAPPLE_PIZZA, ItemID.HALF_PINEAPPLE_PIZZA, ItemID.HUNDRED_PIRATE_FISHCAKE, ItemID.PREMADE_VEGETABLE_BATTA, ItemID.VEGETABLE_BATTA, ItemID.PREMADE_WORM_BATTA, ItemID.WORM_BATTA, ItemID.PREMADE_TOAD_BATTA, ItemID.TOAD_BATTA, ItemID.PREMADE_CHEESE_TOM_BATTA, ItemID.CHEESE_TOM_BATTA, ItemID.PREMADE_FRUIT_BATTA, ItemID.FRUIT_BATTA, ItemID.BOWL_MUSHROOM_ONION, ItemID.RAIDS_BAT2_COOKED, ItemID.LAVA_EEL, ItemID.RAIDS_FISH2_COOKED, ItemID.MM_BANANA_STEW); @@ -108,23 +108,24 @@ private void init() add(food(15), ItemID.PREMADE_TANGLED_TOADS_LEGS, ItemID.TANGLED_TOADS_LEGS, ItemID.PREMADE_CHOCOLATE_BOMB, ItemID.CHOCOLATE_BOMB, ItemID._100_JUBBLY_MEAT_COOKED, ItemID.SWORDTIP_SQUID); add(food(16), ItemID.MONKFISH, ItemID.POTATO_CHEESE, ItemID.POTATO_EGG_TOMATO, ItemID.GAUNTLET_COMBO_FOOD, ItemID.GAUNTLET_COMBO_FOOD_HM); add(food(17), ItemID.RAIDS_FISH4_COOKED, ItemID.RAIDS_BAT4_COOKED, ItemID.GIANT_KRILL, ItemID.JUMBO_SQUID); - add(food(18), ItemID.TBWT_COOKED_KARAMBWAN, ItemID.BLIGHTED_KARAMBWAN, ItemID.BR_TBWT_COOKED_KARAMBWAN /* LMS */); + add(food(18), ItemID.TBWT_COOKED_KARAMBWAN, ItemID.BLIGHTED_KARAMBWAN, ItemID.BR_TBWT_COOKED_KARAMBWAN, ItemID.VAMPYRIUM_MYSTERY_KEBAB); add(food(19), ItemID.CURRY, ItemID.UGTHANKI_KEBAB_BAD, ItemID.UGTHANKI_KEBAB, ItemID.RAINBOW_CRAB_MEAT); - add(food(20), ItemID.POTATO_MUSHROOM_ONION, ItemID.SHARK, ItemID.RAIDS_FISH5_COOKED, ItemID.RAIDS_BAT5_COOKED, ItemID.HUNDRED_ILM_COOKED_STUFFED_SNAKE, ItemID.BR_SHARK /* LMS */, ItemID.GAUNTLET_FOOD, ItemID.EVENT_CORRUPTED_SHARK, ItemID.HALIBUT); + add(food(20), ItemID.POTATO_MUSHROOM_ONION, ItemID.SHARK, ItemID.RAIDS_FISH5_COOKED, ItemID.RAIDS_BAT5_COOKED, ItemID.HUNDRED_ILM_COOKED_STUFFED_SNAKE, ItemID.BR_SHARK, ItemID.GAUNTLET_FOOD, ItemID.EVENT_CORRUPTED_SHARK, ItemID.HALIBUT); add(food(21), ItemID.SEATURTLE); - add(food(22), ItemID.MANTARAY, ItemID.BLIGHTED_MANTARAY, ItemID.DARK_CRAB, ItemID.POTATO_TUNA_SWEETCORN); + add(food(22), ItemID.MANTARAY, ItemID.BLIGHTED_MANTARAY, ItemID.DARK_CRAB, ItemID.POTATO_TUNA_SWEETCORN, ItemID.VAMPYRIUM_MYSTERY_JERKY); add(food(23), ItemID.RAIDS_FISH6_COOKED, ItemID.RAIDS_BAT6_COOKED); add(food(24), ItemID.MARLIN); + add(food(26), ItemID.STYMPHIKE_TARTARE); add(new Anglerfish(), ItemID.ANGLERFISH, ItemID.BLIGHTED_ANGLERFISH); add(food(maxHP -> (int) Math.ceil(maxHP * .06)), ItemID.STRAWBERRY); add(food(maxHP -> (int) Math.ceil(maxHP * .05)), ItemID.WATERMELON_SLICE); - add(food(perc(.1, 1)), ItemID.SWEETCORN_COOKED, ItemID.BOWL_SWEETCORN /* Bowl of cooked sweetcorn */); + add(food(perc(.1, 1)), ItemID.SWEETCORN_COOKED, ItemID.BOWL_SWEETCORN); add(new CookedBream(), ItemID.BREAM_FISH_COOKED); add(new CookedMossLizard(), ItemID.COOKED_LIZARD); - add(combo(food(1), boost(DEFENCE, perc(.02, 1))), ItemID.MAGIC_CABBAGE /* Draynor Manor */); + add(combo(food(1), boost(DEFENCE, perc(.02, 1))), ItemID.MAGIC_CABBAGE); add(combo(food(8), heal(RUN_ENERGY, 5)), ItemID.PAPAYA); - add(combo(food(3), boost(ATTACK, perc(.02, 2))), ItemID.CUP_OF_TEA /* Standard tea */); - add(combo(food(3), new NettleTeaRunEnergy()), ItemID.BOWL_NETTLETEA, ItemID.BOWL_NETTLETEA_MILKY /* Milky */, ItemID.CUP_OF_NETTLETEA /* Nettle */, ItemID.CUP_OF_NETTLETEA_MILKY /* Milky nettle */); + add(combo(food(3), boost(ATTACK, perc(.02, 2))), ItemID.CUP_OF_TEA); + add(combo(food(3), new NettleTeaRunEnergy()), ItemID.BOWL_NETTLETEA, ItemID.BOWL_NETTLETEA_MILKY, ItemID.CUP_OF_NETTLETEA, ItemID.CUP_OF_NETTLETEA_MILKY); add(range(food(5), food(7)), ItemID.SNAIL_CORPSE_COOKED1); add(range(food(5), food(8)), ItemID.SNAIL_CORPSE_COOKED2); add(range(food(7), food(9)), ItemID.SNAIL_CORPSE_COOKED3); @@ -162,7 +163,7 @@ private void init() add(combo(food(3), new SimpleStatBoost(STRENGTH, true, perc(.04, 1)), new BoostedStatBoost(ATTACK, false, perc(.05, -3))), ItemID.GROG); add(combo(food(1), boost(STRENGTH, perc(.02, 1)), new BoostedStatBoost(ATTACK, false, perc(.06, -1))), ItemID.BEER, ItemID.POH_BEER); add(combo(food(4), boost(STRENGTH, perc(.04, 2)), new BoostedStatBoost(ATTACK, false, perc(.1, -2))), ItemID.VIKING_TANKARD_FULL); - add(combo(food(15), boost(STRENGTH, perc(.1, 2)), new BoostedStatBoost(ATTACK, false, perc(.5, -4))), ItemID.KEG_OF_BEER /* Non-quest version */); + add(combo(food(15), boost(STRENGTH, perc(.1, 2)), new BoostedStatBoost(ATTACK, false, perc(.5, -4))), ItemID.KEG_OF_BEER); add(combo(boost(ATTACK, 5), boost(STRENGTH, 5), heal(MAGIC, -5), heal(PRAYER, -5)), ItemID.BLOOD_PINT); add(combo(food(1), boost(STRENGTH, 2), new BoostedStatBoost(ATTACK, false, perc(.05, -2))), ItemID.ASGARNIAN_ALE, ItemID.KEG_ASGARNIAN_ALE_1, ItemID.KEG_ASGARNIAN_ALE_2, ItemID.KEG_ASGARNIAN_ALE_3, ItemID.KEG_ASGARNIAN_ALE_4, ItemID.POH_ASGARNIAN_ALE); add(combo(food(1), boost(STRENGTH, 3), new BoostedStatBoost(ATTACK, false, perc(.05, -3))), ItemID.MATURE_ASGARNIAN_ALE, ItemID.KEG_MATURE_ASGARNIAN_ALE_1, ItemID.KEG_MATURE_ASGARNIAN_ALE_2, ItemID.KEG_MATURE_ASGARNIAN_ALE_3, ItemID.KEG_MATURE_ASGARNIAN_ALE_4); @@ -233,17 +234,18 @@ private void init() add(DEFENCE_POT, ItemID._1DOSE1DEFENSE, ItemID._2DOSE1DEFENSE, ItemID._3DOSE1DEFENSE, ItemID._4DOSE1DEFENSE); add(magicPot, ItemID._1DOSE1MAGIC, ItemID._2DOSE1MAGIC, ItemID._3DOSE1MAGIC, ItemID._4DOSE1MAGIC); add(rangingPot, ItemID._1DOSERANGERSPOTION, ItemID._2DOSERANGERSPOTION, ItemID._3DOSERANGERSPOTION, ItemID._4DOSERANGERSPOTION, - ItemID.BR_4DOSERANGERSPOTION, ItemID.BR_3DOSERANGERSPOTION, ItemID.BR_2DOSERANGERSPOTION, ItemID.BR_1DOSERANGERSPOTION /* LMS */); + ItemID.BR_4DOSERANGERSPOTION, ItemID.BR_3DOSERANGERSPOTION, ItemID.BR_2DOSERANGERSPOTION, ItemID.BR_1DOSERANGERSPOTION); add(combatPot, ItemID._1DOSECOMBAT, ItemID._2DOSECOMBAT, ItemID._3DOSECOMBAT, ItemID._4DOSECOMBAT, - ItemID._4DOSECOMBAT_DEADMAN_STARTER, ItemID._3DOSECOMBAT_DEADMAN_STARTER, ItemID._2DOSECOMBAT_DEADMAN_STARTER, ItemID._1DOSECOMBAT_DEADMAN_STARTER /* Deadman starter pack */); + ItemID._4DOSECOMBAT_DEADMAN_STARTER, ItemID._3DOSECOMBAT_DEADMAN_STARTER, ItemID._2DOSECOMBAT_DEADMAN_STARTER, ItemID._1DOSECOMBAT_DEADMAN_STARTER); add(SUPER_ATTACK_POT, ItemID._1DOSE2ATTACK, ItemID._2DOSE2ATTACK, ItemID._3DOSE2ATTACK, ItemID._4DOSE2ATTACK); add(SUPER_STRENGTH_POT, ItemID._1DOSE2STRENGTH, ItemID._2DOSE2STRENGTH, ItemID._3DOSE2STRENGTH, ItemID._4DOSE2STRENGTH); add(SUPER_DEFENCE_POT, ItemID._1DOSE2DEFENSE, ItemID._2DOSE2DEFENSE, ItemID._3DOSE2DEFENSE, ItemID._4DOSE2DEFENSE); add(magicEssence, ItemID._1DOSEMAGICESS, ItemID._2DOSEMAGICESS, ItemID._3DOSEMAGICESS, ItemID._4DOSEMAGICESS); - add(combo(SUPER_ATTACK_POT, SUPER_STRENGTH_POT, SUPER_DEFENCE_POT), ItemID._1DOSE2COMBAT, ItemID._2DOSE2COMBAT, ItemID._3DOSE2COMBAT, ItemID._4DOSE2COMBAT); + add(combo(SUPER_ATTACK_POT, SUPER_STRENGTH_POT, SUPER_DEFENCE_POT), ItemID._1DOSE2COMBAT, ItemID._2DOSE2COMBAT, ItemID._3DOSE2COMBAT, ItemID._4DOSE2COMBAT, + ItemID.VAMPYRIUM_FROTHY_POTION_1, ItemID.VAMPYRIUM_FROTHY_POTION_2, ItemID.VAMPYRIUM_FROTHY_POTION_3, ItemID.VAMPYRIUM_FROTHY_POTION_4); add(zamorakBrew, ItemID._1DOSEPOTIONOFZAMORAK, ItemID._2DOSEPOTIONOFZAMORAK, ItemID._3DOSEPOTIONOFZAMORAK, ItemID._4DOSEPOTIONOFZAMORAK); add(new SaradominBrew(0.15, 0.2, 0.1, 2, 2), ItemID._1DOSEPOTIONOFSARADOMIN, ItemID._2DOSEPOTIONOFSARADOMIN, ItemID._3DOSEPOTIONOFSARADOMIN, - ItemID._4DOSEPOTIONOFSARADOMIN, ItemID.BR_4DOSEPOTIONOFSARADOMIN, ItemID.BR_3DOSEPOTIONOFSARADOMIN, ItemID.BR_2DOSEPOTIONOFSARADOMIN, ItemID.BR_1DOSEPOTIONOFSARADOMIN /* LMS */); + ItemID._4DOSEPOTIONOFSARADOMIN, ItemID.BR_4DOSEPOTIONOFSARADOMIN, ItemID.BR_3DOSEPOTIONOFSARADOMIN, ItemID.BR_2DOSEPOTIONOFSARADOMIN, ItemID.BR_1DOSEPOTIONOFSARADOMIN); add(superRangingPot, ItemID.NZONE1DOSE2RANGERSPOTION, ItemID.NZONE2DOSE2RANGERSPOTION, ItemID.NZONE3DOSE2RANGERSPOTION, ItemID.NZONE4DOSE2RANGERSPOTION); add(superMagicPot, ItemID.NZONE1DOSE2MAGICPOTION, ItemID.NZONE2DOSE2MAGICPOTION, ItemID.NZONE3DOSE2MAGICPOTION, ItemID.NZONE4DOSE2MAGICPOTION); add(combo(rangingPot, SUPER_DEFENCE_POT), ItemID._1DOSEBASTION, ItemID._2DOSEBASTION, ItemID._3DOSEBASTION, ItemID._4DOSEBASTION); @@ -259,12 +261,13 @@ private void init() add(combo(SUPER_ATTACK_POT, SUPER_STRENGTH_POT, SUPER_DEFENCE_POT, rangingPot, imbuedHeart), ItemID._4DOSE_CASTLEWARS_SKILL_POTION, ItemID._3DOSE_CASTLEWARS_SKILL_POTION, ItemID._2DOSE_CASTLEWARS_SKILL_POTION, ItemID._1DOSE_CASTLEWARS_SKILL_POTION); add(combo(SUPER_ATTACK_POT, SUPER_STRENGTH_POT), - ItemID.BR_4DOSE2COMBAT, ItemID.BR_3DOSE2COMBAT, ItemID.BR_2DOSE2COMBAT, ItemID.BR_1DOSE2COMBAT /* LMS */); + ItemID.BR_4DOSE2COMBAT, ItemID.BR_3DOSE2COMBAT, ItemID.BR_2DOSE2COMBAT, ItemID.BR_1DOSE2COMBAT); add(ancientBrew, ItemID._1DOSEANCIENTBREW, ItemID._2DOSEANCIENTBREW, ItemID._3DOSEANCIENTBREW, ItemID._4DOSEANCIENTBREW); add(new AncientBrew(.08, 3), ItemID._1DOSEFORGOTTENBREW, ItemID._2DOSEFORGOTTENBREW, ItemID._3DOSEFORGOTTENBREW, ItemID._4DOSEFORGOTTENBREW); add(new MoonlightPotion(), ItemID._1DOSEMOONLIGHTPOTION, ItemID._2DOSEMOONLIGHTPOTION, ItemID._3DOSEMOONLIGHTPOTION, ItemID._4DOSEMOONLIGHTPOTION); add(combo(boost(HITPOINTS, perc(.10, 2)), boost(RANGED, perc(.10, 4)), new BoostedStatBoost(ATTACK, false, perc(.10, -2)), new BoostedStatBoost(STRENGTH, false, perc(.10, -2)), new BoostedStatBoost(DEFENCE, false, perc(.10, -2)), new BoostedStatBoost(MAGIC, false, perc(.10, -2))), ItemID._1DOSEARMADYLBREW, ItemID._2DOSEARMADYLBREW, ItemID._3DOSEARMADYLBREW, ItemID._4DOSEARMADYLBREW); + add(new SaradominBrew(0.15, 0.2, 0.0, 2, 1), ItemID.VAMPYRIUM_SLIMY_POTION_1, ItemID.VAMPYRIUM_SLIMY_POTION_2, ItemID.VAMPYRIUM_SLIMY_POTION_3, ItemID.VAMPYRIUM_SLIMY_POTION_4); // Mixed combat potions add(new MixedPotion(3, ATTACK_POT), ItemID.BRUTAL_1DOSE1ATTACK, ItemID.BRUTAL_2DOSE1ATTACK); @@ -305,13 +308,16 @@ private void init() add(superEnergyPot, ItemID._1DOSE2ENERGY, ItemID._2DOSE2ENERGY, ItemID._3DOSE2ENERGY, ItemID._4DOSE2ENERGY); add(superRestorePot, ItemID._1DOSE2RESTORE, ItemID._2DOSE2RESTORE, ItemID._3DOSE2RESTORE, ItemID._4DOSE2RESTORE, ItemID.BLIGHTED_1DOSE2RESTORE, ItemID.BLIGHTED_2DOSE2RESTORE, ItemID.BLIGHTED_3DOSE2RESTORE, ItemID.BLIGHTED_4DOSE2RESTORE, - ItemID.BR_4DOSE2RESTORE, ItemID.BR_3DOSE2RESTORE, ItemID.BR_2DOSE2RESTORE, ItemID.BR_1DOSE2RESTORE /* LMS */); + ItemID.BR_4DOSE2RESTORE, ItemID.BR_3DOSE2RESTORE, ItemID.BR_2DOSE2RESTORE, ItemID.BR_1DOSE2RESTORE, + ItemID.VAMPYRIUM_CHUNKY_POTION_1, ItemID.VAMPYRIUM_CHUNKY_POTION_2, ItemID.VAMPYRIUM_CHUNKY_POTION_3, ItemID.VAMPYRIUM_CHUNKY_POTION_4); add(new SuperRestore(.30, 4), ItemID.SANFEW_SALVE_1_DOSE, ItemID.SANFEW_SALVE_2_DOSE, ItemID.SANFEW_SALVE_3_DOSE, ItemID.SANFEW_SALVE_4_DOSE, - ItemID.BR_SANFEW_SALVE_4_DOSE, ItemID.BR_SANFEW_SALVE_3_DOSE, ItemID.BR_SANFEW_SALVE_2_DOSE, ItemID.BR_SANFEW_SALVE_1_DOSE /* LMS */); + ItemID.BR_SANFEW_SALVE_4_DOSE, ItemID.BR_SANFEW_SALVE_3_DOSE, ItemID.BR_SANFEW_SALVE_2_DOSE, ItemID.BR_SANFEW_SALVE_1_DOSE); add(combo(heal(ATTACK, remedyHeal), heal(STRENGTH, remedyHeal), heal(DEFENCE, remedyHeal), heal(RANGED, remedyHeal), heal(MAGIC, remedyHeal)), ItemID._1DOSESTATRENEWAL, ItemID._2DOSESTATRENEWAL, ItemID._3DOSESTATRENEWAL, ItemID._4DOSESTATRENEWAL); - add(staminaPot, ItemID._1DOSESTAMINA, ItemID._2DOSESTAMINA, ItemID._3DOSESTAMINA, ItemID._4DOSESTAMINA); + add(staminaPot, ItemID._1DOSESTAMINA, ItemID._2DOSESTAMINA, ItemID._3DOSESTAMINA, ItemID._4DOSESTAMINA, + ItemID.VAMPYRIUM_STICKY_POTION_1, ItemID.VAMPYRIUM_STICKY_POTION_2, ItemID.VAMPYRIUM_STICKY_POTION_3, ItemID.VAMPYRIUM_STICKY_POTION_4); add(new StaminaPotion(40), ItemID._1DOSE2STAMINA, ItemID._2DOSE2STAMINA, ItemID._3DOSE2STAMINA, ItemID._4DOSE2STAMINA); add(heal(RUN_ENERGY, 40), ItemID._1DOSE3ENERGY, ItemID._2DOSE3ENERGY, ItemID._3DOSE3ENERGY, ItemID._4DOSE3ENERGY); + add(combo(heal(HITPOINTS, 99), heal(PRAYER, 99), heal(RUN_ENERGY, 100)), ItemID.VAMPYRIUM_CONGEALED_BLOOD); // Mixed recovery potions add(new MixedPotion(3, restorePot), ItemID.BRUTAL_1DOSESTATRESTORE, ItemID.BRUTAL_2DOSESTATRESTORE); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index 5441ec7bb90..bbfd266a326 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -333,6 +333,13 @@ public class LootTrackerPlugin extends Plugin private static final String DOM = "Doom of Mokhaiotl"; + private static final String MAGGOT_KING = "Maggot King"; + private static final String MAGGOT_KING_TAKE_EGGS_SUPPLY_MESSAGE = "A pile of half digested food spills out as you try to take the eggs."; + private static final String MAGGOT_KING_TAKE_EGGS_NO_LOOT_MESSAGE = "The eggs pop as you try to take them."; + private static final String MAGGOT_KING_POP_EGG_NO_LOOT_MESSAGE = "The egg pops and reveals a dead maggot."; + + private static final Pattern TARNISHED_PATTERN = Pattern.compile("You rub the tarnished (?.+) on your clothes.*"); + private static final Set VOWELS = ImmutableSet.of('a', 'e', 'i', 'o', 'u'); @Inject @@ -386,6 +393,7 @@ public class LootTrackerPlugin extends Plugin private boolean lastLoadingIntoInstance; private String lastPickpocketTarget; private int ignorePickpocketLoot; + private int lastMaggotEggPopped; private List ignoredItems = new ArrayList<>(); private List ignoredEvents = new ArrayList<>(); @@ -683,10 +691,13 @@ void addLoot(@NonNull String name, int combatLevel, LootRecordType type, Object void addLoot(@NonNull String name, int combatLevel, LootRecordType type, Object metadata, Collection items, int amount) { - initLoot(type, name); + if (!items.isEmpty()) + { + initLoot(type, name); - final LootTrackerItem[] entries = buildEntries(stack(items)); - SwingUtilities.invokeLater(() -> panel.add(name, type, combatLevel, entries, amount)); + final LootTrackerItem[] entries = buildEntries(stack(items)); + SwingUtilities.invokeLater(() -> panel.add(name, type, combatLevel, entries, amount)); + } LootRecord lootRecord = new LootRecord(name, type, metadata, toGameItems(items), Instant.now(), getLootWorldId(), amount, null); synchronized (queuedLoots) @@ -746,6 +757,10 @@ else if (npc.getName() != null && npc.getName().equals("Cave horror")) "world", client.getWorld() ); } + else if (npc.getName() != null && npc.getName().equals(MAGGOT_KING)) + { + return Map.of("item", lastMaggotEggPopped); + } else { return npc.getId(); @@ -1151,6 +1166,49 @@ public void onChatMessage(ChatMessage event) return; } + final Matcher tarnishedMatcher = TARNISHED_PATTERN.matcher(message); + if (tarnishedMatcher.matches()) + { + final String type = tarnishedMatcher.group("type").toLowerCase(); + String eventType; + switch (type) + { + case "2h sword": + eventType = itemManager.getItemComposition(ItemID.TARNISHED_2H_SWORD).getMembersName(); + break; + case "amulet": + eventType = itemManager.getItemComposition(ItemID.TARNISHED_AMULET).getMembersName(); + break; + case "battleaxe": + eventType = itemManager.getItemComposition(ItemID.TARNISHED_BATTLEAXE).getMembersName(); + break; + case "halberd": + eventType = itemManager.getItemComposition(ItemID.TARNISHED_HALBERD).getMembersName(); + break; + case "longsword": + eventType = itemManager.getItemComposition(ItemID.TARNISHED_LONGSWORD).getMembersName(); + break; + case "necklace": + eventType = itemManager.getItemComposition(ItemID.TARNISHED_NECKLACE).getMembersName(); + break; + case "ring": + eventType = itemManager.getItemComposition(ItemID.TARNISHED_RING).getMembersName(); + break; + case "spear": + eventType = itemManager.getItemComposition(ItemID.TARNISHED_SPEAR).getMembersName(); + break; + case "bracelet": + eventType = itemManager.getItemComposition(ItemID.TARNISHED_BRACELET).getMembersName(); + break; + default: + log.debug("Unrecognized tarnished item: {}", type); + return; + } + + onInvChange(collectInvItems(LootRecordType.EVENT, eventType, client.getBoostedSkillLevel(Skill.CRAFTING))); + return; + } + if (regionID == TEMPOROSS_REGION && message.startsWith(TEMPOROSS_LOOT_STRING)) { onInvChange(collectInvItems(LootRecordType.EVENT, TEMPOROSS_EVENT, client.getBoostedSkillLevel(Skill.FISHING))); @@ -1194,6 +1252,15 @@ else if (message.equals("You crack open the rubium geode and obtain some rubium { countChangedItems(ItemID.RUBIUM_GEODE, client.getBoostedSkillLevel(Skill.MINING)); } + else if (message.equals(MAGGOT_KING_TAKE_EGGS_SUPPLY_MESSAGE) + || message.equals(MAGGOT_KING_TAKE_EGGS_NO_LOOT_MESSAGE)) + { + addLoot(MAGGOT_KING, -1, LootRecordType.UNKNOWN, Map.of("message", message), Collections.emptyList(), 1); + } + else if (message.equals(MAGGOT_KING_POP_EGG_NO_LOOT_MESSAGE)) + { + addLoot(MAGGOT_KING, -1, LootRecordType.UNKNOWN, Map.of("message", message, "item", lastMaggotEggPopped), Collections.emptyList(), 1); + } } private void countChangedItems(int itemId, Object metadata) @@ -1360,6 +1427,20 @@ else if (event.getMenuOption().equals("Open")) break; } } + else if (event.getMenuOption().equals("Pop")) + { + switch (event.getItemId()) + { + case ItemID.MAGGOT_EGG: + case ItemID.SICKLY_MAGGOT_EGG: + case ItemID.WARM_MAGGOT_EGG: + case ItemID.PULSATING_MAGGOT_EGG: + case ItemID.WRIGGLING_MAGGOT_EGG: + case ItemID.WRITHING_MAGGOT_EGG: + lastMaggotEggPopped = event.getItemId(); + break; + } + } } } @@ -1403,6 +1484,10 @@ private Collection combine(List records) Map map = new HashMap<>(); for (LootRecord record : records) { + if (record.getDrops().isEmpty()) + { + continue; + } ConfigLoot key = new ConfigLoot(record.getType(), record.getEventId()); ConfigLoot loot = map.computeIfAbsent(key, k -> key); loot.kills += record.getAmount(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index abf413e53ec..db9decbb5a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -769,13 +769,6 @@ private void configureNpcClick(MenuOpened event) continue; } - if ("Knock-Out".equals(actions[actionIdx]) - || "Lure".equals(actions[actionIdx])) - { - // https://secure.runescape.com/m=news/third-party-client-guidelines?oldschool=1 - continue; - } - final MenuAction menuAction = NPC_MENU_TYPES.get(actionIdx); if (menuAction != currentAction) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeSceneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeSceneOverlay.java index c51338d5af5..52d2f587992 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeSceneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeSceneOverlay.java @@ -76,7 +76,7 @@ class MotherlodeSceneOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - if ((!config.showVeins() && !config.showRockFalls()) || !plugin.isInMlm()) + if (!plugin.isInMlm()) { return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java index fc8a9bdc989..a98547e81bd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java @@ -130,6 +130,7 @@ public enum Task LESSER_NAGUA("Lesser Nagua", ItemID.SLAYERGUIDE_LESSER_NAGUA, "Sulphur Nagua", "Frost Nagua", "Amoxliatl"), LIZARDMEN("Lizardmen", ItemID.LIZARDMAN_FANG, "Lizardman"), LIZARDS("Lizards", ItemID.SLAYERGUIDE_LIZARD,4, ItemID.SLAYER_ICY_WATER), + MAGGOT_KING("The Maggot King", ItemID.MAGGOTKINGPET), MAGIC_AXES("Magic axes", ItemID.IRON_BATTLEAXE), MAMMOTHS("Mammoths", ItemID.BARBASSAULT_ATT_HORN_01), METAL_DRAGONS("Metal dragons", ItemID.POH_STEEL_DRAGON, "Bronze dragon", "Iron Dragon", "Steel dragon", "Mithril dragon", "Adamant dragon", "Rune dragon"), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java index a462d18cfd9..400c3cca2db 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java @@ -460,7 +460,10 @@ private void updateCompletionTime() allUnknown = false; - if (prediction.getProduce() != Produce.WEEDS && prediction.getProduce() != Produce.SCARECROW) + if (prediction.getProduce() != Produce.WEEDS + && prediction.getProduce() != Produce.SCARECROW + && prediction.getCropState() != CropState.EMPTY + && prediction.getCropState() != CropState.FILLING) { allEmpty = false; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/DungeonLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/DungeonLocation.java index cdf20c886d0..7b91fc59d2b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/DungeonLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/DungeonLocation.java @@ -98,12 +98,14 @@ enum DungeonLocation FORTHOS_W("Forthos Dungeon", new WorldPoint(1669, 3567, 0)), FORTIS_COLOSSEUM("Fortis Colosseum", new WorldPoint(1794, 3107, 0)), FREMENNIK_SLAYER("Fremennik Slayer Dungeon", new WorldPoint(2796, 3615, 0)), + GAUNTLET("The Gauntlet", new WorldPoint(3227, 6116, 0)), GIANTS_DEN("Giants' Den", new WorldPoint(1419, 3588, 0)), GIANTS_FOUNDRY("Giants' Foundry", new WorldPoint(3360, 3150, 0)), GOBLIN_CAVE("Goblin Cave", new WorldPoint(2622, 3393, 0)), GOD_WARS("God Wars Dungeon", new WorldPoint(2917, 3747, 0)), GRAND_TREE("Grand Tree Tunnels", new WorldPoint(2462, 3496, 0)), - GAUNTLET("The Gauntlet", new WorldPoint(3227, 6116, 0)), + GRYPHON_NORTH("Gryphon Dungeon", new WorldPoint(3120, 2490, 0)), + GRYPHON_SOUTH("Gryphon Dungeon", new WorldPoint(3234, 2418, 0)), HAM_HIDEOUT("H.A.M. Hideout", new WorldPoint(3164, 3252, 0)), HEADLESS_BEAST_CAVE("Headless Beast Cave", new WorldPoint(1211, 3647, 0)), HEROES_GUILD("Heroes' Guild mine", new WorldPoint(2891, 3507, 0)), @@ -193,6 +195,7 @@ enum DungeonLocation SHADE_CATACOMBS("Shade Catacombs", new WorldPoint(3484, 3321, 0)), SHAYZIEN_CRYPTS("Shayzien Crypts", new WorldPoint(1482, 3549, 0)), SHAYZIEN_PRISON("Shayzien Prison", new WorldPoint(1464, 3569, 0)), + SHELLBANE_GRYPHON_CAVE("Shellbane Gryphon Cave", new WorldPoint(3175, 2478, 0)), SHILO_VILLAGE_MINE("Shilo Village mine", new WorldPoint(2823, 3001, 0)), SILK_CHASM("Silk Chasm", new WorldPoint(3320, 3798, 0)), SISTERHOOD_SANCTUARY("Sisterhood Sanctuary", new WorldPoint(3727, 3300, 0)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/HunterAreaLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/HunterAreaLocation.java index 958d114a99e..cbea0989272 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/HunterAreaLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/HunterAreaLocation.java @@ -90,6 +90,9 @@ enum HunterAreaLocation TLATI_RAINFOREST_SOUTH(new WorldPoint(1282, 3021, 0), HunterCreature.BLACK_WARLOCK), UZER_HUNTER_AREA(new WorldPoint(3401, 3104, 0), HunterCreature.GOLDEN_WARBLER, HunterCreature.DESERT_DEVIL, HunterCreature.ORANGE_SALAMANDER), + VAMPYRIUM_EAST(new WorldPoint(2564, 7772, 0), HunterCreature.LETVEK), + VAMPYRIUM_WEST(new WorldPoint(2540, 7766, 0), HunterCreature.LETVEK), + VAMPYRIUM_NORTH(new WorldPoint(2653, 7845, 0), HunterCreature.STYMPHIKE), WILDERNESS(new WorldPoint(3142, 3771, 0), HunterCreature.BLACK_CHINCHOMPA), ; @@ -129,6 +132,7 @@ private enum HunterCreature HERBIBOAR("Herbiboar", 80), HORNED_GRAAHK("Horned graahk", 41), // IMP and MANIACAL_MONKEY do not have a specific hunter area + LETVEK("Letvek", 76), MOONLIGHT_ANTELOPE("Moonlight Antelope", 91), MOTTLED_EEL("Mottled eel", 68), ORANGE_SALAMANDER("Orange salamander", 47), @@ -145,6 +149,7 @@ private enum HunterCreature SNOWY_KNIGHT("Snowy knight", 35), SPINED_LARUPIA("Spined larupia", 31), SPOTTED_KEBBIT("Spotted kebbit", 43), + STYMPHIKE("Stymphike", 82), SUNLIGHT_ANTELOPE("Sunlight Antelope", 72), SUNLIGHT_MOTH("Sunlight Moth", 65), SWAMP_LIZARD("Swamp lizard", 29), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java index 929c2ee897d..4151e81d6ea 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java @@ -242,6 +242,7 @@ enum MiningSiteLocation new Rock(7, Ore.MITHRIL), new Rock(10, Ore.SOFT_CLAY), new Rock(7, Ore.ADAMANTITE), new Rock(4, Ore.RUNITE)), // TUTORIAL ISLAND -- NOT AVAILABLE ON WORLD MAP UZER(new WorldPoint(3415, 3160, 0), new Rock(10, Ore.CLAY)), + VAMPYRIUM(new WorldPoint(2567, 7735, 0), new Rock(14, Ore.IRON)), VARROCK_SOUTH_EAST(new WorldPoint(3286, 3365, 0), new Rock(9, Ore.COPPER), new Rock(6, Ore.TIN), new Rock(4, Ore.IRON)), VARROCK_SOUTH_WEST(new WorldPoint(3176, 3370, 0), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java index 2abd402748d..64b649e1b4b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java @@ -358,6 +358,11 @@ enum RareTreeLocation // Wilderness new WorldPoint(3175, 3931, 0)), + BLOODWOOD("Bloodwood tree", 77, + // Vampyrium + new WorldPoint(2599, 7780, 0), + new WorldPoint(2696, 7823, 0)), + IRONWOOD("Ironwood tree", 80, // Sunbleak Island new WorldPoint(2223, 2341, 0), diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json index 7ca35830253..bed50ae044c 100644 --- a/runelite-client/src/main/resources/item_variations.json +++ b/runelite-client/src/main/resources/item_variations.json @@ -1636,6 +1636,10 @@ 8282, 11710 ], + "stake": [ + 1549, + 16492 + ], "pet kitten": [ 1555, 1556, @@ -3026,9 +3030,14 @@ 2888, 2889 ], + "golden key": [ + 2944, + 16494 + ], "iron key": [ 2945, - 8869 + 8869, + 16495 ], "golden feather": [ 2950, @@ -11874,7 +11883,9 @@ ], "ancient sceptre": [ 27624, - 27626 + 27626, + 33827, + 33829 ], "forgotten brew": [ 27629, @@ -14009,10 +14020,6 @@ 33673, 33675 ], - "tarnished necklace": [ - 33689, - 33691 - ], "drakan emblem": [ 33731, 33732,