Merge remote-tracking branch 'runelite/master'

This commit is contained in:
Owain van Brakel
2022-03-23 15:06:14 +01:00
25 changed files with 2676 additions and 1409 deletions

View File

@@ -80,7 +80,9 @@ enum Pet
LITTLE_NIGHTMARE("Little nightmare", ItemID.LITTLE_NIGHTMARE),
LIL_CREATOR("Lil' creator", ItemID.LIL_CREATOR),
TINY_TEMPOR("Tiny tempor", ItemID.TINY_TEMPOR),
NEXLING("Nexling", ItemID.NEXLING);
NEXLING("Nexling", ItemID.NEXLING),
ABYSSAL_PROTECTOR("Abyssal protector", ItemID.ABYSSAL_PROTECTOR),
;
private final String name;
private final Integer iconID;

View File

@@ -116,7 +116,7 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
new EmoteClue("Panic on the pier where you catch the Fishing trawler. Have nothing equipped at all when you do.", "Fishing trawler", null, new WorldPoint(2676, 3169, 0), PANIC, emptySlot("Nothing at all", HEAD, CAPE, AMULET, WEAPON, BODY, SHIELD, LEGS, GLOVES, BOOTS, RING, AMMO)),
new EmoteClue("Panic in the heart of the Haunted Woods. Beware of double agents! Have no items equipped when you do.", "Haunted Woods (ALQ)", null, new WorldPoint(3611, 3492, 0), DOUBLE_AGENT_108, 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), DOUBLE_AGENT_141, ANGRY, any("Zamorak godsword", item(ZAMORAK_GODSWORD), item(ZAMORAK_GODSWORD_OR))),
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), DOUBLE_AGENT_141, ANGRY, any("Abyssal whip", item(ABYSSAL_WHIP), item(VOLCANIC_ABYSSAL_WHIP), item(FROZEN_ABYSSAL_WHIP)), item(CAPE_OF_LEGENDS), item(SPINED_CHAPS)),
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), DOUBLE_AGENT_141, ANGRY, any("Abyssal whip", item(ABYSSAL_WHIP), item(VOLCANIC_ABYSSAL_WHIP), item(FROZEN_ABYSSAL_WHIP), item(ABYSSAL_WHIP_OR)), 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), DOUBLE_AGENT_141, BECKON, range("Bryophyta's staff", 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)),

View File

@@ -203,7 +203,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll, Nam
new SkillChallengeClue("Activate the Chivalry prayer."),
new SkillChallengeClue("Hand in a Tier 2 or higher set of Shayzien supply armour. (Requires 11 lovakite bars)", "take the lovakengj armourers a boxed set of shayzien supply armour at tier 2 or above.", any("Shayzien Supply Set (Tier 2 or higher)", item(ItemID.SHAYZIEN_SUPPLY_SET_2), item(ItemID.SHAYZIEN_SUPPLY_SET_3), item(ItemID.SHAYZIEN_SUPPLY_SET_4), item(ItemID.SHAYZIEN_SUPPLY_SET_5))),
// Master Sherlock Tasks
new SkillChallengeClue("Equip an abyssal whip in front of the abyssal demons of the Slayer Tower.", true, any("Abyssal Whip", item(ItemID.ABYSSAL_WHIP), item(ItemID.FROZEN_ABYSSAL_WHIP), item(ItemID.VOLCANIC_ABYSSAL_WHIP))),
new SkillChallengeClue("Equip an abyssal whip in front of the abyssal demons of the Slayer Tower.", true, any("Abyssal Whip", item(ItemID.ABYSSAL_WHIP), item(ItemID.FROZEN_ABYSSAL_WHIP), item(ItemID.VOLCANIC_ABYSSAL_WHIP), item(ItemID.ABYSSAL_WHIP_OR))),
new SkillChallengeClue("Smith a runite med helm.", ANY_HAMMER, item(ItemID.RUNITE_BAR)),
new SkillChallengeClue("Teleport to a spirit tree you planted yourself."),
new SkillChallengeClue("Create a Barrows teleport tablet.", item(ItemID.DARK_ESSENCE_BLOCK), xOfItem(ItemID.BLOOD_RUNE, 1), xOfItem(ItemID.LAW_RUNE, 2), xOfItem(ItemID.SOUL_RUNE, 2)),

View File

