slayerplugin: Correct Jad and Zuk task tracking
This commit is contained in:
@@ -709,7 +709,7 @@ public class SlayerPlugin extends Plugin
|
||||
}
|
||||
}
|
||||
|
||||
private void onExperienceChanged(ExperienceChanged event)
|
||||
void onExperienceChanged(ExperienceChanged event)
|
||||
{
|
||||
if (event.getSkill() != SLAYER)
|
||||
{
|
||||
@@ -725,23 +725,34 @@ public class SlayerPlugin extends Plugin
|
||||
|
||||
if (cachedXp != 0)
|
||||
{
|
||||
// this is not the initial xp sent on login so these are new xp gains
|
||||
int gains = slayerExp - cachedXp;
|
||||
final int taskKillExp = Task.getTask(taskName).getExpectedKillExp();
|
||||
|
||||
// potential npcs to give xp drop are current highlighted npcs and the lingering presences
|
||||
List<NPCPresence> potentialNPCs = new ArrayList<>(lingeringPresences);
|
||||
for (NPC npc : highlightedTargets)
|
||||
{
|
||||
NPCPresence currentPresence = NPCPresence.buildPresence(npc);
|
||||
potentialNPCs.add(currentPresence);
|
||||
}
|
||||
|
||||
int killCount = estimateKillCount(potentialNPCs, gains);
|
||||
for (int i = 0; i < killCount; i++)
|
||||
// Only count exp gain as a kill if the task either has no expected exp for a kill, or if the exp gain is equal
|
||||
// to the expected exp gain for the task.
|
||||
if (taskKillExp == 0 || taskKillExp == slayerExp - cachedXp)
|
||||
{
|
||||
killedOne();
|
||||
int delta = slayerExp - cachedXp;
|
||||
currentTask.setElapsedXp(currentTask.getElapsedXp() + delta);
|
||||
}
|
||||
else
|
||||
{
|
||||
// this is not the initial xp sent on login so these are new xp gains
|
||||
int gains = slayerExp - cachedXp;
|
||||
|
||||
// potential npcs to give xp drop are current highlighted npcs and the lingering presences
|
||||
List<NPCPresence> potentialNPCs = new ArrayList<>(lingeringPresences);
|
||||
for (NPC npc : highlightedTargets)
|
||||
{
|
||||
NPCPresence currentPresence = NPCPresence.buildPresence(npc);
|
||||
potentialNPCs.add(currentPresence);
|
||||
}
|
||||
|
||||
int killCount = estimateKillCount(potentialNPCs, gains);
|
||||
for (int i = 0; i < killCount; i++)
|
||||
{
|
||||
killedOne();
|
||||
int delta = slayerExp - cachedXp;
|
||||
currentTask.setElapsedXp(currentTask.getElapsedXp() + delta);
|
||||
}
|
||||
}
|
||||
}
|
||||
cachedXp = slayerExp;
|
||||
@@ -815,7 +826,10 @@ public class SlayerPlugin extends Plugin
|
||||
|
||||
config.amount(currentTask.getAmount()); // save changed value
|
||||
currentTask.setPaused(false); // no longer paused since xp is gained
|
||||
panel.updateCurrentTask(true, currentTask.isPaused(), currentTask, false);
|
||||
if (panel != null)
|
||||
{
|
||||
panel.updateCurrentTask(true, currentTask.isPaused(), currentTask, false);
|
||||
}
|
||||
|
||||
if (!this.showInfobox)
|
||||
{
|
||||
@@ -978,7 +992,7 @@ public class SlayerPlugin extends Plugin
|
||||
}
|
||||
}
|
||||
|
||||
private void setTask(String name, int amt, int initAmt, boolean isNewAssignment, int lastCertainAmt)
|
||||
void setTask(String name, int amt, int initAmt, boolean isNewAssignment, int lastCertainAmt)
|
||||
{
|
||||
setTask(name, amt, initAmt, isNewAssignment, null, lastCertainAmt);
|
||||
}
|
||||
|
||||
@@ -155,7 +155,7 @@ enum Task
|
||||
INFERNAL_MAGES("Infernal mages", ItemID.INFERNAL_MAGE,
|
||||
asList("Malevolent mage"), Collections.emptyList()),
|
||||
IRON_DRAGONS("Iron dragons", ItemID.IRON_DRAGON_MASK),
|
||||
JAD("TzTok-Jad", ItemID.TZREKJAD),
|
||||
JAD("TzTok-Jad", ItemID.TZREKJAD, 25250),
|
||||
JELLIES("Jellies", ItemID.JELLY,
|
||||
asList("Jelly"), Collections.emptyList()),
|
||||
JUNGLE_HORROR("Jungle horrors", ItemID.ENSOULED_HORROR_HEAD),
|
||||
@@ -237,7 +237,7 @@ enum Task
|
||||
ZOMBIES("Zombies", ItemID.ZOMBIE_HEAD,
|
||||
asList("Undead"), Collections.emptyList()),
|
||||
ZULRAH("Zulrah", ItemID.PET_SNAKELING),
|
||||
ZUK("TzKal-Zuk", ItemID.TZREKZUK);
|
||||
ZUK("TzKal-Zuk", ItemID.TZREKZUK, 101890);
|
||||
//</editor-fold>
|
||||
|
||||
private static final Map<String, Task> tasks;
|
||||
@@ -250,6 +250,7 @@ enum Task
|
||||
private final boolean checkAsTokens;
|
||||
private final int weaknessThreshold;
|
||||
private final int weaknessItem;
|
||||
private final int expectedKillExp;
|
||||
|
||||
static
|
||||
{
|
||||
@@ -273,6 +274,7 @@ enum Task
|
||||
this.targetNames = new ArrayList<>();
|
||||
this.npcIds = new ArrayList<>();
|
||||
this.checkAsTokens = true;
|
||||
this.expectedKillExp = 0;
|
||||
}
|
||||
|
||||
Task(String name, int itemSpriteId, int weaknessThreshold, int weaknessItem)
|
||||
@@ -285,6 +287,7 @@ enum Task
|
||||
this.targetNames = new ArrayList<>();
|
||||
this.npcIds = new ArrayList<>();
|
||||
this.checkAsTokens = true;
|
||||
this.expectedKillExp = 0;
|
||||
}
|
||||
|
||||
Task(String name, int itemSpriteId, boolean checkAsTokens)
|
||||
@@ -297,6 +300,20 @@ enum Task
|
||||
this.targetNames = new ArrayList<>();
|
||||
this.npcIds = new ArrayList<>();
|
||||
this.checkAsTokens = checkAsTokens;
|
||||
this.expectedKillExp = 0;
|
||||
}
|
||||
|
||||
Task(String name, int itemSpriteId, int expectedKillExp)
|
||||
{
|
||||
Preconditions.checkArgument(itemSpriteId >= 0);
|
||||
this.name = name;
|
||||
this.itemSpriteId = itemSpriteId;
|
||||
this.weaknessThreshold = -1;
|
||||
this.weaknessItem = -1;
|
||||
this.targetNames = new ArrayList<>();
|
||||
this.npcIds = new ArrayList<>();
|
||||
this.checkAsTokens = true;
|
||||
this.expectedKillExp = expectedKillExp;
|
||||
}
|
||||
|
||||
Task(String name, int itemSpriteId, List<String> targetNames, List<Integer> npcIds)
|
||||
@@ -309,6 +326,7 @@ enum Task
|
||||
this.targetNames = targetNames;
|
||||
this.npcIds = npcIds;
|
||||
this.checkAsTokens = true;
|
||||
this.expectedKillExp = 0;
|
||||
}
|
||||
|
||||
Task(String name, int itemSpriteId, List<String> targetNames, List<Integer> npcIds, int weaknessThreshold, int weaknessItem)
|
||||
@@ -321,6 +339,7 @@ enum Task
|
||||
this.targetNames = targetNames;
|
||||
this.npcIds = npcIds;
|
||||
this.checkAsTokens = true;
|
||||
this.expectedKillExp = 0;
|
||||
}
|
||||
|
||||
Task(String name, int itemSpriteId, List<String> targetNames, List<Integer> npcIds, boolean checkAsTokens)
|
||||
@@ -333,6 +352,7 @@ enum Task
|
||||
this.targetNames = targetNames;
|
||||
this.npcIds = npcIds;
|
||||
this.checkAsTokens = checkAsTokens;
|
||||
this.expectedKillExp = 0;
|
||||
}
|
||||
|
||||
static Task getTask(String taskName)
|
||||
|
||||
@@ -34,8 +34,10 @@ import net.runelite.api.ChatMessageType;
|
||||
import static net.runelite.api.ChatMessageType.GAMEMESSAGE;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.MessageNode;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.events.ChatMessage;
|
||||
import net.runelite.api.events.ExperienceChanged;
|
||||
import net.runelite.api.events.GameTick;
|
||||
@@ -453,4 +455,60 @@ public class SlayerPluginTest
|
||||
assertEquals(name, name.toLowerCase());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJadTaskKill()
|
||||
{
|
||||
final Player player = mock(Player.class);
|
||||
when(player.getLocalLocation()).thenReturn(new LocalPoint(0, 0));
|
||||
when(client.getLocalPlayer()).thenReturn(player);
|
||||
|
||||
final ExperienceChanged experienceChanged = new ExperienceChanged();
|
||||
experienceChanged.setSkill(Skill.SLAYER);
|
||||
|
||||
when(client.getSkillExperience(Skill.SLAYER)).thenReturn(100);
|
||||
slayerPlugin.onExperienceChanged(experienceChanged);
|
||||
|
||||
slayerPlugin.setTask("TzTok-Jad", 1, 1, true, 0);
|
||||
|
||||
// One bat kill
|
||||
when(client.getSkillExperience(Skill.SLAYER)).thenReturn(110);
|
||||
slayerPlugin.onExperienceChanged(experienceChanged);
|
||||
|
||||
assertEquals(1, slayerPlugin.getCurrentTask().getAmount());
|
||||
|
||||
// One Jad kill
|
||||
when(client.getSkillExperience(Skill.SLAYER)).thenReturn(25_360);
|
||||
slayerPlugin.onExperienceChanged(experienceChanged);
|
||||
|
||||
assertEquals(0, slayerPlugin.getCurrentTask().getAmount());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testZukTaskKill()
|
||||
{
|
||||
final Player player = mock(Player.class);
|
||||
when(player.getLocalLocation()).thenReturn(new LocalPoint(0, 0));
|
||||
when(client.getLocalPlayer()).thenReturn(player);
|
||||
|
||||
final ExperienceChanged experienceChanged = new ExperienceChanged();
|
||||
experienceChanged.setSkill(Skill.SLAYER);
|
||||
|
||||
when(client.getSkillExperience(Skill.SLAYER)).thenReturn(100);
|
||||
slayerPlugin.onExperienceChanged(experienceChanged);
|
||||
|
||||
slayerPlugin.setTask("TzKal-Zuk", 1, 1, true, 0);
|
||||
|
||||
// One bat kill
|
||||
when(client.getSkillExperience(Skill.SLAYER)).thenReturn(125);
|
||||
slayerPlugin.onExperienceChanged(experienceChanged);
|
||||
|
||||
assertEquals(1, slayerPlugin.getCurrentTask().getAmount());
|
||||
|
||||
// One Zuk kill
|
||||
when(client.getSkillExperience(Skill.SLAYER)).thenReturn(102_015);
|
||||
slayerPlugin.onExperienceChanged(experienceChanged);
|
||||
|
||||
assertEquals(0, slayerPlugin.getCurrentTask().getAmount());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user