This commit is contained in:
Adam
2019-05-11 15:39:17 -04:00
parent 4a81250c99
commit eb0aa94ddb
3 changed files with 84 additions and 47 deletions

View File

@@ -1,19 +1,24 @@
package net.runelite.client.plugins.dpscounter; package net.runelite.client.plugins.dpscounter;
import com.google.inject.Binder;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Provides;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Actor; import net.runelite.api.Actor;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.MenuAction;
import net.runelite.api.NPC; import net.runelite.api.NPC;
import net.runelite.api.Player; import net.runelite.api.Player;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.ExperienceChanged;
import net.runelite.api.events.InteractingChanged; import net.runelite.api.events.InteractingChanged;
import net.runelite.api.events.NpcDespawned;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.OverlayMenuClicked;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
@@ -24,8 +29,8 @@ import net.runelite.client.ws.WSClient;
@PluginDescriptor( @PluginDescriptor(
name = "DPS Counter", name = "DPS Counter",
description = "counts dps?" description = "counts dps?"
//
) )
@Slf4j
public class DpsCounterPlugin extends Plugin public class DpsCounterPlugin extends Plugin
{ {
private int lastXp = -1; private int lastXp = -1;
@@ -50,10 +55,10 @@ public class DpsCounterPlugin extends Plugin
@Getter(AccessLevel.PACKAGE) @Getter(AccessLevel.PACKAGE)
private final Map<String, DpsMember> members = new ConcurrentHashMap<>(); private final Map<String, DpsMember> members = new ConcurrentHashMap<>();
@Override @Provides
public void configure(Binder binder) DpsConfig provideConfig(ConfigManager configManager)
{ {
//super.configure(binder); return configManager.getConfig(DpsConfig.class);
} }
@Override @Override
@@ -61,7 +66,6 @@ public class DpsCounterPlugin extends Plugin
{ {
overlayManager.add(dpsOverlay); overlayManager.add(dpsOverlay);
wsClient.registerMessage(DpsUpdate.class); wsClient.registerMessage(DpsUpdate.class);
//super.startUp();
} }
@Override @Override
@@ -70,25 +74,28 @@ public class DpsCounterPlugin extends Plugin
wsClient.unregisterMessage(DpsUpdate.class); wsClient.unregisterMessage(DpsUpdate.class);
overlayManager.remove(dpsOverlay); overlayManager.remove(dpsOverlay);
boss = null; boss = null;
//super.shutDown();
} }
@Subscribe @Subscribe
public void onInteractingChanged(InteractingChanged interactingChanged) { public void onInteractingChanged(InteractingChanged interactingChanged)
{
Actor source = interactingChanged.getSource(); Actor source = interactingChanged.getSource();
Actor target = interactingChanged.getTarget(); Actor target = interactingChanged.getTarget();
if (source != client.getLocalPlayer()) { if (source != client.getLocalPlayer())
{
return; return;
} }
if (target instanceof NPC) { if (target instanceof NPC)
{
int npcId = ((NPC) target).getId(); int npcId = ((NPC) target).getId();
Boss boss = Boss.findBoss(npcId); Boss boss = Boss.findBoss(npcId);
if (boss != null) { if (boss != null)
{
this.boss = boss; this.boss = boss;
npc = (NPC) target; npc = (NPC) target;
// boss = Boss.ABYSSAL_SIRE; // boss = Boss.ABYSSAL_SIRE;
} }
} }
} }
@@ -110,7 +117,6 @@ public class DpsCounterPlugin extends Plugin
final int delta = xp - lastXp; final int delta = xp - lastXp;
final int hit = getHit(boss.getModifier(), delta); final int hit = getHit(boss.getModifier(), delta);
// final int hit = getHit(1.0f, delta);
lastXp = xp; lastXp = xp;
// Update local member // Update local member
@@ -120,7 +126,6 @@ public class DpsCounterPlugin extends Plugin
final String name = localMember == null ? player.getName() : localMember.getName(); final String name = localMember == null ? player.getName() : localMember.getName();
DpsMember dpsMember = members.computeIfAbsent(name, n -> new DpsMember(name)); DpsMember dpsMember = members.computeIfAbsent(name, n -> new DpsMember(name));
dpsMember.addDamage(hit); dpsMember.addDamage(hit);
// System.out.println("HIT "+ hit);
if (hit > 0 && !partyService.getMembers().isEmpty()) if (hit > 0 && !partyService.getMembers().isEmpty())
{ {
@@ -135,7 +140,8 @@ public class DpsCounterPlugin extends Plugin
} }
@Subscribe @Subscribe
public void onDpsUpdate(DpsUpdate dpsUpdate) { public void onDpsUpdate(DpsUpdate dpsUpdate)
{
if (partyService.getLocalMember().getMemberId().equals(dpsUpdate.getMemberId())) if (partyService.getLocalMember().getMemberId().equals(dpsUpdate.getMemberId()))
{ {
return; return;
@@ -147,9 +153,36 @@ public class DpsCounterPlugin extends Plugin
return; return;
} }
// Hmm - not attacking the same boss I am
if (npc == null || dpsUpdate.getNpcId() != npc.getId())
{
return;
}
DpsMember dpsMember = members.computeIfAbsent(name, DpsMember::new); DpsMember dpsMember = members.computeIfAbsent(name, DpsMember::new);
dpsMember.addDamage(dpsUpdate.getHit()); dpsMember.addDamage(dpsUpdate.getHit());
}
@Subscribe
public void onOverlayMenuClicked(OverlayMenuClicked event)
{
if (event.getEntry().getMenuAction() == MenuAction.RUNELITE_OVERLAY &&
event.getEntry().getTarget().equals("Reset") &&
event.getEntry().getOption().equals("DPS counter"))
{
members.clear();
}
}
@Subscribe
public void onNpcDespawned(NpcDespawned npcDespawned)
{
if (npc == null || npcDespawned.getNpc() != npc || !npc.isDead())
{
return;
}
log.debug("Boss has died!");
} }
private int getHit(float modifier, int deltaExperience) private int getHit(float modifier, int deltaExperience)

