MES: various updates (#2101)

MES: various updates
This commit is contained in:
Owain van Brakel
2019-12-06 00:18:51 +01:00
committed by GitHub
6 changed files with 5 additions and 913 deletions

View File

@@ -34,7 +34,6 @@ import net.runelite.client.config.ConfigSection;
import net.runelite.client.config.Keybind;
import net.runelite.client.plugins.menuentryswapper.util.ArdougneCloakMode;
import net.runelite.client.plugins.menuentryswapper.util.BurningAmuletMode;
import net.runelite.client.plugins.menuentryswapper.util.CharterOption;
import net.runelite.client.plugins.menuentryswapper.util.CombatBraceletMode;
import net.runelite.client.plugins.menuentryswapper.util.ConstructionCapeMode;
import net.runelite.client.plugins.menuentryswapper.util.ConstructionMode;
@@ -826,18 +825,6 @@ public interface MenuEntrySwapperConfig extends Config
return false;
}
@ConfigItem(
keyName = "charterOption",
name = "Trader Crew",
description = "Configure whether you want Charter or Trade to be the first option of Trader Crewmembers.",
position = 27,
section = "miscellaneousSection"
)
default CharterOption charterOption()
{
return CharterOption.TRADE;
}
//------------------------------------------------------------//
// Shop / Stores
//------------------------------------------------------------//
@@ -1319,17 +1306,6 @@ public interface MenuEntrySwapperConfig extends Config
// Teleportation
//------------------------------------------------------------//
@ConfigItem(
keyName = "lastJewel",
name = "Last Destination for Jewellery Box",
description = "Adds a \"Last-destination\" menu option when Jewellery Boxes are right clicked",
section = "teleportationSection"
)
default boolean lastJewel()
{
return true;
}
@ConfigItem(
keyName = "swapFairyRing",
name = "Fairy Ring",
@@ -1951,23 +1927,4 @@ public interface MenuEntrySwapperConfig extends Config
{
return "cure other, energy transfer, heal other, vengeance other";
}
@ConfigItem(
keyName = "lastDes",
name = "",
description = "Last jewellery box destination (option)",
hidden = true
)
default String lastDes()
{
return "";
}
@ConfigItem(
keyName = "lastDes",
name = "",
description = "Last jewellery box destination (option)",
hidden = true
)
void lastDes(String des);
}

View File

