Thread: [667] Global Slayer Bug

Results 1 to 3 of 3
  1. #1 [667] Global Slayer Bug 
    Registered Member
    Join Date
    Apr 2014
    Posts
    39
    Thanks given
    3
    Thanks received
    1
    Rep Power
    10
    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!
    Reply With Quote  
     

  2. #2  
    KNOWLEDGE IS POWER

    OG KingFox's Avatar
    Join Date
    Dec 2006
    Age
    33
    Posts
    1,683
    Thanks given
    628
    Thanks received
    1,062
    Rep Power
    750
    Quote Originally Posted by istartedover View Post
    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;
        }
    Why are you running a while loop to generate a random tasks, there's so much more easier ways to do that :L

    Code:
    public static SlayerTask random(Player player, Master master) {
            ArrayList<Integer> availableTasks = new ArrayList<Integer>();
            
            for (int i = 0; i < master.data.length; i++) {
            	int requiredLevel = (Integer) master.data[i][1];
            	if (player.getSkills().getLevel(Skills.SLAYER) < requiredLevel) {
                    	continue;
    		}
    		availableTasks.add(i);
    	}
            
            int taskId = availableTasks.get(Utils.random(availableTasks.size() - 1));
            int minimum = (Integer) master.data[taskId][2];
            int maximum = (Integer) master.data[taskId][3];
            int amount = Utils.random(minimum, maximum);
            
            SlayerTask task = new SlayerTask(master, taskId, amount);
            player.setTask(task);
            player.setTaskId((Integer)master.data[taskId][5]);
            player.setTaskAmount(amount);
            if (!player.getInventory().containsItem(4155, 1))
                player.getInventory().addItem(4155, 1);
            return task;
    }
    (inb4 that fixed it :L) Might have to correct a typo or two, was doin it in notepad :L
    Note: this is untested, so idk :x

    Attached image
    Reply With Quote  
     

  3. #3  
    Registered Member
    Join Date
    Apr 2014
    Posts
    39
    Thanks given
    3
    Thanks received
    1
    Rep Power
    10
    Quote Originally Posted by King Fox View Post
    Why are you running a while loop to generate a random tasks, there's so much more easier ways to do that :L

    Code:
    public static SlayerTask random(Player player, Master master) {
            ArrayList<Integer> availableTasks = new ArrayList<Integer>();
            
            for (int i = 0; i < master.data.length; i++) {
            	int requiredLevel = (Integer) master.data[i][1];
            	if (player.getSkills().getLevel(Skills.SLAYER) < requiredLevel) {
                    	continue;
    		}
    		availableTasks.add(i);
    	}
            
            int taskId = availableTasks.get(Utils.random(availableTasks.size() - 1));
            int minimum = (Integer) master.data[taskId][2];
            int maximum = (Integer) master.data[taskId][3];
            int amount = Utils.random(minimum, maximum);
            
            SlayerTask task = new SlayerTask(master, taskId, amount);
            player.setTask(task);
            player.setTaskId((Integer)master.data[taskId][5]);
            player.setTaskAmount(amount);
            if (!player.getInventory().containsItem(4155, 1))
                player.getInventory().addItem(4155, 1);
            return task;
    }
    (inb4 that fixed it :L) Might have to correct a typo or two, was doin it in notepad :L
    Note: this is untested, so idk :x
    I just tried your way, but it still gives it to the other person. so im guessing its in the way the task is assigned by the slayer master.

    EDIT: Just found out, for some reason it changes everyone's GetTask method, so I'm going to have to fix that. That's the reason it's bugging.
    Reply With Quote  
     


Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. 667/728 Shop Bug
    By Planet Fusion in forum Help
    Replies: 2
    Last Post: 07-08-2013, 12:29 AM
  2. 667/729 Slayer Help Needed
    By Drewsteal in forum Help
    Replies: 0
    Last Post: 04-12-2013, 01:22 AM
  3. [667/***] Grand Exchange Bug/Dupe Fix
    By Ciownfish in forum Tutorials
    Replies: 10
    Last Post: 12-23-2012, 02:11 PM
  4. [667] Real Slayer Rewards/Points
    By ''Brad in forum Tutorials
    Replies: 6
    Last Post: 07-07-2012, 06:44 PM
  5. [667]Multi Player Bug
    By maffia-rpg in forum Help
    Replies: 3
    Last Post: 04-06-2012, 05:54 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •