Merge remote-tracking branch 'runelite/master'

This commit is contained in:
Owain van Brakel
2019-10-23 18:21:03 +02:00
32 changed files with 542 additions and 273 deletions

View File

@@ -120,9 +120,6 @@ public class KaramjaDiaryRequirement extends GenericDiaryRequirement
new CombatLevelRequirement(100),
new SkillRequirement(Skill.SLAYER, 50),
new QuestRequirement(Quest.SHILO_VILLAGE));
add("Kill a metal dragon in Brimhaven Dungeon.",
new SkillRequirement(Skill.AGILITY, 12),
new SkillRequirement(Skill.WOODCUTTING, 34));
// ELITE
add("Craft 56 Nature runes at once.",

View File

@@ -168,6 +168,7 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati
.put(new WorldPoint(3051, 3736, 0), "East of the Wilderness Obelisk in 28 Wilderness.")
.put(new WorldPoint(2316, 3814, 0), "West of Neitiznot, near the bridge.")
.put(new WorldPoint(2872, 3937, 0), "Weiss.")
.put(new WorldPoint(2835, 2998, 0), "Northeast corner of the Island of Stone.")
// Master
.put(new WorldPoint(2178, 3209, 0), "South of Elf Camp.")
.put(new WorldPoint(2155, 3100, 0), "South of Port Tyras (BJS).")

View File

@@ -312,7 +312,9 @@ public class ExaminePlugin extends Plugin
|| WidgetInfo.CLUE_SCROLL_REWARD_ITEM_CONTAINER.getGroupId() == widgetGroup
|| WidgetInfo.LOOTING_BAG_CONTAINER.getGroupId() == widgetGroup
|| WidgetID.SEED_VAULT_INVENTORY_GROUP_ID == widgetGroup
|| WidgetID.SEED_BOX_GROUP_ID == widgetGroup)
|| WidgetID.SEED_BOX_GROUP_ID == widgetGroup
|| WidgetID.PLAYER_TRADE_SCREEN_GROUP_ID == widgetGroup
|| WidgetID.PLAYER_TRADE_INVENTORY_GROUP_ID == widgetGroup)
{
Widget[] children = widget.getDynamicChildren();
if (actionParam < children.length)

View File

@@ -24,6 +24,7 @@
*/
package net.runelite.client.plugins.fishing;
import java.awt.Color;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
@@ -76,7 +77,40 @@ public interface FishingConfig extends Config
}
@ConfigItem(
position = 4,
keyName = "overlayColor",
name = "Overlay Color",
description = "Color of overlays",
position = 4
)
default Color getOverlayColor()
{
return Color.CYAN;
}
@ConfigItem(
keyName = "minnowsOverlayColor",
name = "Minnows Overlay Color",
description = "Color of overlays for Minnows",
position = 5
)
default Color getMinnowsOverlayColor()
{
return Color.RED;
}
@ConfigItem(
keyName = "aerialOverlayColor",
name = "Aerial Overlay Color",
description = "Color of overlays when 1-tick aerial fishing",
position = 6
)
default Color getAerialOverlayColor()
{
return Color.GREEN;
}
@ConfigItem(
position = 7,
keyName = "statTimeout",
name = "Reset stats (minutes)",
description = "The time until fishing session data is reset in minutes."
@@ -87,7 +121,7 @@ public interface FishingConfig extends Config
}
@ConfigItem(
position = 5,
position = 8,
keyName = "showFishingStats",
name = "Show Fishing session stats",
description = "Display the fishing session stats."
@@ -98,7 +132,7 @@ public interface FishingConfig extends Config
}
@ConfigItem(
position = 6,
position = 9,
keyName = "showMinnowOverlay",
name = "Show Minnow Movement overlay",
description = "Display the minnow progress pie overlay."
@@ -109,7 +143,7 @@ public interface FishingConfig extends Config
}
@ConfigItem(
position = 7,
position = 10,
keyName = "trawlerNotification",
name = "Trawler activity notification",
description = "Send a notification when fishing trawler activity drops below 15%."
@@ -120,7 +154,7 @@ public interface FishingConfig extends Config
}
@ConfigItem(
position = 8,
position = 11,
keyName = "trawlerTimer",
name = "Trawler timer in MM:SS",
description = "Trawler Timer will display a more accurate timer in MM:SS format."

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.fishing;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Provides;
import java.awt.Color;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
@@ -157,6 +158,12 @@ public class FishingPlugin extends Plugin
private boolean showMinnowOverlay;
private boolean trawlerNotification;
private boolean trawlerTimer;
@Getter(AccessLevel.PACKAGE)
private Color overlayColor;
@Getter(AccessLevel.PACKAGE)
private Color minnowsOverlayColor;
@Getter(AccessLevel.PACKAGE)
private Color aerialOverlayColor;
@Override
protected void startUp() throws Exception
@@ -404,6 +411,7 @@ public class FishingPlugin extends Plugin
if (regionID != TRAWLER_SHIP_REGION_NORMAL && regionID != TRAWLER_SHIP_REGION_SINKING)
{
log.debug("Trawler session ended");
trawlerStartTime = null;
return;
}
@@ -477,5 +485,8 @@ public class FishingPlugin extends Plugin
this.showMinnowOverlay = config.showMinnowOverlay();
this.trawlerNotification = config.trawlerNotification();
this.trawlerTimer = config.trawlerTimer();
this.overlayColor = config.getOverlayColor();
this.minnowsOverlayColor = config.getMinnowsOverlayColor();
this.aerialOverlayColor = config.getAerialOverlayColor();
}
}

