Updating raids plugin with lyzrds dc scouter, and adding pts/hr.
This commit is contained in:
@@ -178,6 +178,16 @@ public interface RaidsConfig extends Config
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
position = 1,
|
||||||
|
keyName = "ptsHr",
|
||||||
|
name = "Enable points per hour message",
|
||||||
|
description = "Enable the message"
|
||||||
|
)
|
||||||
|
default boolean ptsHr()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
position = 16,
|
position = 16,
|
||||||
keyName = "showRecommendedItems",
|
keyName = "showRecommendedItems",
|
||||||
|
|||||||
@@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Lyzrds
|
||||||
|
* 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.raids;
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.FlowLayout;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.swing.BorderFactory;
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.GameState;
|
||||||
|
import net.runelite.client.callback.ClientThread;
|
||||||
|
import net.runelite.client.ui.ColorScheme;
|
||||||
|
import net.runelite.client.ui.PluginPanel;
|
||||||
|
|
||||||
|
public class RaidsPanel extends PluginPanel
|
||||||
|
{
|
||||||
|
@Inject
|
||||||
|
private Client client;
|
||||||
|
@Inject
|
||||||
|
private RaidsPlugin raidsPlugin;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ClientThread clientThread;
|
||||||
|
private JButton reloadButton = new JButton("Reload Instance");
|
||||||
|
private JButton reloadScouter = new JButton("Reload Raid Overlay");
|
||||||
|
private JLabel reloadMessage = new JLabel("<html><center><h3>Instance Reload Helper </h3>Reloading an instance will cause your client to disconnect temporarily.<br></center></html>");
|
||||||
|
|
||||||
|
void init(RaidsConfig config)
|
||||||
|
{
|
||||||
|
|
||||||
|
// this may or may not qualify as a hack
|
||||||
|
// but this lets the editor pane expand to fill the whole parent panel
|
||||||
|
getParent().setLayout(new FlowLayout());
|
||||||
|
getParent().add(this, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
setLayout(new BorderLayout());
|
||||||
|
setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||||
|
setBackground(ColorScheme.DARK_GRAY_COLOR);
|
||||||
|
|
||||||
|
JPanel reloadContainer = new JPanel();
|
||||||
|
JPanel scouterContainer = new JPanel();
|
||||||
|
JPanel buttons = new JPanel();
|
||||||
|
reloadContainer.setLayout(new BorderLayout());
|
||||||
|
buttons.setLayout(new BorderLayout());
|
||||||
|
buttons.setBackground(ColorScheme.DARKER_GRAY_COLOR);
|
||||||
|
reloadContainer.setBackground(ColorScheme.DARKER_GRAY_COLOR);
|
||||||
|
scouterContainer.setLayout(new BorderLayout());
|
||||||
|
scouterContainer.setBackground(ColorScheme.DARKER_GRAY_COLOR);
|
||||||
|
|
||||||
|
JPanel reloadFrame = new JPanel();
|
||||||
|
JPanel scoutFrame = new JPanel();
|
||||||
|
reloadButton.addActionListener((ActionEvent e) ->
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
if ((client.getGameState() == GameState.LOGGED_IN))
|
||||||
|
{
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//look for client.gameStateChanged(-1); in src files to find
|
||||||
|
Method m = client.getClass().getClassLoader().loadClass("jr").getDeclaredMethod("fn", int.class, int.class);
|
||||||
|
m.setAccessible(true);
|
||||||
|
m.invoke(null, 40, -1893789506);
|
||||||
|
|
||||||
|
//Method m = client.getClass().getClassLoader().loadClass("jr").getDeclaredMethod("fn", int.class, int.class);
|
||||||
|
//m.setAccessible(true);
|
||||||
|
//m.invoke(null, 40, -1893789506);
|
||||||
|
//TODO: Since this is mainly for raids i'd like to reload the raids scouting plugin after the dc is finished
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (ReflectiveOperationException f)
|
||||||
|
{
|
||||||
|
throw new RuntimeException(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//TODO: User is still in a dc, or not logged in. Possibly provide a meaningful message somewhere.
|
||||||
|
}
|
||||||
|
});
|
||||||
|
reloadScouter.addActionListener((ActionEvent e) ->
|
||||||
|
{
|
||||||
|
if ((client.getGameState() == GameState.LOGGED_IN))
|
||||||
|
{
|
||||||
|
raidsPlugin.checkRaidPresence(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
reloadFrame.add(reloadButton);
|
||||||
|
scoutFrame.add(reloadScouter);
|
||||||
|
reloadContainer.add(reloadFrame, BorderLayout.NORTH);
|
||||||
|
reloadContainer.add(scoutFrame, BorderLayout.SOUTH);
|
||||||
|
add(reloadMessage, BorderLayout.PAGE_START);
|
||||||
|
add(reloadContainer, BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -79,13 +79,16 @@ import net.runelite.client.plugins.PluginType;
|
|||||||
import net.runelite.client.plugins.raids.solver.Layout;
|
import net.runelite.client.plugins.raids.solver.Layout;
|
||||||
import net.runelite.client.plugins.raids.solver.LayoutSolver;
|
import net.runelite.client.plugins.raids.solver.LayoutSolver;
|
||||||
import net.runelite.client.plugins.raids.solver.RotationSolver;
|
import net.runelite.client.plugins.raids.solver.RotationSolver;
|
||||||
|
import net.runelite.client.ui.ClientToolbar;
|
||||||
import net.runelite.client.ui.DrawManager;
|
import net.runelite.client.ui.DrawManager;
|
||||||
import net.runelite.client.ui.FontManager;
|
import net.runelite.client.ui.FontManager;
|
||||||
|
import net.runelite.client.ui.NavigationButton;
|
||||||
import net.runelite.client.ui.overlay.OverlayManager;
|
import net.runelite.client.ui.overlay.OverlayManager;
|
||||||
import net.runelite.client.ui.overlay.WidgetOverlay;
|
import net.runelite.client.ui.overlay.WidgetOverlay;
|
||||||
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
||||||
import net.runelite.client.ui.overlay.tooltip.Tooltip;
|
import net.runelite.client.ui.overlay.tooltip.Tooltip;
|
||||||
import net.runelite.client.ui.overlay.tooltip.TooltipManager;
|
import net.runelite.client.ui.overlay.tooltip.TooltipManager;
|
||||||
|
import net.runelite.client.util.ImageUtil;
|
||||||
import net.runelite.client.util.Text;
|
import net.runelite.client.util.Text;
|
||||||
import net.runelite.client.util.HotkeyListener;
|
import net.runelite.client.util.HotkeyListener;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -174,12 +177,17 @@ public class RaidsPlugin extends Plugin
|
|||||||
@Getter
|
@Getter
|
||||||
private boolean inRaidChambers;
|
private boolean inRaidChambers;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ClientToolbar clientToolbar;
|
||||||
|
private RaidsPanel panel;
|
||||||
private int upperTime = -1;
|
private int upperTime = -1;
|
||||||
private int middleTime = -1;
|
private int middleTime = -1;
|
||||||
private int lowerTime = -1;
|
private int lowerTime = -1;
|
||||||
private int raidTime = -1;
|
private int raidTime = -1;
|
||||||
private WidgetOverlay widgetOverlay;
|
private WidgetOverlay widgetOverlay;
|
||||||
private String tooltip;
|
private String tooltip;
|
||||||
|
public boolean canShow;
|
||||||
|
private NavigationButton navButton;
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
RaidsConfig provideConfig(ConfigManager configManager)
|
RaidsConfig provideConfig(ConfigManager configManager)
|
||||||
@@ -201,6 +209,16 @@ public class RaidsPlugin extends Plugin
|
|||||||
updateLists();
|
updateLists();
|
||||||
clientThread.invokeLater(() -> checkRaidPresence(true));
|
clientThread.invokeLater(() -> checkRaidPresence(true));
|
||||||
widgetOverlay = overlayManager.getWidgetOverlay(WidgetInfo.RAIDS_POINTS_INFOBOX);
|
widgetOverlay = overlayManager.getWidgetOverlay(WidgetInfo.RAIDS_POINTS_INFOBOX);
|
||||||
|
panel = injector.getInstance(RaidsPanel.class);
|
||||||
|
panel.init(config);
|
||||||
|
final BufferedImage icon = ImageUtil.getResourceStreamFromClass(this.getClass(), "instancereloadhelper.png");
|
||||||
|
navButton = NavigationButton.builder()
|
||||||
|
.tooltip("Raids Reload")
|
||||||
|
.icon(icon)
|
||||||
|
.priority(8)
|
||||||
|
.panel(panel)
|
||||||
|
.build();
|
||||||
|
clientToolbar.addNavigation(navButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -208,6 +226,7 @@ public class RaidsPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
overlayManager.remove(overlay);
|
overlayManager.remove(overlay);
|
||||||
overlayManager.remove(pointsOverlay);
|
overlayManager.remove(pointsOverlay);
|
||||||
|
clientToolbar.removeNavigation(navButton);
|
||||||
inRaidChambers = false;
|
inRaidChambers = false;
|
||||||
widgetOverlay = null;
|
widgetOverlay = null;
|
||||||
raid = null;
|
raid = null;
|
||||||
@@ -286,12 +305,14 @@ public class RaidsPlugin extends Plugin
|
|||||||
if (matcher.find())
|
if (matcher.find())
|
||||||
{
|
{
|
||||||
raidTime = timeToSeconds(matcher.group(1));
|
raidTime = timeToSeconds(matcher.group(1));
|
||||||
|
int timesec = timeToSeconds(matcher.group(1));
|
||||||
updateTooltip();
|
updateTooltip();
|
||||||
|
|
||||||
if (config.pointsMessage())
|
if (config.pointsMessage())
|
||||||
{
|
{
|
||||||
int totalPoints = client.getVar(Varbits.TOTAL_POINTS);
|
int totalPoints = client.getVar(Varbits.TOTAL_POINTS);
|
||||||
int personalPoints = client.getVar(Varbits.PERSONAL_POINTS);
|
int personalPoints = client.getVar(Varbits.PERSONAL_POINTS);
|
||||||
|
int partySize = client.getVar(Varbits.RAID_PARTY_SIZE);
|
||||||
|
|
||||||
double percentage = personalPoints / (totalPoints / 100.0);
|
double percentage = personalPoints / (totalPoints / 100.0);
|
||||||
|
|
||||||
@@ -316,6 +337,52 @@ public class RaidsPlugin extends Plugin
|
|||||||
.type(ChatMessageType.FRIENDSCHATNOTIFICATION)
|
.type(ChatMessageType.FRIENDSCHATNOTIFICATION)
|
||||||
.runeLiteFormattedMessage(chatMessage)
|
.runeLiteFormattedMessage(chatMessage)
|
||||||
.build());
|
.build());
|
||||||
|
if (config.ptsHr())
|
||||||
|
{
|
||||||
|
String ptssolo;
|
||||||
|
{
|
||||||
|
ptssolo = POINTS_FORMAT.format(((float) personalPoints / (float) timesec) * 3600);
|
||||||
|
}
|
||||||
|
|
||||||
|
String ptsteam;
|
||||||
|
{
|
||||||
|
ptsteam = POINTS_FORMAT.format(((float) totalPoints / (float) timesec) * 3600);
|
||||||
|
}
|
||||||
|
|
||||||
|
String ptssplit;
|
||||||
|
{
|
||||||
|
ptssplit = POINTS_FORMAT.format(((float) (totalPoints / (float) timesec) * 3600) / (partySize));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String chatMessage2 = new ChatMessageBuilder()
|
||||||
|
.append(ChatColorType.NORMAL)
|
||||||
|
.append("Solo Pts/Hr: ")
|
||||||
|
.append(ChatColorType.HIGHLIGHT)
|
||||||
|
.append(ptssolo)
|
||||||
|
.append(ChatColorType.NORMAL)
|
||||||
|
.append("Team Pts/Hr: ")
|
||||||
|
.append(ChatColorType.HIGHLIGHT)
|
||||||
|
.append(ptsteam)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
chatMessageManager.queue(QueuedMessage.builder()
|
||||||
|
.type(ChatMessageType.FRIENDSCHATNOTIFICATION)
|
||||||
|
.runeLiteFormattedMessage(chatMessage2)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
String chatMessage3 = new ChatMessageBuilder()
|
||||||
|
.append(ChatColorType.NORMAL)
|
||||||
|
.append("Split Pts/Hr: ")
|
||||||
|
.append(ChatColorType.HIGHLIGHT)
|
||||||
|
.append(ptssplit)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
chatMessageManager.queue(QueuedMessage.builder()
|
||||||
|
.type(ChatMessageType.FRIENDSCHATNOTIFICATION)
|
||||||
|
.runeLiteFormattedMessage(chatMessage3)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -338,7 +405,7 @@ public class RaidsPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkRaidPresence(boolean force)
|
public void checkRaidPresence(boolean force)
|
||||||
{
|
{
|
||||||
if (client.getGameState() != GameState.LOGGED_IN)
|
if (client.getGameState() != GameState.LOGGED_IN)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -104,16 +104,17 @@ public class RaidsPointsOverlay extends Overlay
|
|||||||
.left("Unique:")
|
.left("Unique:")
|
||||||
.right(UNIQUE_FORMAT.format(uniqueChance))
|
.right(UNIQUE_FORMAT.format(uniqueChance))
|
||||||
.build());
|
.build());
|
||||||
|
//TODO this is annoyingly bugged, personalpoints returns null for some reason
|
||||||
|
/*
|
||||||
if (partySize > 1)
|
if (partySize > 1)
|
||||||
{
|
{
|
||||||
double personalChance = uniqueChance * (personalPoints / totalPoints);
|
double personalChance = uniqueChance * (double)(personalPoints / totalPoints);
|
||||||
|
|
||||||
panel.getChildren().add(LineComponent.builder()
|
panel.getChildren().add(LineComponent.builder()
|
||||||
.left("Personal:")
|
.left("Personal:")
|
||||||
.right(UNIQUE_FORMAT.format(personalChance))
|
.right(UNIQUE_FORMAT.format(personalChance))
|
||||||
.build());
|
.build());
|
||||||
}
|
}*/
|
||||||
|
|
||||||
return panel.render(graphics);
|
return panel.render(graphics);
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
Reference in New Issue
Block a user