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)
|
if (event.getSkill() != SLAYER)
|
||||||
{
|
{
|
||||||
@@ -725,23 +725,34 @@ public class SlayerPlugin extends Plugin
|
|||||||
|
|
||||||
if (cachedXp != 0)
|
if (cachedXp != 0)
|
||||||
{
|
{
|
||||||
// this is not the initial xp sent on login so these are new xp gains
|
final int taskKillExp = Task.getTask(taskName).getExpectedKillExp();
|
||||||
int gains = slayerExp - cachedXp;
|
|
||||||
|
|
||||||
// potential npcs to give xp drop are current highlighted npcs and the lingering presences
|
// 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
|
||||||
List<NPCPresence> potentialNPCs = new ArrayList<>(lingeringPresences);
|
// to the expected exp gain for the task.
|
||||||
for (NPC npc : highlightedTargets)
|
if (taskKillExp == 0 || taskKillExp == slayerExp - cachedXp)
|
||||||
{
|
|
||||||
NPCPresence currentPresence = NPCPresence.buildPresence(npc);
|
|
||||||
potentialNPCs.add(currentPresence);
|
|
||||||
}
|
|
||||||
|
|
||||||
int killCount = estimateKillCount(potentialNPCs, gains);
|
|
||||||
for (int i = 0; i < killCount; i++)
|
|
||||||
{
|
{
|
||||||
killedOne();
|
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;
|
cachedXp = slayerExp;
|
||||||
@@ -815,7 +826,10 @@ public class SlayerPlugin extends Plugin
|
|||||||
|
|
||||||
config.amount(currentTask.getAmount()); // save changed value
|
config.amount(currentTask.getAmount()); // save changed value
|
||||||
currentTask.setPaused(false); // no longer paused since xp is gained
|
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)
|
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);
|
setTask(name, amt, initAmt, isNewAssignment, null, lastCertainAmt);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ enum Task
|
|||||||
INFERNAL_MAGES("Infernal mages", ItemID.INFERNAL_MAGE,
|
INFERNAL_MAGES("Infernal mages", ItemID.INFERNAL_MAGE,
|
||||||
asList("Malevolent mage"), Collections.emptyList()),
|
asList("Malevolent mage"), Collections.emptyList()),
|
||||||
IRON_DRAGONS("Iron dragons", ItemID.IRON_DRAGON_MASK),
|
IRON_DRAGONS("Iron dragons", ItemID.IRON_DRAGON_MASK),
|
||||||
JAD("TzTok-Jad", ItemID.TZREKJAD),
|
JAD("TzTok-Jad", ItemID.TZREKJAD, 25250),
|
||||||
JELLIES("Jellies", ItemID.JELLY,
|
JELLIES("Jellies", ItemID.JELLY,
|
||||||
asList("Jelly"), Collections.emptyList()),
|
asList("Jelly"), Collections.emptyList()),
|
||||||
JUNGLE_HORROR("Jungle horrors", ItemID.ENSOULED_HORROR_HEAD),
|
JUNGLE_HORROR("Jungle horrors", ItemID.ENSOULED_HORROR_HEAD),
|
||||||
@@ -237,7 +237,7 @@ enum Task
|
|||||||
ZOMBIES("Zombies", ItemID.ZOMBIE_HEAD,
|
ZOMBIES("Zombies", ItemID.ZOMBIE_HEAD,
|
||||||
asList("Undead"), Collections.emptyList()),
|
asList("Undead"), Collections.emptyList()),
|
||||||
ZULRAH("Zulrah", ItemID.PET_SNAKELING),
|
ZULRAH("Zulrah", ItemID.PET_SNAKELING),
|
||||||
ZUK("TzKal-Zuk", ItemID.TZREKZUK);
|
ZUK("TzKal-Zuk", ItemID.TZREKZUK, 101890);
|
||||||
//</editor-fold>
|
//</editor-fold>
|
||||||
|
|
||||||
private static final Map<String, Task> tasks;
|
private static final Map<String, Task> tasks;
|
||||||
@@ -250,6 +250,7 @@ enum Task
|
|||||||
private final boolean checkAsTokens;
|
private final boolean checkAsTokens;
|
||||||
private final int weaknessThreshold;
|
private final int weaknessThreshold;
|
||||||
private final int weaknessItem;
|
private final int weaknessItem;
|
||||||
|
private final int expectedKillExp;
|
||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
@@ -273,6 +274,7 @@ enum Task
|
|||||||
this.targetNames = new ArrayList<>();
|
this.targetNames = new ArrayList<>();
|
||||||
this.npcIds = new ArrayList<>();
|
this.npcIds = new ArrayList<>();
|
||||||
this.checkAsTokens = true;
|
this.checkAsTokens = true;
|
||||||
|
this.expectedKillExp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Task(String name, int itemSpriteId, int weaknessThreshold, int weaknessItem)
|
Task(String name, int itemSpriteId, int weaknessThreshold, int weaknessItem)
|
||||||
@@ -285,6 +287,7 @@ enum Task
|
|||||||
this.targetNames = new ArrayList<>();
|
this.targetNames = new ArrayList<>();
|
||||||
this.npcIds = new ArrayList<>();
|
this.npcIds = new ArrayList<>();
|
||||||
this.checkAsTokens = true;
|
this.checkAsTokens = true;
|
||||||
|
this.expectedKillExp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Task(String name, int itemSpriteId, boolean checkAsTokens)
|
Task(String name, int itemSpriteId, boolean checkAsTokens)
|
||||||
@@ -297,6 +300,20 @@ enum Task
|
|||||||
this.targetNames = new ArrayList<>();
|
this.targetNames = new ArrayList<>();
|
||||||
this.npcIds = new ArrayList<>();
|
this.npcIds = new ArrayList<>();
|
||||||
this.checkAsTokens = checkAsTokens;
|
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)
|
Task(String name, int itemSpriteId, List<String> targetNames, List<Integer> npcIds)
|
||||||
@@ -309,6 +326,7 @@ enum Task
|
|||||||
this.targetNames = targetNames;
|
this.targetNames = targetNames;
|
||||||
this.npcIds = npcIds;
|
this.npcIds = npcIds;
|
||||||
this.checkAsTokens = true;
|
this.checkAsTokens = true;
|
||||||
|
this.expectedKillExp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Task(String name, int itemSpriteId, List<String> targetNames, List<Integer> npcIds, int weaknessThreshold, int weaknessItem)
|
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.targetNames = targetNames;
|
||||||
this.npcIds = npcIds;
|
this.npcIds = npcIds;
|
||||||
this.checkAsTokens = true;
|
this.checkAsTokens = true;
|
||||||
|
this.expectedKillExp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Task(String name, int itemSpriteId, List<String> targetNames, List<Integer> npcIds, boolean checkAsTokens)
|
Task(String name, int itemSpriteId, List<String> targetNames, List<Integer> npcIds, boolean checkAsTokens)
|
||||||
@@ -333,6 +352,7 @@ enum Task
|
|||||||
this.targetNames = targetNames;
|
this.targetNames = targetNames;
|
||||||
this.npcIds = npcIds;
|
this.npcIds = npcIds;
|
||||||
this.checkAsTokens = checkAsTokens;
|
this.checkAsTokens = checkAsTokens;
|
||||||
|
this.expectedKillExp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Task getTask(String taskName)
|
static Task getTask(String taskName)
|
||||||
|
|||||||
@@ -34,8 +34,10 @@ import net.runelite.api.ChatMessageType;
|
|||||||
import static net.runelite.api.ChatMessageType.GAMEMESSAGE;
|
import static net.runelite.api.ChatMessageType.GAMEMESSAGE;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.MessageNode;
|
import net.runelite.api.MessageNode;
|
||||||
|
import net.runelite.api.Player;
|
||||||
import net.runelite.api.Skill;
|
import net.runelite.api.Skill;
|
||||||
import net.runelite.api.Varbits;
|
import net.runelite.api.Varbits;
|
||||||
|
import net.runelite.api.coords.LocalPoint;
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
import net.runelite.api.events.ExperienceChanged;
|
import net.runelite.api.events.ExperienceChanged;
|
||||||
import net.runelite.api.events.GameTick;
|
import net.runelite.api.events.GameTick;
|
||||||
@@ -453,4 +455,60 @@ public class SlayerPluginTest
|
|||||||
assertEquals(name, name.toLowerCase());
|
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