View File

@@ -76,7 +76,9 @@ class FishingSpotMinimapOverlay extends Overlay
continue;
}
Color color = npc.getSpotAnimation() == GraphicID.FLYING_FISH ? Color.RED : Color.CYAN;
Color color = npc.getSpotAnimation() == GraphicID.FLYING_FISH
? plugin.getMinnowsOverlayColor()
: plugin.getOverlayColor();
net.runelite.api.Point minimapLocation = npc.getMinimapLocation();
if (minimapLocation != null)

View File

@@ -107,15 +107,15 @@ class FishingSpotOverlay extends Overlay
Color color;
if (npc.getSpotAnimation() == GraphicID.FLYING_FISH)
{
color = Color.RED;
color = plugin.getMinnowsOverlayColor();
}
else if (spot == FishingSpot.COMMON_TENCH && npc.getWorldLocation().distanceTo2D(client.getLocalPlayer().getWorldLocation()) <= ONE_TICK_AERIAL_FISHING)
{
color = Color.GREEN;
color = plugin.getAerialOverlayColor();
}
else
{
color = Color.CYAN;
color = plugin.getOverlayColor();
}
if (spot == FishingSpot.MINNOW && plugin.isShowMinnowOverlay())
@@ -161,7 +161,7 @@ class FishingSpotOverlay extends Overlay
if (spot == FishingSpot.COMMON_TENCH
&& npc.getWorldLocation().distanceTo2D(client.getLocalPlayer().getWorldLocation()) <= ONE_TICK_AERIAL_FISHING)
{
fishImage = ImageUtil.outlineImage(itemManager.getImage(spot.getFishSpriteId()), Color.GREEN);
fishImage = ImageUtil.outlineImage(itemManager.getImage(spot.getFishSpriteId()), color);
}
if (fishImage != null)

View File

