So currently there is a bug that if you have a task [player a], and another player[player b] gets a task, it sets [player a]'s task to the task that [player b] is given. However, [player a] can still kill their original assignment and get the same XP as [player b]'s assignment. I've tried changing my slayer master's dialogue and all of that. I will post those here.
Assigning Slayer Task in SlayerTask Class:
Code:
public static SlayerTask random(Player player, Master master) {
SlayerTask task = null;
while (true) {
int random = Utils.random(master.data.length);
int requiredLevel = (Integer) master.data[random][1];
if (player.getSkills().getLevel(Skills.SLAYER) < requiredLevel) {
continue;
}
int minimum = (Integer) master.data[random][2];
int maximum = (Integer) master.data[random][3];
int amount = Utils.random(minimum,maximum);
if (task == null) {
task = new SlayerTask(master, random, amount);
player.setTask(task);
player.setTaskId((Integer)master.data[random][5]);
player.setTaskAmount(amount);
if (!player.getInventory().containsItem(4155, 1)) {
player.getInventory().addItem(4155, 1);
}
}
break;
}
return task;
}
Slayer task being given by a slayer master {in this case Sumona}:
Code:
if (player.getSkills().getLevel(Skills.SLAYER) >= 50 && player.getSkills().getLevel(Skills.SLAYER) < 75) {
if (player.getTask() == null) {
SlayerTask.random(player, Master.SUMONA);
sendEntityDialogue((short) 241, new String[] {
NPCDefinitions.getNPCDefinitions(7780).name,
"Your slayer task is to kill "
+ player.getTaskAmount() + " "
+ player.getTask().getName().toLowerCase()
+ "s." }, (byte) 1, 7780, 7780);
} else {
sendEntityDialogue((short) 241,
new String[] {
NPCDefinitions.getNPCDefinitions(7780).name,
"You already have a slayer task! You need to kill "
+ player.getTaskAmount()
+ " "
+ player.getTask().getName()
.toLowerCase() + "s." },
(byte) 1, 7780, 7780);
}
Killing the monster in NPC Class and Getting Exp:
Code:
if (id == killer.getTaskId()) {
killer.getTask().decreaseAmount(killer);
killer.getSkills().addXp(Skills.SLAYER, killer.getTask().getXPAmount());
if (killer.getTaskAmount() <= 0) {
final int slayerMask = killer.getEquipment().getHatId();
killer.getSkills().addXp(Skills.SLAYER, killer.getTask().getXPAmount() * 10);
killer.setTask(null);
killer.setTaskId(-1);
killer.setTaskAmount(0);
killer.getPackets().sendGameMessage("<col=ff0000>You have finished your slayer task! Go home and talk to a slayer master.");
if (slayerMask != -1 && ItemDefinitions.getItemDefinitions(slayerMask).getName().contains("slayer helmet")){
killer.setSlayerPoints(killer.getSlayerPoints() + 20);
killer.getPackets().sendGameMessage("You have earned 20 slayer points from finishing your task with a slayer helmet.");
}
else {
killer.setSlayerPoints(killer.getSlayerPoints() + 10);
killer.getPackets().sendGameMessage("You have earned 10 slayer points from finishing your task.");
}
}
}
Any help would be greatly appreciated!