View File

@@ -10,6 +10,7 @@ class DpsMember
{ {
private final String name; private final String name;
private Instant start = Instant.now(); private Instant start = Instant.now();
private Instant end;
private int damage; private int damage;
void addDamage(int amount) void addDamage(int amount)
@@ -17,10 +18,20 @@ class DpsMember
damage += amount; damage += amount;
} }
int getDps() float getDps()
{ {
int diff = (int) (Instant.now().toEpochMilli() - start.toEpochMilli()) / 1000; Instant now = end == null ? Instant.now() : end;
if (diff == 0) return 0; int diff = (int) (now.toEpochMilli() - start.toEpochMilli()) / 1000;
return (int) ((float) damage / (float) diff); if (diff == 0)
{
return 0;
}
return (float) damage / (float) diff;
}
void pause()
{
end = Instant.now();
} }
} }

View File

@@ -2,9 +2,12 @@ package net.runelite.client.plugins.dpscounter;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.text.DecimalFormat;
import java.util.Map; import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayMenuEntry;
import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.ui.overlay.components.TitleComponent; import net.runelite.client.ui.overlay.components.TitleComponent;
@@ -12,62 +15,52 @@ import net.runelite.client.ws.PartyService;
public class DpsOverlay extends Overlay public class DpsOverlay extends Overlay
{ {
private static final DecimalFormat DPS_FORMAT = new DecimalFormat("#0.0");
private final DpsCounterPlugin dpsCounterPlugin; private final DpsCounterPlugin dpsCounterPlugin;
private final DpsConfig dpsConfig;
private final PartyService partyService; private final PartyService partyService;
private final PanelComponent panelComponent = new PanelComponent(); private final PanelComponent panelComponent = new PanelComponent();
@Inject @Inject
DpsOverlay(DpsCounterPlugin dpsCounterPlugin, PartyService partyService) DpsOverlay(DpsCounterPlugin dpsCounterPlugin, DpsConfig dpsConfig, PartyService partyService)
{ {
super(dpsCounterPlugin); super(dpsCounterPlugin);
this.dpsCounterPlugin = dpsCounterPlugin; this.dpsCounterPlugin = dpsCounterPlugin;
this.dpsConfig = dpsConfig;
this.partyService = partyService; this.partyService = partyService;
//setPosition(OverlayPosition.TOP_LEFT); getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, "Reset", "DPS counter"));
} }
@Override @Override
public Dimension render(Graphics2D graphics) public Dimension render(Graphics2D graphics)
{ {
Map<String, DpsMember> dpsMembers = dpsCounterPlugin.getMembers(); Map<String, DpsMember> dpsMembers = dpsCounterPlugin.getMembers();
if (dpsMembers.isEmpty())
{
return null;
}
boolean inParty = !partyService.getMembers().isEmpty();
boolean showDamage = dpsConfig.showDamage();
panelComponent.getChildren().clear(); panelComponent.getChildren().clear();
panelComponent.getChildren().add( panelComponent.getChildren().add(
TitleComponent.builder() TitleComponent.builder()
.text("DPS") .text(inParty ? "Party DPS" : "DPS")
//olor(HIGHLIGHT_COLOR)
.build()); .build());
// panelComponent.getChildren().add( for (DpsMember dpsMember : dpsMembers.values())
// LineComponent.builder() {
// .left("Player")
// // .leftColor(HIGHLIGHT_COLOR)
// .right("DPS")
// // .rightColor(HIGHLIGHT_COLOR)
// .build());
for (DpsMember dpsMember : dpsMembers.values()) {
panelComponent.getChildren().add( panelComponent.getChildren().add(
LineComponent.builder() LineComponent.builder()
.left(dpsMember.getName()) .left(dpsMember.getName())
.right(Integer.toString(dpsMember.getDps())) .right(showDamage ? Integer.toString(dpsMember.getDamage()) : DPS_FORMAT.format(dpsMember.getDps()))
//.right(Integer.toString(playerSkillLevel) + "/" + Integer.toString(opponentSkillLevel))
//.rightColor(comparisonStatColor(playerSkillLevel, opponentSkillLevel))
.build()); .build());
} }
//partyService.getMemberByName()
// for (PartyMember member : partyService.getMembers()) {
// DpsMember dpsMember = dpsMembers.get(member.getName());
// if (dpsMember == null) continue;
// panelComponent.getChildren().add(
// LineComponent.builder()
// .left(member.getName())
// .right(Integer.toString(dpsMember.getDps()))
// //.right(Integer.toString(playerSkillLevel) + "/" + Integer.toString(opponentSkillLevel))
// //.rightColor(comparisonStatColor(playerSkillLevel, opponentSkillLevel))
// .build());
// }
return panelComponent.render(graphics); return panelComponent.render(graphics);
} }
} }