@@ -46,6 +46,7 @@ import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.border.EmptyBorder;
@@ -90,6 +91,10 @@ class LootTrackerPanel extends PluginPanel
private static final String HTML_LABEL_TEMPLATE =
"<html><body style='color:%s'>%s<span style='color:white'>%s</span></body></html>";
private static final String SYNC_RESET_ALL_WARNING_TEXT =
"This will permanently delete the current loot from both the client and the RuneLite website.";
private static final String NO_SYNC_RESET_ALL_WARNING_TEXT =
"This will permanently delete the current loot from the client.";
// When there is no loot, display this
private final PluginErrorPanel errorPanel = new PluginErrorPanel();
@@ -385,6 +390,18 @@ class LootTrackerPanel extends PluginPanel
final JMenuItem reset = new JMenuItem("Reset All");
reset.addActionListener(e ->
{
final LootTrackerClient client = plugin.getLootTrackerClient();
final boolean syncLoot = client != null && config.syncPanel();
final int result = JOptionPane.showOptionDialog(overallPanel,
syncLoot ? SYNC_RESET_ALL_WARNING_TEXT : NO_SYNC_RESET_ALL_WARNING_TEXT,
"Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
null, new String[]{"Yes", "No"}, "No");
if (result != JOptionPane.YES_OPTION)
{
return;
}
// If not in detailed view, remove all, otherwise only remove for the currently detailed title
records.removeIf(r -> r.matches(currentView));
boxes.removeIf(b -> b.matches(currentView));
@@ -393,8 +410,7 @@ class LootTrackerPanel extends PluginPanel
logsContainer.repaint();
// Delete all loot, or loot matching the current view
LootTrackerClient client = plugin.getLootTrackerClient();
if (client != null && config.syncPanel())
if (syncLoot)
{
client.delete(currentView);
}

View File

@@ -703,6 +703,10 @@ public class LootTrackerPlugin extends Plugin
eventType = "Kingdom of Miscellania";
container = client.getItemContainer(InventoryID.KINGDOM_OF_MISCELLANIA);
break;
case (WidgetID.FISHING_TRAWLER_REWARD_GROUP_ID):
eventType = "Fishing Trawler";
container = client.getItemContainer(InventoryID.FISHING_TRAWLER_REWARD);
break;
default:
return;
}

View File

@@ -28,10 +28,9 @@ package net.runelite.client.plugins.randomevents;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Provides;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Actor;
import net.runelite.api.Client;
import net.runelite.api.MenuOpcode;
@@ -39,10 +38,9 @@ import net.runelite.api.NPC;
import net.runelite.api.NpcID;
import net.runelite.api.Player;
import net.runelite.api.events.ConfigChanged;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.InteractingChanged;
import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.NpcSpawned;
import net.runelite.api.events.NpcDespawned;
import net.runelite.client.Notifier;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.EventBus;
@@ -54,6 +52,7 @@ import net.runelite.client.plugins.PluginDescriptor;
description = "Notify when random events appear and remove talk/dismiss options on events that aren't yours.",
enabledByDefault = false
)
@Slf4j
public class RandomEventPlugin extends Plugin
{
private static final Set<Integer> EVENT_NPCS = ImmutableSet.of(
@@ -86,10 +85,8 @@ public class RandomEventPlugin extends Plugin
);
private static final int RANDOM_EVENT_TIMEOUT = 150;
private Map<NPC, Integer> spawnedNpcs = new HashMap<>();
private NPC currentRandomEvent;
// event npcs teleport to you to stay in range, we need to throttle spawns
private int lastEventTick = -RANDOM_EVENT_TIMEOUT;
private int lastNotificationTick = -RANDOM_EVENT_TIMEOUT; // to avoid double notifications
@Inject
private Client client;
@@ -132,73 +129,54 @@ public class RandomEventPlugin extends Plugin
{
eventBus.unregister(this);
lastEventTick = 0;
lastNotificationTick = 0;
currentRandomEvent = null;
spawnedNpcs.clear();
}
private void addSubscriptions()
{
eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned);
eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged);
eventBus.subscribe(GameTick.class, this, this::onGameTick);
eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded);
eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged);
}
private void onNpcSpawned(NpcSpawned event)
{
NPC npc = event.getNpc();
if (!EVENT_NPCS.contains(npc.getId()))
{
return;
}
// only occasionally do event npcs spawn with non-null interacting
if (npc.getInteracting() == client.getLocalPlayer())
{
if (client.getTickCount() - lastEventTick > RANDOM_EVENT_TIMEOUT)
{
currentRandomEvent = npc;
lastEventTick = client.getTickCount();
}
}
else
{
spawnedNpcs.put(npc, client.getTickCount());
}
}
private void onInteractingChanged(InteractingChanged event)
{
Actor source = event.getSource();
Actor target = event.getTarget();
Player player = client.getLocalPlayer();
if (spawnedNpcs.containsKey(source))
// Check that the npc is interacting with the player and the player isn't interacting with the npc, so
// that the notification doesn't fire from talking to other user's randoms
if (player == null
|| target != player
|| player.getInteracting() == source
|| !(source instanceof NPC)
|| !EVENT_NPCS.contains(((NPC) source).getId()))
{
Player player = client.getLocalPlayer();
if (player == target && client.getTickCount() - lastEventTick > RANDOM_EVENT_TIMEOUT)
return;
}
log.debug("Random event spawn: {}", source.getName());
currentRandomEvent = (NPC) source;
if (client.getTickCount() - lastNotificationTick > RANDOM_EVENT_TIMEOUT)
{
lastNotificationTick = client.getTickCount();
if (shouldNotify(currentRandomEvent.getId()))
{
currentRandomEvent = (NPC) source;
if (shouldNotify(currentRandomEvent.getId()))
{
notifier.notify("Random event spawned: " + currentRandomEvent.getName());
}
notifier.notify("Random event spawned: " + currentRandomEvent.getName());
}
}
}
private void onGameTick(GameTick event)
private void onNpcDespawned(NpcDespawned npcDespawned)
{
if (!spawnedNpcs.isEmpty())
{
// allow 2 ticks for interacting to get set
spawnedNpcs.entrySet().removeIf(entry -> client.getTickCount() - entry.getValue() >= 2);
}
NPC npc = npcDespawned.getNpc();
if (client.getTickCount() - lastEventTick > RANDOM_EVENT_TIMEOUT)
if (npc == currentRandomEvent)
{
currentRandomEvent = null;
}

View File

@@ -1,4 +1,4 @@
/*
/**
* Copyright (c) 2018, Kruithne <kruithne@gmail.com>
* Copyright (c) 2018, Psikoi <https://github.com/psikoi>
* All rights reserved.
@@ -132,6 +132,9 @@ class SkillCalculator extends JPanel
// Clear the search bar
searchBar.setText(null);
// Clear the combined action slots
clearCombinedSlots();
// Add in checkboxes for available skill bonuses.
renderBonusOptions();

View File

@@ -117,7 +117,7 @@ public class TimersPlugin extends Plugin
private static final String KILLED_TELEBLOCK_OPPONENT_TEXT = "<col=4f006f>Your Tele Block has been removed because you killed ";
private static final String PRAYER_ENHANCE_EXPIRED = "<col=ff0000>Your prayer enhance effect has worn off.</col>";
private static final Pattern DEADMAN_HALF_TELEBLOCK_PATTERN = Pattern.compile("<col=4f006f>A Tele Block spell has been cast on you by (.+)\\. It will expire in 1 minute, 15 seconds\\.</col>");
private static final Pattern FULL_TELEBLOCK_PATTERN = Pattern.compile("<col=4f006f>A Tele Block spell has been cast on you by (.+)\\. It will expire in 5 minutes, 0 seconds\\.</col>");
private static final Pattern FULL_TELEBLOCK_PATTERN = Pattern.compile("<col=4f006f>A Tele Block spell has been cast on you by (.+)\\. It will expire in 5 minutes\\.</col>");
private static final Pattern HALF_TELEBLOCK_PATTERN = Pattern.compile("<col=4f006f>A Tele Block spell has been cast on you by (.+)\\. It will expire in 2 minutes, 30 seconds\\.</col>");
private static final Pattern DIVINE_POTION_PATTERN = Pattern.compile("You drink some of your divine (.+) potion\\.");

View File

@@ -361,7 +361,7 @@ public class WikiPlugin extends Plugin
}
if ((WidgetInfo.TO_GROUP(widgetID) == WidgetID.SKILLS_GROUP_ID && event.getOption().startsWith("View"))
|| (WidgetInfo.TO_GROUP(widgetID) == WidgetID.DIARY_GROUP_ID && event.getOption().startsWith("Open")))
|| (WidgetInfo.TO_GROUP(widgetID) == WidgetID.ACHIEVEMENT_DIARY_GROUP_ID && event.getOption().startsWith("Open")))
{
client.insertMenuItem(
MENUOP_WIKI,

View File

@@ -35,13 +35,13 @@ enum FarmingPatchLocation
new WorldPoint(3793, 2836, 0),
new WorldPoint(1269, 3730, 0)
),
ALLOTMENT_FLOWER("Allotment/Flower", new WorldPoint(3289, 6100, 0)),
ALLOTMENT_HERB_FLOWER("Allotment/Herb/Flower",
new WorldPoint(1809, 3490, 0),
new WorldPoint(3598, 3524, 0),
new WorldPoint(3052, 3309, 0),
new WorldPoint(2810, 3462, 0),
new WorldPoint(2663, 3375, 0),
new WorldPoint(3289, 6100, 0)
new WorldPoint(2663, 3375, 0)
),
ANIMA_HERB("Anima/Herb", new WorldPoint(1235, 3724, 0)),
BELLADONNA("Belladonna", new WorldPoint(3084, 3356, 0)),

View File

@@ -96,6 +96,7 @@ enum QuestStartLocation
THE_FORSAKEN_TOWER(Quest.THE_FORSAKEN_TOWER, new WorldPoint(1484, 3747, 0)),
THE_FREMENNIK_ISLES(Quest.THE_FREMENNIK_ISLES, new WorldPoint(2645, 3711, 0)),
THE_FREMENNIK_TRIALS(Quest.THE_FREMENNIK_TRIALS, new WorldPoint(2657, 3669, 0)),
THE_FREMENNIK_EXILES(Quest.THE_FREMENNIK_EXILES, new WorldPoint(2658, 3669, 0)),
GARDEN_OF_TRANQUILLITY(Quest.GARDEN_OF_TRANQUILLITY, new WorldPoint(3227, 3477, 0)),
GERTRUDES_CAT_RATCATCHERS(Quest.GERTRUDES_CAT, new WorldPoint(3150, 3411, 0)),
GHOSTS_AHOY(Quest.GHOSTS_AHOY, new WorldPoint(3677, 3510, 0)),
@@ -117,7 +118,7 @@ enum QuestStartLocation
LEGENDS_QUEST(Quest.LEGENDS_QUEST, new WorldPoint(2725, 3367, 0)),
LOST_CITY(Quest.LOST_CITY, new WorldPoint(3149, 3205, 0)),
THE_LOST_TRIBE(Quest.THE_LOST_TRIBE, new WorldPoint(3211, 3224, 0)),
LUNAR_DIPLOMACY(Quest.LUNAR_DIPLOMACY, new WorldPoint(2619, 3689, 0)),
LUNAR_DIPLOMACY(Quest.LUNAR_DIPLOMACY, new WorldPoint(2618, 3691, 0)),
MAKING_FRIENDS_WITH_MY_ARM(Quest.MAKING_FRIENDS_WITH_MY_ARM, new WorldPoint(2904, 10092, 0)),
MAKING_HISTORY(Quest.MAKING_HISTORY, new WorldPoint(2435, 3346, 0)),
MONKS_FRIEND(Quest.MONKS_FRIEND, new WorldPoint(2605, 3209, 0)),

View File

@@ -49,6 +49,7 @@ enum TransportationPointLocation
FISHINGPLAT_TO_ARDOUGNE("Ship to Ardougne", new WorldPoint(2779, 3271, 0), new WorldPoint(2722, 3304, 0)),
HARMLESS_TO_PORT_PHASMATYS("Ship to Port Phasmatys", new WorldPoint(3682, 2951, 0), new WorldPoint(3709, 3497, 0)),
ICEBERG_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2657, 3988, 0), new WorldPoint(2707, 3735, 0)),
ISLAND_OF_STONE_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2470, 3994, 0), new WorldPoint(2621, 3692, 0)),
ISLAND_TO_APE_ATOLL("Ship to Ape Atoll", new WorldPoint(2891, 2726, 0), new WorldPoint(2802, 2706, 0)),
JATIZSO_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2420, 3780, 0), new WorldPoint(2639, 3710, 0)),
KARAMJA_TO_PORT_SARIM("Ship to Port Sarim", new WorldPoint(2955, 3145, 0), new WorldPoint(3029, 3218, 0)),
@@ -59,7 +60,7 @@ enum TransportationPointLocation
NEITIZNOT_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2310, 3779, 0), new WorldPoint(2639, 3710, 0)),
PESTCONTROL_TO_PORTSARIM("Ship to Port Sarim", new WorldPoint(2659, 2675, 0), new WorldPoint(3039, 3201, 0)),
PIRATES_COVE_TO_LUNAR_ISLE("Ship to Lunar Isle", new WorldPoint(2223, 3796, 0), new WorldPoint(2137, 3899, 0)),
PIRATES_COVE_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2212, 3794, 0), new WorldPoint(2656, 3680, 0)),
PIRATES_COVE_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2212, 3794, 0), new WorldPoint(2620, 3695, 0)),
PORT_PHASMATYS_TO_DRAGONTOOTH("Ship to Dragontooth Island", new WorldPoint(3703, 3487, 0), new WorldPoint(3791, 3561, 0)),
PORT_PHASMATYS_TO_HARMLESS("Ship to Mos Le'Harmless", new WorldPoint(3709, 3497, 0), new WorldPoint(3682, 2951, 0)),
PORT_PISCARILIUS_TO_PORTSARIM_LANDSEND("Ship to Port Sarim/Land's End", new WorldPoint(1823, 3692, 0)),
@@ -70,11 +71,12 @@ enum TransportationPointLocation
PORTSARIM_TO_PEST_CONTROL("Ship to Pest Control", new WorldPoint(3039, 3201, 0), new WorldPoint(2659, 2675, 0)),
RELLEKKA_TO_JATIZSO_NEITIZNOT("Ship to Jatizso/Neitiznot", new WorldPoint(2639, 3710, 0)),
RELLEKKA_TO_MISCELLANIA("Ship to Miscellania", new WorldPoint(2627, 3692, 0), new WorldPoint(2579, 3846, 0)),
RELLEKKA_TO_WATERBIRTH("Ship to Waterbirth", new WorldPoint(2621, 3683, 0), new WorldPoint(2549, 3758, 0)),
RELLEKKA_TO_PIRATES_COVE("Ship to Pirates' Cove", new WorldPoint(2620, 3695, 0), new WorldPoint(2212, 3794, 0)),
RELLEKKA_TO_WATERBIRTH("Ship to Waterbirth", new WorldPoint(2618, 3685, 0), new WorldPoint(2549, 3758, 0)),
RELLEKKA_TO_WEISS_ICEBERG("Ship to Weiss/Iceberg", new WorldPoint(2707, 3735, 0)),
RELLEKKA_TO_UNGAEL("Ship to Ungael", new WorldPoint(2638, 3698, 0), new WorldPoint(2276, 4034, 0)),
RIMMINGTON_TO_CORSAIR_COVE("Ship to Corsair Cove", new WorldPoint(2909, 3227, 0 ), new WorldPoint(2577, 2839, 0)),
WATERBIRTH_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2549, 3758, 0), new WorldPoint(2621, 3683, 0)),
WATERBIRTH_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2549, 3758, 0), new WorldPoint(2618, 3685, 0)),
WEISS_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2847, 3967, 0), new WorldPoint(2707, 3735, 0)),
UNGAEL_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2276, 4034, 0), new WorldPoint(2638, 3698, 0)),

View File

@@ -51,6 +51,7 @@ public class WidgetOverlay extends Overlay
.put(WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.PVP_BOUNTY_HUNTER_INFO, OverlayPosition.TOP_RIGHT)
.put(WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.KOUREND_FAVOUR_OVERLAY, OverlayPosition.TOP_CENTER)
.put(WidgetInfo.MULTICOMBAT_FIXED, OverlayPosition.BOTTOM_RIGHT)