diff --git a/http-api/src/main/java/net/runelite/http/api/item/Item.java b/http-api/src/main/java/net/runelite/http/api/item/Item.java deleted file mode 100644 index 3a6f0346c4..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/item/Item.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2017, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.http.api.item; - -import lombok.Data; - -@Data -public class Item -{ - private int id; - private String name; - private String description; - private ItemType type; -} diff --git a/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java b/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java index 23656fa74f..b574f15e4f 100644 --- a/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java +++ b/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java @@ -26,12 +26,15 @@ package net.runelite.http.api.item; import com.google.common.collect.ImmutableMap; import com.google.gson.JsonParseException; +import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import io.reactivex.rxjava3.core.Observable; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.lang.reflect.Type; +import java.util.Map; import java.util.Arrays; import javax.imageio.ImageIO; import javax.inject.Inject; diff --git a/http-api/src/main/java/net/runelite/http/api/item/SearchResult.java b/http-api/src/main/java/net/runelite/http/api/item/SearchResult.java deleted file mode 100644 index 90ae1ec783..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/item/SearchResult.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2017, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.http.api.item; - -import java.util.List; - -public class SearchResult -{ - private List items; - - public List getItems() - { - return items; - } - - public void setItems(List items) - { - this.items = items; - } -} diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index ac55995ffc..fe24651669 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -59,6 +59,12 @@ public final class ScriptID @ScriptArguments(integer = 1, string = 1) public static final int CHATBOX_INPUT = 96; + /** + * Rebuilds the chatbox + */ + @ScriptArguments() + public static final int BUILD_CHATBOX = 216; + /** * Opens the Private Message chat interface * @@ -127,6 +133,23 @@ public final class ScriptID @ScriptArguments(integer = 20) public static final int BANK_PIN_OP = 685; + /** + * Builds the chatbox input widget + */ + @ScriptArguments() + public static final int CHAT_PROMPT_INIT = 223; + + /** + * Displays the game messages when clicking on an item inside the Items Kept on Death interface + *
    + *
  • int (boolean) Item kept on death
  • + *
  • int Item Quantity
  • + *
  • String Item Name
  • + *
+ */ + @ScriptArguments(integer = 2, string = 1) + public static final int DEATH_KEEP_ITEM_EXAMINE = 1603; + /** * Checks the state of the given stash unit. *
    @@ -135,7 +158,7 @@ public final class ScriptID *
  • int Bitpacked stash unit states 2
  • *
  • int Bitpacked stash unit states 3
  • *
- *

+ * * Returns a pair of booleans indicating if the stash unit is built and if it is filled */ @ScriptArguments(integer = 4) @@ -163,8 +186,8 @@ public final class ScriptID public static final int XPDROP_DISABLED = 2091; /** - *

    * Queries the completion state of a quest by its struct id + *
      *
    • int (struct) The id of the quest *
    * Returns @@ -185,6 +208,18 @@ public final class ScriptID @ScriptArguments(integer = 2) public static final int DIARY_QUEST_UPDATE_LINECOUNT = 2523; + /** + * Handles zoom input + * + * Updates the VarClientInts (73, 74) to this same value + *
      + *
    • int Reset zoom position
    • + *
    • int Reset zoom position
    • + *
    + */ + @ScriptArguments(integer = 2) + public static final int CAMERA_DO_ZOOM = 42; + /** * Rebuilds the Spellbook */ @@ -206,6 +241,17 @@ public final class ScriptID @ScriptArguments(string = 2) public static final int PRIVMSG = 10004; + /** + * Creates a disabled experience drop + * + *
      + *
    • int (Skill ordinal) Sets what icon to use
    • + *
    • int Amount of exp to drop
    • + *
    + */ + @ScriptArguments(integer = 2) + public static final int XPDROP_DISABLED = 2091; + /** * Join a clan, duh */ @@ -309,4 +355,3 @@ public final class ScriptID @ScriptArguments(integer = 7) public static final int IGNORE_UPDATE = 630; } - diff --git a/runelite-api/src/main/java/net/runelite/api/VarClientInt.java b/runelite-api/src/main/java/net/runelite/api/VarClientInt.java index faaeff4a92..5cb1ecc270 100644 --- a/runelite-api/src/main/java/net/runelite/api/VarClientInt.java +++ b/runelite-api/src/main/java/net/runelite/api/VarClientInt.java @@ -52,6 +52,12 @@ public enum VarClientInt */ INPUT_TYPE(5), + /** + * The game sets this to the same value as {@link #CAMERA_ZOOM_RESIZABLE_VIEWPORT} + */ + CAMERA_ZOOM_FIXED_VIEWPORT(73), + CAMERA_ZOOM_RESIZABLE_VIEWPORT(74), + MEMBERSHIP_STATUS(103), /** diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index 1ea73994f9..edd63c1c87 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -435,12 +435,12 @@ public enum Varbits DAILY_ESSENCE_COLLECTED(4547), DAILY_RUNES_COLLECTED(4540), DAILY_SAND_COLLECTED(4549), - DAILY_ARROWS_STATE(4563), DAILY_FLAX_STATE(4559), + DAILY_ARROWS_STATE(4563), /** * This varbit tracks how much bonemeal has been redeemed from Robin * The player gets 13 for each diary completed above and including Medium, for a maxiumum of 39 - */ + */ DAILY_BONEMEAL_STATE(4543), DAILY_DYNAMITE_COLLECTED(7939), @@ -746,6 +746,22 @@ public enum Varbits /** * Starts at 100, counts down every 10 ticks (6 seconds) */ + TWISTED_LEAGUE_RELIC_1(10049), + TWISTED_LEAGUE_RELIC_2(10050), + TWISTED_LEAGUE_RELIC_3(10051), + TWISTED_LEAGUE_RELIC_4(10052), + TWISTED_LEAGUE_RELIC_5(10053), + + /** + * Whether the Special Attack orb is disabled due to being in a PvP area + * + * 0 = Enabled (player is not in PvP) + * 1 = Disabled (player in in PvP) + * + * @see The OSRS Wiki's Minimap page + */ + PVP_SPEC_ORB(8121); + LMS_POISON_PROGRESS(5317), /** @@ -787,7 +803,6 @@ public enum Varbits EMOTES_TAB_HOTKEY(4687), CLAN_TAB_HOTKEY(4683), MUSIC_TAB_HOTKEY(4688); - /** * The raw varbit ID. */ diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 3fff9a5eb3..b7ebe922ea 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -1321,6 +1321,7 @@ public class WidgetID static class Options { + static final int CAMERA_ZOOM_SLIDER_HANDLE = 15; static final int MUSIC_SLIDER = 37; static final int SOUND_EFFECT_SLIDER = 43; static final int AREA_SOUND_SLIDER = 49; diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index e5554631de..bf0b4e2d37 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -592,9 +592,13 @@ public enum WidgetInfo FOSSIL_MUSHROOM_MEADOW(WidgetID.FOSSIL_ISLAND_MUSHROOM_TELE_GROUP_ID, WidgetID.FossilMushroomTeleport.MUSHROOM_MEADOW), MINIGAME_TELEPORT_BUTTON(WidgetID.MINIGAME_TAB_ID, WidgetID.Minigames.TELEPORT_BUTTON), - PVP_FOG_OVERLAY(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.FOG_OVERLAY), - PVP_CONTAINER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.PVP_WIDGET_CONTAINER), + PVP_CONTAINER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.PVP_WIDGET_CONTAINER) + SPELL_LUMBRIDGE_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.StandardSpellBook.LUMBRIDGE_HOME_TELEPORT), + SPELL_EDGEVILLE_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.AncientSpellBook.EDGEVILLE_HOME_TELEPORT), + SPELL_LUNAR_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.LunarSpellBook.LUNAR_HOME_TELEPORT), + SPELL_ARCEUUS_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.ArceuusSpellBook.ARCEUUS_HOME_TELEPORT), + SPELL_KOUREND_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.StandardSpellBook.KOUREND_HOME_TELEPORT), PVP_SKULL_CONTAINER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SKULL_CONTAINER), PVP_SKULL(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SKULL), @@ -871,14 +875,13 @@ public enum WidgetInfo SEED_VAULT_ITEM_CONTAINER(WidgetID.SEED_VAULT_GROUP_ID, WidgetID.SeedVault.ITEM_CONTAINER), SEED_VAULT_ITEM_TEXT(WidgetID.SEED_VAULT_GROUP_ID, WidgetID.SeedVault.ITEM_TEXT), SEED_VAULT_INVENTORY_ITEMS_CONTAINER(WidgetID.SEED_VAULT_INVENTORY_GROUP_ID, WidgetID.SeedVault.INVENTORY_ITEM_CONTAINER), - JEWELLERY_BOX_DUEL_RING(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.DUEL_RING), JEWELLERY_BOX_GAME_NECK(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.GAME_NECK), JEWELLERY_BOX_COMB_BRAC(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.COMB_BRAC), JEWELLERY_BOX_SKIL_NECK(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.SKIL_NECK), JEWELLERY_BOX_RING_OFGP(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.RING_OFGP), JEWELLERY_BOX_AMUL_GLOR(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.AMUL_GLOR), - + OPTIONS_CAMERA_ZOOM_SLIDER_HANDLE(WidgetID.OPTIONS_GROUP_ID, WidgetID.Options.CAMERA_ZOOM_SLIDER_HANDLE), OPTIONS_MUSIC_SLIDER(WidgetID.OPTIONS_GROUP_ID, WidgetID.Options.MUSIC_SLIDER), OPTIONS_SOUND_EFFECT_SLIDER(WidgetID.OPTIONS_GROUP_ID, WidgetID.Options.SOUND_EFFECT_SLIDER), OPTIONS_AREA_SOUND_SLIDER(WidgetID.OPTIONS_GROUP_ID, WidgetID.Options.AREA_SOUND_SLIDER), @@ -976,4 +979,4 @@ public enum WidgetInfo return groupId << 16 | childId; } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java index 62e2f22e4b..601c06bbce 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java @@ -42,11 +42,11 @@ import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.BufferProvider; import net.runelite.api.Client; -import net.runelite.api.Constants; import net.runelite.api.Entity; import net.runelite.api.MainBufferProvider; import net.runelite.api.NullItemID; import net.runelite.api.RenderOverview; +import net.runelite.api.Renderable; import net.runelite.api.Skill; import net.runelite.api.WorldMapManager; import net.runelite.api.events.BeforeMenuRender; @@ -65,6 +65,7 @@ import net.runelite.client.Notifier; import net.runelite.client.RuneLite; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseManager; import net.runelite.client.task.Scheduler; @@ -75,6 +76,7 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayRenderer; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.DeferredEventBus; +import net.runelite.client.util.RSTimeUnit; /** * This class contains field required for mixins and runelite hooks to work. @@ -85,13 +87,16 @@ import net.runelite.client.util.DeferredEventBus; @Slf4j public class Hooks implements Callbacks { - private static final long CHECK = Constants.GAME_TICK_LENGTH; // ms - how often to run checks + private static final long CHECK = RSTimeUnit.GAME_TICKS.getDuration().toNanos(); // ns - how often to run checks private static final Injector injector = RuneLite.getInjector(); private static final Client client = injector.getInstance(Client.class); private static final OverlayRenderer renderer = injector.getInstance(OverlayRenderer.class); private static final OverlayManager overlayManager = injector.getInstance(OverlayManager.class); + private static final GameTick GAME_TICK = new GameTick(); + private static final BeforeRender BEFORE_RENDER = new BeforeRender(); + @Inject private EventBus eventBus; @@ -139,7 +144,6 @@ public class Hooks implements Callbacks /** * Get the Graphics2D for the MainBufferProvider image * This caches the Graphics2D instance so it can be reused - * * @param mainBufferProvider * @return */ @@ -190,7 +194,7 @@ public class Hooks implements Callbacks clientThread.invoke(); - long now = System.currentTimeMillis(); + long now = System.nanoTime(); if (now - lastCheck < CHECK) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraOverlay.java new file mode 100644 index 0000000000..f379d60cb2 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraOverlay.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2020, Sean Dewar + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.camera; + +import java.awt.Dimension; +import java.awt.Graphics2D; +import javax.inject.Inject; +import net.runelite.api.Client; +import net.runelite.api.Point; +import net.runelite.api.VarClientInt; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayLayer; +import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.tooltip.Tooltip; +import net.runelite.client.ui.overlay.tooltip.TooltipManager; + +class CameraOverlay extends Overlay +{ + private final CameraConfig config; + private final Client client; + private final TooltipManager tooltipManager; + + @Inject + private CameraOverlay(final CameraConfig config, final Client client, final TooltipManager tooltipManager) + { + this.config = config; + this.client = client; + this.tooltipManager = tooltipManager; + setPosition(OverlayPosition.DYNAMIC); + setLayer(OverlayLayer.ABOVE_WIDGETS); + } + + @Override + public Dimension render(final Graphics2D graphics) + { + final Widget slider = client.getWidget(WidgetInfo.OPTIONS_CAMERA_ZOOM_SLIDER_HANDLE); + final Point mousePos = client.getMouseCanvasPosition(); + + if (slider == null || slider.isHidden() || !slider.getBounds().contains(mousePos.getX(), mousePos.getY())) + { + return null; + } + + final int value = client.getVar(VarClientInt.CAMERA_ZOOM_RESIZABLE_VIEWPORT); + final int max = config.innerLimit() ? config.INNER_ZOOM_LIMIT : CameraPlugin.DEFAULT_INNER_ZOOM_LIMIT; + + tooltipManager.add(new Tooltip("Camera Zoom: " + value + " / " + max)); + return null; + } +}