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

View File

@@ -10,6 +10,7 @@ class DpsMember
{
private final String name;
private Instant start = Instant.now();
private Instant end;
private int damage;
void addDamage(int amount)
@@ -17,10 +18,20 @@ class DpsMember
damage += amount;
}
int getDps()
float getDps()
{
int diff = (int) (Instant.now().toEpochMilli() - start.toEpochMilli()) / 1000;
if (diff == 0) return 0;
return (int) ((float) damage / (float) diff);
Instant now = end == null ? Instant.now() : end;
int diff = (int) (now.toEpochMilli() - start.toEpochMilli()) / 1000;
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.Graphics2D;
import java.text.DecimalFormat;
import java.util.Map;
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.OverlayMenuEntry;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.ui.overlay.components.TitleComponent;
@@ -12,62 +15,52 @@ import net.runelite.client.ws.PartyService;
public class DpsOverlay extends Overlay
{
private static final DecimalFormat DPS_FORMAT = new DecimalFormat("#0.0");
private final DpsCounterPlugin dpsCounterPlugin;
private final DpsConfig dpsConfig;
private final PartyService partyService;
private final PanelComponent panelComponent = new PanelComponent();
@Inject
DpsOverlay(DpsCounterPlugin dpsCounterPlugin, PartyService partyService)
DpsOverlay(DpsCounterPlugin dpsCounterPlugin, DpsConfig dpsConfig, PartyService partyService)
{
super(dpsCounterPlugin);
this.dpsCounterPlugin = dpsCounterPlugin;
this.dpsConfig = dpsConfig;
this.partyService = partyService;
//setPosition(OverlayPosition.TOP_LEFT);
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, "Reset", "DPS counter"));
}
@Override
public Dimension render(Graphics2D graphics)
{
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().add(
TitleComponent.builder()
.text("DPS")
//olor(HIGHLIGHT_COLOR)
.text(inParty ? "Party DPS" : "DPS")
.build());
// panelComponent.getChildren().add(
// LineComponent.builder()
// .left("Player")
// // .leftColor(HIGHLIGHT_COLOR)
// .right("DPS")
// // .rightColor(HIGHLIGHT_COLOR)
// .build());
for (DpsMember dpsMember : dpsMembers.values()) {
for (DpsMember dpsMember : dpsMembers.values())
{
panelComponent.getChildren().add(
LineComponent.builder()
.left(dpsMember.getName())
.right(Integer.toString(dpsMember.getDps()))
//.right(Integer.toString(playerSkillLevel) + "/" + Integer.toString(opponentSkillLevel))
//.rightColor(comparisonStatColor(playerSkillLevel, opponentSkillLevel))
.right(showDamage ? Integer.toString(dpsMember.getDamage()) : DPS_FORMAT.format(dpsMember.getDps()))
.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);
}
}