@@ -62,16 +62,10 @@ import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.ClientTick;
import net.runelite.api.events.FocusChanged;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.Menu;
import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.MenuOpened;
import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.util.Text;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.config.Keybind;
@@ -96,7 +90,6 @@ import net.runelite.client.plugins.menuentryswapper.comparables.ShopComparableEn
import net.runelite.client.plugins.menuentryswapper.comparables.WithdrawComparableEntry;
import net.runelite.client.plugins.menuentryswapper.util.ArdougneCloakMode;
import net.runelite.client.plugins.menuentryswapper.util.BurningAmuletMode;
import net.runelite.client.plugins.menuentryswapper.util.CharterOption;
import net.runelite.client.plugins.menuentryswapper.util.CombatBraceletMode;
import net.runelite.client.plugins.menuentryswapper.util.ConstructionCapeMode;
import net.runelite.client.plugins.menuentryswapper.util.ConstructionMode;
@@ -108,7 +101,6 @@ import net.runelite.client.plugins.menuentryswapper.util.GamesNecklaceMode;
import net.runelite.client.plugins.menuentryswapper.util.GloryMode;
import net.runelite.client.plugins.menuentryswapper.util.HouseAdvertisementMode;
import net.runelite.client.plugins.menuentryswapper.util.HouseMode;
import net.runelite.client.plugins.menuentryswapper.util.JewelleryBoxDestination;
import net.runelite.client.plugins.menuentryswapper.util.MaxCapeMode;
import net.runelite.client.plugins.menuentryswapper.util.NecklaceOfPassageMode;
import net.runelite.client.plugins.menuentryswapper.util.ObeliskMode;
@@ -123,7 +115,6 @@ import net.runelite.client.plugins.pvptools.PvpToolsConfig;
import net.runelite.client.plugins.pvptools.PvpToolsPlugin;
import net.runelite.client.util.HotkeyListener;
import static net.runelite.client.util.MenuUtil.swap;
import org.apache.commons.lang3.ArrayUtils;
@PluginDescriptor(
name = "Menu Entry Swapper",
@@ -140,10 +131,6 @@ public class MenuEntrySwapperPlugin extends Plugin
private static final Object CONTROL = new Object();
private static final Object HOTKEY_CHECK = new Object();
private static final Object CONTROL_CHECK = new Object();
private static final Object JEWEL_CLICKED = new Object();
private static final Object JEWEL_TELE = new Object();
private static final Object JEWEL_WIDGET = new Object();
private static final int PURO_PURO_REGION_ID = 10307;
private static final Set<MenuOpcode> NPC_MENU_TYPES = ImmutableSet.of(
MenuOpcode.NPC_FIRST_OPTION, MenuOpcode.NPC_SECOND_OPTION, MenuOpcode.NPC_THIRD_OPTION,
@@ -202,7 +189,6 @@ public class MenuEntrySwapperPlugin extends Plugin
private List<String> bankItemNames = new ArrayList<>();
private BurningAmuletMode getBurningAmuletMode;
private CharterOption charterOption;
private CombatBraceletMode getCombatBraceletMode;
private ArdougneCloakMode ardougneCloakMode;
private ConstructionCapeMode constructionCapeMode;
@@ -304,8 +290,6 @@ public class MenuEntrySwapperPlugin extends Plugin
private boolean swapTravel;
private boolean swapWildernessLever;
private JewelleryBoxDestination lastDes;
@Provides
MenuEntrySwapperConfig provideConfig(ConfigManager configManager)
{
@@ -315,13 +299,9 @@ public class MenuEntrySwapperPlugin extends Plugin
@Override
public void startUp()
{
this.lastDes = JewelleryBoxDestination.withOption(config.lastDes());
updateConfig();
if (config.lastJewel())
{
eventBus.subscribe(MenuOptionClicked.class, JEWEL_CLICKED, this::onMenuOptionClicked);
}
addSwaps();
loadConstructionItems();
loadCustomSwaps(config.customSwaps(), customSwaps);
@@ -414,16 +394,6 @@ public class MenuEntrySwapperPlugin extends Plugin
case "removedObjects":
updateRemovedObjects();
return;
case "lastJewel":
if (config.lastJewel())
{
eventBus.subscribe(MenuOptionClicked.class, JEWEL_CLICKED, this::onMenuOptionClicked);
}
else
{
eventBus.unregister(JEWEL_CLICKED);
}
return;
}
if (event.getKey().startsWith("swapSell") || event.getKey().startsWith("swapBuy") ||
@@ -551,21 +521,6 @@ public class MenuEntrySwapperPlugin extends Plugin
}
}
if (config.lastJewel() && option.equals("teleport") && entry.getTarget().contains("Jewellery Box") && lastDes != null)
{
final MenuEntry lastDesEntry = new MenuEntry();
lastDesEntry.setOpcode(MenuOpcode.PRIO_RUNELITE.getId());
lastDesEntry.setOption(lastDes.getOption());
lastDesEntry.setTarget(entry.getTarget());
lastDesEntry.setIdentifier(entry.getIdentifier());
lastDesEntry.setParam0(entry.getParam0());
lastDesEntry.setParam1(entry.getParam1());
menu_entries.add(lastDesEntry);
}
menu_entries.add(entry);
}
@@ -734,83 +689,6 @@ public class MenuEntrySwapperPlugin extends Plugin
}
}
private void onMenuOptionClicked(MenuOptionClicked entry)
{
if (entry.getOpcode() == MenuOpcode.WIDGET_DEFAULT.getId() &&
WidgetInfo.TO_GROUP(entry.getParam1()) == WidgetID.JEWELLERY_BOX_GROUP_ID)
{
if (entry.getOption().equals(lastDes == null ? null : lastDes.getOption()))
{
return;
}
JewelleryBoxDestination newDest = JewelleryBoxDestination.withOption(entry.getOption());
if (newDest == null)
{
return;
}
lastDes = newDest;
config.lastDes(lastDes.getOption());
}
else if (entry.getOption().equals("Teleport") && entry.getTarget().contains("Jewellery Box"))
{
eventBus.unregister(JEWEL_WIDGET);
}
else if (lastDes != null &&
entry.getOpcode() == MenuOpcode.PRIO_RUNELITE.getId() &&
entry.getOption().equals(lastDes.getOption()))
{
entry.setOption("Teleport");
entry.setOpcode(MenuOpcode.GAME_OBJECT_FIRST_OPTION.getId());
eventBus.subscribe(ScriptCallbackEvent.class, JEWEL_WIDGET, this::onScriptCallback);
}
}
private void onScriptCallback(ScriptCallbackEvent event)
{
if (!event.getEventName().equals("jewelleryBoxDone"))
{
return;
}
eventBus.unregister(JEWEL_WIDGET);
// Use a event so we don't accidentally run another script before returning
// menu also is when jagex is probably expecting input like this so :)
eventBus.subscribe(Menu.class, JEWEL_TELE, this::teleportInputs);
}
private void teleportInputs(Menu menu)
{
final Widget parent = client.getWidget(lastDes.getParent());
if (parent == null)
{
return;
}
final Widget child = parent.getChild(lastDes.getChildIndex());
if (child == null)
{
return;
}
Object[] args = child.getOnOp();
if (args == null)
{
return;
}
// Replace opIndex with 1
args[ArrayUtils.indexOf(args, 0x80000004)] = 1;
client.runScript(args);
eventBus.unregister(JEWEL_TELE);
menu.dontRun();
}
private void loadCustomSwaps(String config, Map<AbstractComparableEntry, Integer> map)
{
final Map<AbstractComparableEntry, Integer> tmp = new HashMap<>();
@@ -1011,6 +889,10 @@ public class MenuEntrySwapperPlugin extends Plugin
menuManager.addPriorityEntry("Rellekka");
menuManager.addPriorityEntry("Follow", "Elkoy").setPriority(10);
menuManager.addPriorityEntry("Transport");
}
if (this.swapAbyssTeleport)
{
menuManager.addPriorityEntry("Teleport", "Mage of zamorak").setPriority(10);
}
@@ -1680,7 +1562,6 @@ public class MenuEntrySwapperPlugin extends Plugin
private void updateConfig()
{
this.charterOption = config.charterOption();
this.configCustomShiftSwaps = config.shiftCustomSwaps();
this.configCustomSwaps = config.customSwaps();
this.ardougneCloakMode = config.ardougneCloakMode();

View File

@@ -1,20 +0,0 @@
package net.runelite.client.plugins.menuentryswapper.util;
public enum CharterOption
{
TRADE("Trade"),
CHARTER("Charter");
private final String name;
CharterOption(String name)
{
this.name = name;
}
@Override
public String toString()
{
return name;
}
}

View File

@@ -1,88 +0,0 @@
/*
* Copyright (c) 2019, Lucas <https://github.com/lucwousin>
* 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.menuentryswapper.util;
import com.google.common.collect.ImmutableMap;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.runelite.api.widgets.WidgetInfo;
@RequiredArgsConstructor
@Getter
public enum JewelleryBoxDestination
{
DUEL_ARENA("Duel Arena", WidgetInfo.JEWELLERY_BOX_DUEL_RING, 5),
CASTLE_WARS("Castle Wars", WidgetInfo.JEWELLERY_BOX_DUEL_RING, 6),
CLAN_WARS("Clan Wars", WidgetInfo.JEWELLERY_BOX_DUEL_RING, 7),
BURTHORPE("Burthorpe", WidgetInfo.JEWELLERY_BOX_GAME_NECK, 5),
BARB_OUTPOST("Barbarian Outpost", WidgetInfo.JEWELLERY_BOX_GAME_NECK, 6),
CORP("Corporeal Beast", WidgetInfo.JEWELLERY_BOX_GAME_NECK, 7),
TEARS_OF_GUTHIX("Tears of Guthix", WidgetInfo.JEWELLERY_BOX_GAME_NECK, 8),
WINTERTODT("Wintertodt Camp", WidgetInfo.JEWELLERY_BOX_GAME_NECK, 9),
WARRIOR_GUILD("Warriors' Guild", WidgetInfo.JEWELLERY_BOX_COMB_BRAC, 5),
CHAMPION_GUILD("Champions' Guild", WidgetInfo.JEWELLERY_BOX_COMB_BRAC, 6),
MONASTERY("Monastery", WidgetInfo.JEWELLERY_BOX_COMB_BRAC, 7),
RANGING_GUILD("Ranging Guild", WidgetInfo.JEWELLERY_BOX_COMB_BRAC, 8),
FISHING_GUILD("Fishing Guild", WidgetInfo.JEWELLERY_BOX_SKIL_NECK, 5),
MINING_GUILD("Mining Guild", WidgetInfo.JEWELLERY_BOX_SKIL_NECK, 6),
CRAFTING_GUILD("Crafting Guild", WidgetInfo.JEWELLERY_BOX_SKIL_NECK, 7),
COOKING_GUILD("Cooking Guild", WidgetInfo.JEWELLERY_BOX_SKIL_NECK, 8),
WOODCUTTING_GUILD("Woodcutting Guild", WidgetInfo.JEWELLERY_BOX_SKIL_NECK, 9),
FARMING_GUILD("Farming Guild", WidgetInfo.JEWELLERY_BOX_SKIL_NECK, 10),
MISCELLANIA("Miscellania", WidgetInfo.JEWELLERY_BOX_RING_OFGP, 5),
GRAND_EXCHANGE("Grand Exchange", WidgetInfo.JEWELLERY_BOX_RING_OFGP, 6),
FALADOR_PARK("Falador Park", WidgetInfo.JEWELLERY_BOX_RING_OFGP, 7),
DONDAKAN("Dondakan's Rock", WidgetInfo.JEWELLERY_BOX_RING_OFGP, 8),
EDGEVILLE("Edgeville", WidgetInfo.JEWELLERY_BOX_AMUL_GLOR, 5),
KARAMJA("Karamja", WidgetInfo.JEWELLERY_BOX_AMUL_GLOR, 6),
DRAYNOR("Draynor Village", WidgetInfo.JEWELLERY_BOX_AMUL_GLOR, 7),
AL_KHARID("Al Kharid", WidgetInfo.JEWELLERY_BOX_AMUL_GLOR, 8);
final String option;
final WidgetInfo parent;
final int childIndex;
private static final ImmutableMap<String, JewelleryBoxDestination> map;
static
{
final ImmutableMap.Builder<String, JewelleryBoxDestination> builder = ImmutableMap.builderWithExpectedSize(values().length);
for (JewelleryBoxDestination val : values())
{
builder.put(val.option, val);
}
map = builder.build();
}
public static JewelleryBoxDestination withOption(String option)
{
return map.get(option);
}
}

View File

@@ -1 +0,0 @@
8C575721ABBD408F564BB6A93894BEFC4D7928A6FBF0218FE5F5E68BD9354C3C

View File

@@ -1,637 +0,0 @@
.id 1685
.int_stack_count 2
.string_stack_count 1
.int_var_count 15
.string_var_count 2
invoke 2157
iconst 38666241
sload 0
iconst 0
invoke 228
pop_int
iconst 38666240
cc_deleteall
iconst 0
istore 2
iconst 0
istore 3
iconst 38666240
if_getwidth
istore 4
iload 4
iconst 10
sub
iconst 10
sub
iconst 5
sub
istore 4
iload 4
iconst 2
div
istore 5
iconst 38666240
if_getheight
istore 6
iload 6
iconst 40
sub
iconst 10
sub
iconst 5
sub
iconst 5
sub
istore 6
iconst 0
istore 7
iconst 0
istore 8
iconst 0
istore 9
iconst 5
istore 10
iconst 6
istore 11
iconst 4
istore 12
iload 10
iload 11
add
iload 12
add
istore 13
iload 10
iload 13
iload 6
scale
istore 7
iload 11
iload 13
iload 6
scale
istore 8
iload 12
iload 13
iload 6
scale
istore 9
iload 5
iload 7
iconst 0
iconst 0
iconst 38666242
if_setsize
iconst 10
iconst 40
iconst 0
iconst 0
iconst 38666242
if_setposition
iload 5
iload 7
iconst 0
iconst 0
iconst 38666243
if_setsize
iconst 10
iload 5
add
iconst 5
add
iconst 40
iconst 0
iconst 0
iconst 38666243
if_setposition
iload 5
iload 8
iconst 0
iconst 0
iconst 38666244
if_setsize
iconst 10
iconst 40
iload 7
add
iconst 5
add
iconst 0
iconst 0
iconst 38666244
if_setposition
iload 5
iload 8
iconst 0
iconst 0
iconst 38666245
if_setsize
iconst 10
iload 5
add
iconst 5
add
iconst 40
iload 7
add
iconst 5
add
iconst 0
iconst 0
iconst 38666245
if_setposition
iload 5
iload 9
iconst 0
iconst 0
iconst 38666246
if_setsize
iconst 10
iconst 40
iload 7
add
iload 8
add
iconst 5
add
iconst 5
add
iconst 0
iconst 0
iconst 38666246
if_setposition
iload 5
iload 9
iconst 0
iconst 0
iconst 38666247
if_setsize
iconst 10
iload 5
add
iconst 5
add
iconst 40
iload 7
add
iload 8
add
iconst 5
add
iconst 5
add
iconst 0
iconst 0
iconst 38666247
if_setposition
iconst 38666242
iconst 1
sconst "Ring of Dueling"
iconst 2552
iload 0
invoke 1686
istore 14
iconst 38666242
iconst 3
invoke 1687
istore 3
istore 2
iconst 38666242
iconst 1
sconst "Duel Arena"
iload 3
iload 0
iload 14
iload 2
iconst 0
invoke 1688
istore 2
istore 14
iconst 38666242
iconst 1
sconst "Castle Wars"
iload 3
iload 0
iload 14
iload 2
iconst 1
invoke 1688
istore 2
istore 14
iconst 38666242
iconst 1
sconst "Clan Wars"
iload 3
iload 0
iload 14
iload 2
iconst 2
invoke 1688
istore 2
istore 14
iconst 38666243
iconst 1
sconst "Games Necklace"
iconst 3853
iload 0
invoke 1686
istore 14
iconst 38666243
iconst 5
invoke 1687
istore 3
istore 2
iconst 38666243
iconst 1
sconst "Burthorpe"
iload 3
iload 0
iload 14
iload 2
iconst 3
invoke 1688
istore 2
istore 14
iconst 38666243
iconst 1
sconst "Barbarian Outpost"
iload 3
iload 0
iload 14
iload 2
iconst 4
invoke 1688
istore 2
istore 14
iconst 38666243
iconst 1
sconst "Corporeal Beast"
iload 3
iload 0
iload 14
iload 2
iconst 5
invoke 1688
istore 2
istore 14
sconst "Tears of Guthix"
sstore 1
iload 1
iconst 0
testbit
iconst 0
if_icmpeq LABEL279
jump LABEL284
LABEL279:
sconst "<str>"
sload 1
sconst "</str>"
join_string 3
sstore 1
LABEL284:
iconst 38666243
iconst 1
sload 1
iload 3
iload 0
iload 14
iload 2
iconst 6
invoke 1688
istore 2
istore 14
sconst "Wintertodt Camp"
sstore 1
iload 1
iconst 1
testbit
iconst 0
if_icmpeq LABEL303
jump LABEL308
LABEL303:
sconst "<str>"
sload 1
sconst "</str>"
join_string 3
sstore 1
LABEL308:
iconst 38666243
iconst 1
sload 1
iload 3
iload 0
iload 14
iload 2
iconst 7
invoke 1688
istore 2
istore 14
iconst 38666244
iconst 2
sconst "Combat bracelet"
iconst 11972
iload 0
invoke 1686
istore 14
iconst 38666244
iconst 4
invoke 1687
istore 3
istore 2
iconst 38666244
iconst 2
sconst "Warriors' Guild"
iload 3
iload 0
iload 14
iload 2
iconst 8
invoke 1688
istore 2
istore 14
iconst 38666244
iconst 2
sconst "Champions' Guild"
iload 3
iload 0
iload 14
iload 2
iconst 9
invoke 1688
istore 2
istore 14
iconst 38666244
iconst 2
sconst "Monastery"
iload 3
iload 0
iload 14
iload 2
iconst 10
invoke 1688
istore 2
istore 14
iconst 38666244
iconst 2
sconst "Ranging Guild"
iload 3
iload 0
iload 14
iload 2
iconst 11
invoke 1688
istore 2
istore 14
iconst 38666245
iconst 2
sconst "Skills necklace"
iconst 11968
iload 0
invoke 1686
istore 14
iconst 38666245
iconst 6
invoke 1687
istore 3
istore 2
iconst 38666245
iconst 2
sconst "Fishing Guild"
iload 3
iload 0
iload 14
iload 2
iconst 12
invoke 1688
istore 2
istore 14
iconst 38666245
iconst 2
sconst "Mining Guild"
iload 3
iload 0
iload 14
iload 2
iconst 13
invoke 1688
istore 2
istore 14
iconst 38666245
iconst 2
sconst "Crafting Guild"
iload 3
iload 0
iload 14
iload 2
iconst 14
invoke 1688
istore 2
istore 14
iconst 38666245
iconst 2
sconst "Cooking Guild"
iload 3
iload 0
iload 14
iload 2
iconst 15
invoke 1688
istore 2
istore 14
sconst "Woodcutting Guild"
sstore 1
iload 1
iconst 1
testbit
iconst 0
if_icmpeq LABEL439
jump LABEL444
LABEL439:
sconst "<str>"
sload 1
sconst "</str>"
join_string 3
sstore 1
LABEL444:
iconst 38666245
iconst 2
sload 1
iload 3
iload 0
iload 14
iload 2
iconst 16
invoke 1688
istore 2
istore 14
sconst "Farming Guild"
sstore 1
iload 1
iconst 1
testbit
iconst 0
if_icmpeq LABEL463
jump LABEL468
LABEL463:
sconst "<str>"
sload 1
sconst "</str>"
join_string 3
sstore 1
LABEL468:
iconst 38666245
iconst 2
sload 1
iload 3
iload 0
iload 14
iload 2
iconst 17
invoke 1688
istore 2
istore 14
iconst 38666246
iconst 3
sconst "Ring of Wealth"
iconst 11980
iload 0
invoke 1686
istore 14
iconst 38666246
iconst 4
invoke 1687
istore 3
istore 2
sconst "Miscellania"
sstore 1
iload 1
iconst 2
testbit
iconst 0
if_icmpeq LABEL499
jump LABEL504
LABEL499:
sconst "<str>"
sload 1
sconst "</str>"
join_string 3
sstore 1
LABEL504:
iconst 38666246
iconst 3
sload 1
iload 3
iload 0
iload 14
iload 2
iconst 18
invoke 1688
istore 2
istore 14
iconst 38666246
iconst 3
sconst "Grand Exchange"
iload 3
iload 0
iload 14
iload 2
iconst 19
invoke 1688
istore 2
istore 14
iconst 38666246
iconst 3
sconst "Falador Park"
iload 3
iload 0
iload 14
iload 2
iconst 20
invoke 1688
istore 2
istore 14
sconst "Dondakan's Rock"
sstore 1
iload 1
iconst 3
testbit
iconst 0
if_icmpeq LABEL545
jump LABEL550
LABEL545:
sconst "<str>"
sload 1
sconst "</str>"
join_string 3
sstore 1
LABEL550:
iconst 38666246
iconst 3
sload 1
iload 3
iload 0
iload 14
iload 2
iconst 21
invoke 1688
istore 2
istore 14
iconst 38666247
iconst 3
sconst "Amulet of Glory"
iconst 11978
iload 0
invoke 1686
istore 14
iconst 38666247
iconst 4
invoke 1687
istore 3
istore 2
iconst 38666247
iconst 3
sconst "Edgeville"
iload 3
iload 0
iload 14
iload 2
iconst 22
invoke 1688
istore 2
istore 14
iconst 38666247
iconst 3
sconst "Karamja"
iload 3
iload 0
iload 14
iload 2
iconst 23
invoke 1688
istore 2
istore 14
iconst 38666247
iconst 3
sconst "Draynor Village"
iload 3
iload 0
iload 14
iload 2
iconst 24
invoke 1688
istore 2
istore 14
iconst 38666247
iconst 3
sconst "Al Kharid"
iload 3
iload 0
iload 14
iload 2
iconst 25
invoke 1688
istore 2
istore 14
sconst "jewelleryBoxDone"
runelite_callback
return