@@ -355,6 +355,8 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
System.setProperty("jogl.debug", "true");
}
System.setProperty("jogamp.gluegen.TestTempDirExec", "false");
GLProfile.initSingleton();
invokeOnMainThread(() ->

View File

@@ -46,8 +46,7 @@ public interface GroundItemsConfig extends Config
@ConfigSection(
name = "Item Lists",
description = "The highlighted and hidden item lists",
position = 0,
closedByDefault = true
position = 0
)
String itemLists = "itemLists";

View File

@@ -1,431 +0,0 @@
/*
* Copyright (c) 2019 Spudjb <https://github.com/spudjb>
* 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.questlist;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.EnumMap;
import java.util.List;
import java.util.stream.Collectors;
import javax.inject.Inject;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import net.runelite.api.Client;
import net.runelite.api.GameState;
import net.runelite.api.ScriptID;
import net.runelite.api.SoundEffectID;
import net.runelite.api.SpriteID;
import net.runelite.api.VarClientInt;
import net.runelite.api.Varbits;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.ScriptPostFired;
import net.runelite.api.events.VarClientIntChanged;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.widgets.JavaScriptCallback;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.api.widgets.WidgetPositionMode;
import net.runelite.api.widgets.WidgetType;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.chatbox.ChatboxPanelManager;
import net.runelite.client.game.chatbox.ChatboxTextInput;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.Text;
@PluginDescriptor(
name = "Quest List",
description = "Adds searching and filtering to the quest list"
)
public class QuestListPlugin extends Plugin
{
private static final int ENTRY_PADDING = 8;
private static final List<String> QUEST_HEADERS = ImmutableList.of("Free Quests", "Members' Quests", "Miniquests");
private static final String MENU_OPEN = "Open";
private static final String MENU_CLOSE = "Close";
private static final String MENU_TOGGLE = "Toggle";
private static final String MENU_SEARCH = "Search";
private static final String MENU_SHOW = "Show";
@Inject
private Client client;
@Inject
private ChatboxPanelManager chatboxPanelManager;
@Inject
private ClientThread clientThread;
private ChatboxTextInput searchInput;
private Widget questSearchButton;
private Widget questHideButton;
private EnumMap<QuestContainer, Collection<QuestWidget>> questSet;
private QuestState currentFilterState;
@Override
protected void startUp()
{
currentFilterState = QuestState.ALL;
clientThread.invoke(this::addQuestButtons);
}
@Override
protected void shutDown()
{
currentFilterState = null;
Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX);
if (header != null)
{
header.deleteAllChildren();
}
}
@Subscribe
public void onGameStateChanged(GameStateChanged e)
{
if (e.getGameState() == GameState.LOGGING_IN)
{
currentFilterState = QuestState.ALL;
}
}
@Subscribe
public void onScriptPostFired(ScriptPostFired event)
{
if (event.getScriptId() != ScriptID.QUESTLIST_PROGRESS_LIST_SHOW)
{
return;
}
addQuestButtons();
}
private void addQuestButtons()
{
Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX);
if (header != null)
{
header.deleteAllChildren();
questSearchButton = header.createChild(-1, WidgetType.GRAPHIC);
questSearchButton.setSpriteId(SpriteID.GE_SEARCH);
questSearchButton.setOriginalWidth(18);
questSearchButton.setOriginalHeight(17);
questSearchButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questSearchButton.setOriginalX(5);
questSearchButton.setOriginalY(0);
questSearchButton.setHasListener(true);
questSearchButton.setAction(1, MENU_OPEN);
questSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch());
questSearchButton.setName(MENU_SEARCH);
questSearchButton.revalidate();
questHideButton = header.createChild(-1, WidgetType.GRAPHIC);
redrawHideButton();
questHideButton.setOriginalWidth(13);
questHideButton.setOriginalHeight(13);
questHideButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questHideButton.setOriginalX(24);
questHideButton.setOriginalY(2);
questHideButton.setHasListener(true);
questHideButton.setOnOpListener((JavaScriptCallback) e -> toggleHidden());
questHideButton.setAction(1, MENU_TOGGLE);
questHideButton.revalidate();
questSet = new EnumMap<>(QuestContainer.class);
updateFilter();
}
}
@Subscribe
public void onVarbitChanged(VarbitChanged varbitChanged)
{
if (isChatboxOpen() && !isOnQuestTab())
{
chatboxPanelManager.close();
}
}
@Subscribe
public void onVarClientIntChanged(VarClientIntChanged varClientIntChanged)
{
if (varClientIntChanged.getIndex() == VarClientInt.INVENTORY_TAB.getIndex())
{
if (isChatboxOpen() && !isOnQuestTab())
{
chatboxPanelManager.close();
}
}
}
private void toggleHidden()
{
QuestState[] questStates = QuestState.values();
int nextState = (currentFilterState.ordinal() + 1) % questStates.length;
currentFilterState = questStates[nextState];
redrawHideButton();
updateFilter();
client.playSoundEffect(SoundEffectID.UI_BOOP);
}
private void redrawHideButton()
{
questHideButton.setSpriteId(currentFilterState.getSpriteId());
questHideButton.setName(MENU_SHOW + " " + currentFilterState.getName());
}
private boolean isOnQuestTab()
{
return client.getVar(Varbits.QUEST_TAB) == 0 && client.getVar(VarClientInt.INVENTORY_TAB) == 2;
}
private boolean isChatboxOpen()
{
return searchInput != null && chatboxPanelManager.getCurrentInput() == searchInput;
}
private void closeSearch()
{
updateFilter("");
chatboxPanelManager.close();
client.playSoundEffect(SoundEffectID.UI_BOOP);
}
private void openSearch()
{
updateFilter("");
client.playSoundEffect(SoundEffectID.UI_BOOP);
questSearchButton.setAction(1, MENU_CLOSE);
questSearchButton.setOnOpListener((JavaScriptCallback) e -> closeSearch());
searchInput = chatboxPanelManager.openTextInput("Search quest list")
.onChanged(s -> clientThread.invokeLater(() -> updateFilter(s)))
.onDone(s -> false)
.onClose(() ->
{
clientThread.invokeLater(() -> updateFilter(""));
questSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch());
questSearchButton.setAction(1, MENU_OPEN);
})
.build();
}
private void updateFilter()
{
String filter = "";
if (isChatboxOpen())
{
filter = searchInput.getValue();
}
updateFilter(filter);
}
private void updateFilter(String filter)
{
filter = filter.toLowerCase();
final Widget container = client.getWidget(WidgetInfo.QUESTLIST_CONTAINER);
final Widget freeList = client.getWidget(QuestContainer.FREE_QUESTS.widgetInfo);
final Widget memberList = client.getWidget(QuestContainer.MEMBER_QUESTS.widgetInfo);
final Widget miniList = client.getWidget(QuestContainer.MINI_QUESTS.widgetInfo);
if (container == null || freeList == null || memberList == null || miniList == null)
{
return;
}
updateList(QuestContainer.FREE_QUESTS, filter);
updateList(QuestContainer.MEMBER_QUESTS, filter);
updateList(QuestContainer.MINI_QUESTS, filter);
memberList.setOriginalY(freeList.getOriginalY() + freeList.getOriginalHeight() + ENTRY_PADDING);
miniList.setOriginalY(memberList.getOriginalY() + memberList.getOriginalHeight() + ENTRY_PADDING);
// originalHeight is changed within updateList so revalidate all lists
freeList.revalidate();
memberList.revalidate();
miniList.revalidate();
int y = miniList.getRelativeY() + miniList.getHeight() + 10;
int newHeight;
if (container.getScrollHeight() > 0)
{
newHeight = (container.getScrollY() * y) / container.getScrollHeight();
}
else
{
newHeight = 0;
}
container.setScrollHeight(y);
container.revalidateScroll();
clientThread.invokeLater(() ->
client.runScript(
ScriptID.UPDATE_SCROLLBAR,
WidgetInfo.QUESTLIST_SCROLLBAR.getId(),
WidgetInfo.QUESTLIST_CONTAINER.getId(),
newHeight
));
}
private void updateList(QuestContainer questContainer, String filter)
{
Widget list = client.getWidget(questContainer.widgetInfo);
if (list == null)
{
return;
}
Collection<QuestWidget> quests = questSet.get(questContainer);
if (quests != null)
{
// Check to make sure the list hasn't been rebuild since we were last her
// Do this by making sure the list's dynamic children are the same as when we last saw them
if (quests.stream().noneMatch(w ->
{
Widget codeWidget = w.getQuest();
if (codeWidget == null)
{
return false;
}
return list.getChild(codeWidget.getIndex()) == codeWidget;
}))
{
quests = null;
}
}
if (quests == null)
{
// Find all of the widgets that we care about, sorting by their Y value
quests = Arrays.stream(list.getDynamicChildren())
.sorted(Comparator.comparingInt(Widget::getRelativeY))
.filter(w -> !QUEST_HEADERS.contains(w.getText()))
.map(w -> new QuestWidget(w, Text.removeTags(w.getText()).toLowerCase()))
.collect(Collectors.toList());
questSet.put(questContainer, quests);
}
// offset because of header
int y = 20;
for (QuestWidget questInfo : quests)
{
Widget quest = questInfo.getQuest();
QuestState questState = QuestState.getByColor(quest.getTextColor());
boolean hidden;
if (!filter.isEmpty())
{
// If searching, show result regardless of filtered state
hidden = !questInfo.getTitle().contains(filter);
}
else
{
// Otherwise hide if it doesn't match the filter state
if (currentFilterState == QuestState.NOT_COMPLETED)
{
hidden = questState == QuestState.COMPLETE;
}
else
{
hidden = currentFilterState != QuestState.ALL && questState != currentFilterState;
}
}
quest.setHidden(hidden);
quest.setOriginalY(y);
quest.revalidate();
if (!hidden)
{
y += quest.getHeight();
}
}
list.setOriginalHeight(y);
}
@AllArgsConstructor
@Getter
private enum QuestContainer
{
FREE_QUESTS(WidgetInfo.QUESTLIST_FREE_CONTAINER),
MEMBER_QUESTS(WidgetInfo.QUESTLIST_MEMBERS_CONTAINER),
MINI_QUESTS(WidgetInfo.QUESTLIST_MINIQUEST_CONTAINER);
private final WidgetInfo widgetInfo;
}
@AllArgsConstructor
@Getter
private enum QuestState
{
NOT_STARTED(0xff0000, "Not started", SpriteID.MINIMAP_ORB_HITPOINTS),
IN_PROGRESS(0xffff00, "In progress", SpriteID.MINIMAP_ORB_HITPOINTS_DISEASE),
COMPLETE(0xdc10d, "Completed", SpriteID.MINIMAP_ORB_HITPOINTS_POISON),
ALL(0, "All", SpriteID.MINIMAP_ORB_PRAYER),
NOT_COMPLETED(0, "Not Completed", SpriteID.MINIMAP_ORB_RUN);
private final int color;
private final String name;
private final int spriteId;
static QuestState getByColor(int color)
{
for (QuestState value : values())
{
if (value.getColor() == color)
{
return value;
}
}
return null;
}
}
@Data
@AllArgsConstructor
private static class QuestWidget
{
private Widget quest;
private String title;
}
}

View File

@@ -253,16 +253,10 @@
282,
283
],
"notes": [
"research notes": [
291,
20770,
20771,
20772,
21056,
21057,
21058,
26276,
26596
10492,
25824
],
"glarials urn": [
296,
@@ -3282,7 +3276,25 @@
3682,
3683,
3684,
3685
3685,
26656,
26657,
26658,
26659,
26660,
26661,
26662,
26663,
26664,
26665,
26666,
26667,
26668,
26669,
26670,
26671,
26672,
26673
],
"enchanted lyre": [
3690,
@@ -3561,7 +3573,9 @@
12017,
12018,
25250,
25278
25278,
26763,
26782
],
"sled": [
4083,
@@ -4959,23 +4973,27 @@
6731,
11770,
23624,
25258
25258,
26767
],
"archers ring": [
6733,
11771,
25260
25260,
26768
],
"warrior ring": [
6735,
11772,
25262
25262,
26769
],
"berserker ring": [
6737,
11773,
23595,
25264
25264,
26770
],
"dragon axe": [
6739,
@@ -6313,7 +6331,18 @@
25273,
25274,
25275,
25276
25276,
26771,
26772,
26773,
26774,
26775,
26776,
26777,
26778,
26779,
26780,
26781
],
"bandana eyepatch": [
8924,
@@ -6791,10 +6820,6 @@
10340,
20577
],
"research notes": [
10492,
25824
],
"avas accumulator": [
10499,
23609
@@ -7466,9 +7491,30 @@
11820,
11822
],
"armadyl helmet": [
11826,
26714
],
"armadyl chestplate": [
11828,
26715
],
"armadyl chainskirt": [
11830,
26716
],
"bandos chestplate": [
11832,
26718
],
"bandos tassets": [
11834,
23646
23646,
26719
],
"bandos boots": [
11836,
26720
],
"dragon boots": [
11840,
@@ -7643,7 +7689,18 @@
25908,
25910,
25912,
25914
25914,
26674,
26675,
26676,
26677,
26678,
26679,
26680,
26681,
26682,
26683,
26684
],
"slayer ring": [
11866,
@@ -7735,17 +7792,20 @@
"ring of the gods": [
12601,
13202,
25252
25252,
26764
],
"tyrannical ring": [
12603,
12691,
25254
25254,
26765
],
"treasonous ring": [
12605,
12692,
25256
25256,
26766
],
"book of war": [
12608,
@@ -8438,7 +8498,8 @@
],
"dragon warhammer": [
13576,
20785
20785,
26710
],
"seed box": [
13639,
@@ -8467,7 +8528,8 @@
],
"dragon claws": [
13652,
20784
20784,
26708
],
"bag of gems": [
19473,
@@ -8476,7 +8538,8 @@
],
"heavy ballista": [
19481,
23630
23630,
26712
],
"dragon javelin": [
19484,
@@ -8516,7 +8579,9 @@
20655,
20657,
25246,
25248
25248,
26761,
26762
],
"amulet of torture": [
19553,
@@ -8655,6 +8720,16 @@
20769,
21055
],
"notes": [
20770,
20771,
20772,
21056,
21057,
21058,
26276,
26596
],
"killers knife": [
20781,
21059
@@ -8911,7 +8986,8 @@
"granite ring": [
21739,
21752,
25193
25193,
26685
],
"royal accord of twill": [
21758,
@@ -9212,6 +9288,10 @@
22500,
22502
],
"escape crystal": [
22517,
25961
],
"coin pouch": [
22521,
22522,
@@ -10397,5 +10477,153 @@
26653,
26654,
26655
],
"maomas med helm": [
26686,
26743,
26744
],
"maomas helm": [
26687,
26745,
26746
],
"maomas great helm": [
26688,
26747,
26748
],
"calamity chest": [
26689,
26749,
26750
],
"superior calamity chest": [
26690,
26751,
26752
],
"elite calamity chest": [
26691,
26753,
26754
],
"calamity breeches": [
26692,
26755,
26756
],
"superior calamity breeches": [
26693,
26757,
26758
],
"elite calamity breeches": [
26694,
26759,
26760
],
"centurion cuirass": [
26695,
26721,
26722
],
"wristbands of the arena": [
26696,
26723,
26724,
26725,
26726,
26727,
26728,
26729,
26730
],
"koriffs headband": [
26698,
26737,
26738
],
"koriffs cowl": [
26699,
26739,
26740
],
"koriffs coif": [
26700,
26741,
26742
],
"saikas hood": [
26701,
26731,
26732
],
"saikas veil": [
26702,
26733,
26734
],
"saikas shroud": [
26703,
26735,
26736
],
"colossal pouch": [
26784,
26786,
26906
],
"ring of the elements": [
26815,
26818
],
"abyssal lantern": [
26822,
26824,
26826,
26828,
26830,
26832,
26834,
26836,
26838,
26840,
26842,
26844,
26846,
26848
],
"hat of the eye": [
26850,
26858,
26864,
26870
],
"robe top of the eye": [
26852,
26860,
26866,
26872
],
"robe bottoms of the eye": [
26854,
26862,
26868,
26874
],
"portal talisman": [
26887,
26888,
26889,
26890,
26891,
26892,
26893,
26894,
26895,
26896,
26897,
26898
]
}

View File

@@ -1 +1 @@
95E7960E289ECA35DEADD35BC5A34AEBAA1C9F367AC42A71A5F3EFCCA0600D10
9DD950503D89B0A449488A4642B4810F076835EAEDB21AAB69544B359A35CD8A

View File

@@ -6,7 +6,7 @@
get_varbit 4394
iconst 1
if_icmpeq LABEL4
jump LABEL23
jump LABEL24
LABEL4:
iload 0
iconst 1
@@ -30,41 +30,43 @@ LABEL16:
join_string 5
mes
LABEL23:
return
LABEL24:
invoke 5262
iconst 0
if_icmpeq LABEL27
jump LABEL33
LABEL27:
if_icmpeq LABEL28
jump LABEL34
LABEL28:
iload 3
iconst 4
if_icmpeq LABEL31
jump LABEL33
LABEL31:
if_icmpeq LABEL32
jump LABEL34
LABEL32:
get_varc_int 945
istore 3
LABEL33:
LABEL34:
iload 3
iconst -1
if_icmpne LABEL37
jump LABEL70
LABEL37:
if_icmpne LABEL38
jump LABEL71
LABEL38:
iload 3
iconst 4
if_icmple LABEL41
jump LABEL70
LABEL41:
if_icmple LABEL42
jump LABEL71
LABEL42:
iload 3
get_varc_int 945
if_icmpne LABEL45
jump LABEL70
LABEL45:
if_icmpne LABEL46
jump LABEL71
LABEL46:
iload 3
set_varc_int 945
iload 3
iconst 0
if_icmpne LABEL51
jump LABEL61
LABEL51:
if_icmpne LABEL52
jump LABEL62
LABEL52:
sconst "Your chatbox mode is now set to "
iconst 105
iconst 115
@@ -74,8 +76,8 @@ LABEL51:
sconst " chat, to reset your mode type /@p"
join_string 3
mes
jump LABEL70
LABEL61:
jump LABEL71
LABEL62:
sconst "Your chatbox mode has been reset to "
iconst 105
iconst 115
@@ -85,28 +87,28 @@ LABEL61:
sconst " chat."
join_string 3
mes
LABEL70:
LABEL71:
iload 2
iconst 1
if_icmpeq LABEL74
jump LABEL112
LABEL74:
if_icmpeq LABEL75
jump LABEL113
LABEL75:
get_varc_int 945
switch
1: LABEL77
2: LABEL98
3: LABEL103
4: LABEL108
jump LABEL112
LABEL77:
1: LABEL78
2: LABEL99
3: LABEL104
4: LABEL109
jump LABEL113
LABEL78:
iconst 2
istore 0
sload 0
string_length
iconst 0
if_icmpgt LABEL84
jump LABEL97
LABEL84:
if_icmpgt LABEL85
jump LABEL98
LABEL85:
sload 0
iconst 0
iconst 1
@@ -114,33 +116,33 @@ LABEL84:
sconst "/"
compare
iconst 0 ;
if_icmpne LABEL93
jump LABEL97
LABEL93:
if_icmpne LABEL94
jump LABEL98
LABEL94:
sconst "/"
sload 0
append
sstore 0
LABEL97:
jump LABEL112
LABEL98:
jump LABEL113
LABEL99:
iconst 3
iconst 0
istore 1
istore 0
jump LABEL112
LABEL103:
jump LABEL113
LABEL104:
iconst 4
iconst 0
istore 1
istore 0
jump LABEL112
LABEL108:
jump LABEL113
LABEL109:
iconst 3
iconst 1
istore 1
istore 0
LABEL112:
LABEL113:
sload 0 ; load input
iload 0 ; load chat type
iload 1 ; load clan target
@@ -157,31 +159,31 @@ CONTINUE:
sstore 1
iload 0
iconst 2
if_icmpeq LABEL124
if_icmpeq LABEL125
iload 0
iconst 3
if_icmpeq LABEL124
if_icmpeq LABEL125
iload 0
iconst 4
if_icmpeq LABEL124
jump LABEL164
LABEL124:
if_icmpeq LABEL125
jump LABEL175
LABEL125:
sload 0
invoke 5501
iconst 1
if_icmpeq LABEL129
jump LABEL133
LABEL129:
if_icmpeq LABEL130
jump LABEL134
LABEL130:
sload 0
invoke 632
sstore 0
sstore 1
LABEL133:
LABEL134:
iload 1
iconst 1
if_icmpeq LABEL137
jump LABEL153
LABEL137:
if_icmpeq LABEL138
jump LABEL164
LABEL138:
sload 0
iconst 0
iconst 1
@@ -198,20 +200,17 @@ LABEL137:
sload 0
append
sstore 0
LABEL153:
sload 0
string_length
iconst 0
if_icmple LABEL158
jump LABEL159
LABEL158:
return
iconst 80
if_icmpgt LABEL159
jump LABEL164
LABEL159:
sload 0
iload 0
iload 1
chat_sendclan
jump LABEL173
iconst 0
iconst 80
substring
sstore 0
LABEL164:
sload 0
string_length
@@ -221,10 +220,24 @@ LABEL164:
LABEL169:
return
LABEL170:
sload 0
iload 0
iload 1
chat_sendclan
jump LABEL184
LABEL175:
sload 0
string_length
iconst 0
if_icmple LABEL180
jump LABEL181
LABEL180:
return
LABEL181:
sload 0
iload 0
chat_sendpublic
LABEL173:
LABEL184:
clientclock
set_varc_int 61
return

View File

@@ -1 +1 @@
E4001956B7EAAB914D97C392358D20A95B1EFD929278D8CBC380C7354418D345
7D493EF06AAA3BE49BCCB9E0A5F4EC5A4EDC5280D4965D3C0140CC691F8946F4

View File

@@ -47,7 +47,7 @@ LABEL23:
get_varbit 8119
iconst 1
if_icmpeq LABEL42
jump LABEL184
jump LABEL201
LABEL42:
invoke 3160
iconst 1
@@ -127,11 +127,17 @@ LABEL96:
join_string 4
append
sstore 2
get_varc_string 335
invoke 1353
iconst 1
if_icmpeq LABEL109
jump LABEL121
LABEL109:
iload 2
iconst 80
if_icmplt LABEL108
jump LABEL115
LABEL108:
iconst 79
if_icmplt LABEL113
jump LABEL120
LABEL113:
sload 2
sload 0
sconst "*"
@@ -139,7 +145,22 @@ LABEL108:
join_string 3
append
sstore 2
LABEL115:
LABEL120:
jump LABEL132
LABEL121:
iload 2
iconst 80
if_icmplt LABEL125
jump LABEL132
LABEL125:
sload 2
sload 0
sconst "*"
sconst "</col>"
join_string 3
append
sstore 2
LABEL132:
sload 2
iconst 2147483647
iconst 495
@@ -147,9 +168,9 @@ LABEL115:
istore 3
iload 4
iconst 1
if_icmpeq LABEL124
jump LABEL141
LABEL124:
if_icmpeq LABEL141
jump LABEL158
LABEL141:
iconst 60
iconst 5
iload 3
@@ -166,8 +187,8 @@ LABEL124:
iconst 2
iconst 10616868
if_setposition
jump LABEL153
LABEL141:
jump LABEL170
LABEL158:
iconst 0
iconst 30
iconst 0
@@ -180,26 +201,26 @@ LABEL141:
iconst 2
iconst 10616868
if_setposition
LABEL153:
LABEL170:
iload 3
iconst 10616887
if_getwidth
if_icmpgt LABEL158
jump LABEL164
LABEL158:
if_icmpgt LABEL175
jump LABEL181
LABEL175:
iconst 2
iconst 2
iconst 0
iconst 10616887
if_settextalign
jump LABEL169
LABEL164:
jump LABEL186
LABEL181:
iconst 0
iconst 2
iconst 0
iconst 10616887
if_settextalign
LABEL169:
LABEL186:
iconst 10616887
if_clearops
iconst -1
@@ -214,19 +235,19 @@ LABEL169:
sconst ""
iconst 10616887
if_setonop
jump LABEL234
LABEL184:
jump LABEL251
LABEL201:
invoke 3160
iconst 1
if_icmpeq LABEL188
jump LABEL193
LABEL188:
if_icmpeq LABEL205
jump LABEL210
LABEL205:
sconst "<img=22>"
sconst " You must set a name before you can chat."
join_string 2
sstore 2
jump LABEL201
LABEL193:
jump LABEL218
LABEL210:
iconst 105
iconst 115
iconst 1894
@@ -235,7 +256,7 @@ LABEL193:
sconst " You must set a name before you can chat."
join_string 2
sstore 2
LABEL201:
LABEL218:
iconst 1
iconst 2
iconst 0
@@ -269,7 +290,7 @@ LABEL201:
sconst "ii"
iconst 10616887
if_setonop
LABEL234:
LABEL251:
sload 2
iconst 10616887
if_settext

View File

@@ -1 +1 @@
7A4628DC7933B4340CEC5F1B3C75ED1857FEDB5E683829499A07E5C364F633FA
9B38CB6BF195C49B10D856C5F571AFDEC7BBEF96A4E3532F5B23E9341066144C

View File

@@ -90,13 +90,13 @@ LABEL60:
iload 0
iconst 84
if_icmpeq LABEL76
jump LABEL829
jump LABEL822
LABEL76:
invoke 1984
iload 2
iconst 0
if_icmpgt LABEL81
jump LABEL828
jump LABEL821
LABEL81:
iload 3
iconst 1
@@ -699,44 +699,39 @@ LABEL587:
sconst "You are not chatting as a guest in a clan channel at the moment."
mes
LABEL589:
jump LABEL824
jump LABEL817
LABEL590:
iload 5
iconst 41
if_icmpeq LABEL594
jump LABEL665
jump LABEL658
LABEL594:
iload 8
iconst 0
if_icmpeq LABEL598
jump LABEL636
jump LABEL629
LABEL598:
iconst 0
activeclanchannel_find_affined
iconst 1
if_icmpeq LABEL603
jump LABEL636
jump LABEL629
LABEL603:
get_varbit 931
iconst 0
if_icmpeq LABEL607
jump LABEL633
LABEL607:
chat_playername
removetags
activeclanchannel_getuserslot
istore 7
iload 7
iconst -1
if_icmpne LABEL615
jump LABEL630
LABEL615:
if_icmpne LABEL611
jump LABEL626
LABEL611:
iload 7
activeclanchannel_getuserrank
activeclanchannel_getranktalk
if_icmpge LABEL620
jump LABEL630
LABEL620:
if_icmpge LABEL616
jump LABEL626
LABEL616:
get_varc_string 335
iload 6
iload 2
@@ -746,29 +741,24 @@ LABEL620:
iconst 0
iload 9
invoke 5517
jump LABEL632
LABEL630:
jump LABEL628
LABEL626:
sconst "You do not have the required rank to talk in the clan's channel."
mes
LABEL632:
jump LABEL635
LABEL633:
sconst "You have muted your clan's channel. Unmute it if you wish to talk in it."
mes
LABEL635:
jump LABEL664
LABEL636:
LABEL628:
jump LABEL657
LABEL629:
iload 8
iconst 1
if_icmpeq LABEL640
jump LABEL655
LABEL640:
if_icmpeq LABEL633
jump LABEL648
LABEL633:
iconst 1
activeclanchannel_find_affined
iconst 1
if_icmpeq LABEL645
jump LABEL655
LABEL645:
if_icmpeq LABEL638
jump LABEL648
LABEL638:
get_varc_string 335
iload 6
iload 2
@@ -778,56 +768,56 @@ LABEL645:
iconst 0
iload 9
invoke 5517
jump LABEL664
LABEL655:
jump LABEL657
LABEL648:
iload 8
iconst 1
if_icmpeq LABEL659
jump LABEL662
LABEL659:
if_icmpeq LABEL652
jump LABEL655
LABEL652:
sconst "You are not chatting in the channel of your Iron Group at the moment."
mes
jump LABEL664
LABEL662:
sconst "You are not chatting in the channel of your own Iron Group at the moment."
jump LABEL657
LABEL655:
sconst "You are not chatting in the channel of your Clan at the moment."
mes
LABEL664:
jump LABEL824
LABEL665:
LABEL657:
jump LABEL817
LABEL658:
iload 5
iconst 9
if_icmpeq LABEL669
jump LABEL713
LABEL669:
if_icmpeq LABEL662
jump LABEL706
LABEL662:
clan_getchatcount
iconst 0
if_icmpgt LABEL673
jump LABEL706
LABEL673:
if_icmpgt LABEL666
jump LABEL699
LABEL666:
get_varbit 4394
iconst 1
if_icmpeq LABEL677
jump LABEL679
LABEL677:
if_icmpeq LABEL670
jump LABEL672
LABEL670:
clan_leavechat
jump LABEL705
LABEL679:
jump LABEL698
LABEL672:
iload 6
iconst 1
if_icmplt LABEL683
jump LABEL688
LABEL683:
if_icmplt LABEL676
jump LABEL681
LABEL676:
sconst "/"
get_varc_string 335
append
set_varc_string 335
jump LABEL699
LABEL688:
jump LABEL692
LABEL681:
iload 6
iconst 3
if_icmpge LABEL692
jump LABEL699
LABEL692:
if_icmpge LABEL685
jump LABEL692
LABEL685:
sconst "/"
get_varc_string 335
iload 6
@@ -835,30 +825,30 @@ LABEL692:
substring
append
set_varc_string 335
LABEL699:
LABEL692:
get_varc_string 335
iconst 2
iconst -1
iconst 0
iload 9
invoke 5517
LABEL705:
jump LABEL712
LABEL706:
LABEL698:
jump LABEL705
LABEL699:
get_varc_string 335
iconst 0
iconst -1
iconst 0
iconst -1
invoke 5517
LABEL712:
jump LABEL824
LABEL713:
LABEL705:
jump LABEL817
LABEL706:
iload 5
iconst 2
if_icmpeq LABEL717
jump LABEL727
LABEL717:
if_icmpeq LABEL710
jump LABEL720
LABEL710:
get_varc_string 335
iload 6
iload 2
@@ -868,98 +858,98 @@ LABEL717:
iconst 0
iload 9
invoke 5517
jump LABEL824
LABEL727:
jump LABEL817
LABEL720:
iload 4
iconst 1
if_icmpeq LABEL731
jump LABEL818
LABEL731:
if_icmpeq LABEL724
jump LABEL811
LABEL724:
iload 2
iconst 2
if_icmpgt LABEL735
jump LABEL811
LABEL735:
if_icmpgt LABEL728
jump LABEL804
LABEL728:
get_varc_string 335
sconst "::toggleroof"
iconst 0
string_indexof_string
iconst 0
if_icmpeq LABEL742
jump LABEL770
LABEL742:
if_icmpeq LABEL735
jump LABEL763
LABEL735:
getremoveroofs
iconst 1
if_icmpeq LABEL746
jump LABEL758
LABEL746:
if_icmpeq LABEL739
jump LABEL751
LABEL739:
iconst 0
setremoveroofs
get_varbit 12378
iconst 0
if_icmpeq LABEL752
jump LABEL755
LABEL752:
if_icmpeq LABEL745
jump LABEL748
LABEL745:
sconst "Roofs will only be removed selectively."
mes
jump LABEL757
LABEL755:
jump LABEL750
LABEL748:
sconst "Roofs will only be removed selectively. This setting will not be saved."
mes
LABEL757:
jump LABEL769
LABEL758:
LABEL750:
jump LABEL762
LABEL751:
iconst 1
setremoveroofs
get_varbit 12378
iconst 1
if_icmpeq LABEL764
jump LABEL767
LABEL764:
if_icmpeq LABEL757
jump LABEL760
LABEL757:
sconst "Roofs are now all hidden."
mes
jump LABEL769
LABEL767:
jump LABEL762
LABEL760:
sconst "Roofs are now all hidden. This setting will not be saved."
mes
LABEL769:
jump LABEL810
LABEL770:
LABEL762:
jump LABEL803
LABEL763:
get_varc_string 335
sconst "::wiki "
iconst 0
string_indexof_string
iconst 0
if_icmpeq LABEL782
if_icmpeq LABEL775
get_varc_string 335
sconst "::wiki"
compare
iconst 0
if_icmpeq LABEL782
if_icmpeq LABEL775
sconst "runeliteCommand" ; load callback name
runelite_callback ; invoke callback
jump LABEL785
LABEL782:
jump LABEL778
LABEL775:
get_varc_string 335
invoke 3299
jump LABEL810
LABEL785:
jump LABEL803
LABEL778:
get_varc_string 335
sconst "::bank"
iconst 0
string_indexof_string
iconst 0
if_icmpeq LABEL792
jump LABEL799
LABEL792:
if_icmpeq LABEL785
jump LABEL792
LABEL785:
sconst "Hey, everyone, I just tried to do something very silly!"
iconst 0
iconst -1
iconst 0
iconst -1
invoke 5517
jump LABEL810
LABEL799:
jump LABEL803
LABEL792:
get_varc_string 335
invoke 224
set_varc_string 335
@@ -971,97 +961,97 @@ LABEL799:
iload 2
substring
docheat
LABEL803:
jump LABEL810
LABEL804:
get_varc_string 335
iconst 0
iconst -1
iconst 0
iconst -1
invoke 5517
LABEL810:
jump LABEL817
LABEL811:
get_varc_string 335
iconst 0
iconst -1
iconst 0
iconst -1
invoke 5517
LABEL817:
jump LABEL824
LABEL818:
get_varc_string 335
iconst 0
iconst -1
iconst 1
iload 9
invoke 5517
LABEL824:
LABEL817:
get_varc_string 335
invoke 77
sconst ""
set_varc_string 335
LABEL828:
jump LABEL904
LABEL829:
LABEL821:
jump LABEL897
LABEL822:
iload 0
iconst 104
if_icmpeq LABEL833
jump LABEL839
LABEL833:
if_icmpeq LABEL826
jump LABEL832
LABEL826:
iload 3
iconst 1
if_icmpeq LABEL837
jump LABEL838
LABEL837:
if_icmpeq LABEL830
jump LABEL831
LABEL830:
invoke 75
LABEL838:
jump LABEL904
LABEL839:
LABEL831:
jump LABEL897
LABEL832:
iload 0
iconst 105
if_icmpeq LABEL843
jump LABEL849
LABEL843:
if_icmpeq LABEL836
jump LABEL842
LABEL836:
iload 3
iconst 1
if_icmpeq LABEL847
jump LABEL848
LABEL847:
if_icmpeq LABEL840
jump LABEL841
LABEL840:
invoke 76
LABEL848:
jump LABEL904
LABEL849:
LABEL841:
jump LABEL897
LABEL842:
iload 0
iconst 80
if_icmpeq LABEL853
jump LABEL898
LABEL853:
if_icmpeq LABEL846
jump LABEL891
LABEL846:
iconst 40697936
iconst 1
cc_find
iconst 1
if_icmpeq LABEL859
jump LABEL860
LABEL859:
if_icmpeq LABEL852
jump LABEL853
LABEL852:
return
LABEL860:
LABEL853:
get_varc_string 356
string_length
iconst 0
if_icmpgt LABEL865
jump LABEL885
LABEL865:
if_icmpgt LABEL858
jump LABEL878
LABEL858:
get_varc_string 356
friend_test
iconst 1
if_icmpeq LABEL870
jump LABEL873
LABEL870:
if_icmpeq LABEL863
jump LABEL866
LABEL863:
get_varc_string 356
invoke 107
return
LABEL873:
LABEL866:
get_varc_int 60
clientclock
if_icmpgt LABEL877
jump LABEL878
LABEL877:
if_icmpgt LABEL870
jump LABEL871
LABEL870:
return
LABEL878:
LABEL871:
clientclock
iconst 50
add
@@ -1069,14 +1059,14 @@ LABEL878:
sconst "That player was not found on your Friends list."
mes
return
LABEL885:
LABEL878:
get_varc_int 60
clientclock
if_icmpgt LABEL889
jump LABEL890
LABEL889:
if_icmpgt LABEL882
jump LABEL883
LABEL882:
return
LABEL890:
LABEL883:
clientclock
iconst 50
add
@@ -1084,8 +1074,8 @@ LABEL890:
sconst "You haven't received any messages to which you can reply."
mes
return
jump LABEL904
LABEL898:
jump LABEL897
LABEL891:
get_varc_string 335
iconst 0
iload 0
@@ -1097,9 +1087,9 @@ LABEL898:
runelite_callback ;
if_icmpeq SKIPSETVARC ; skip setting varc with input
set_varc_string 335
jump LABEL904 ; jump over SKIPSETVARC
jump LABEL897 ; jump over SKIPSETVARC
SKIPSETVARC:
pop_string ; pop message
LABEL904:
LABEL897:
invoke 223
return