ni562 Posted December 15, 2015 Share Posted December 15, 2015 (edited) The first bit of code runs smoothly, but the 2nd freezes my client... any ideas? if(!player.isAnimating()){ if (!player.isMoving()){ wheel.interact("Spin"); //Wheel is now visible, spin bowstring sleep(random(700, 3000)); spinMenu.hover(); mouse.click(true); if(menu.isOpen()){ sleep(random(700, 3000)); menu.selectAction("Make X"); } } } vs if(!player.isAnimating()){ if (!player.isMoving()){ if(!spinMenu.isVisible()){ wheel.interact("Spin"); //Wheel is now visible, spin bowstring sleep(random(700, 3000)); } spinMenu.hover(); mouse.click(true); if(menu.isOpen()){ sleep(random(700, 3000)); menu.selectAction("Make X"); } } } Edited December 15, 2015 by ni562 Quote Link to comment Share on other sites More sharing options...
Explv Posted December 15, 2015 Share Posted December 15, 2015 (edited) The first bit of code runs smoothly, but the 2nd freezes my client... any ideas? if(!player.isAnimating()){ if (!player.isMoving()){ wheel.interact("Spin"); //Wheel is now visible, spin bowstring sleep(random(700, 3000)); spinMenu.hover(); mouse.click(true); if(menu.isOpen()){ sleep(random(700, 3000)); menu.selectAction("Make X"); } } } vs if(!player.isAnimating()){ if (!player.isMoving()){ if(!spinMenu.isVisible()){ wheel.interact("Spin"); //Wheel is now visible, spin bowstring sleep(random(700, 3000)); } spinMenu.hover(); mouse.click(true); if(menu.isOpen()){ sleep(random(700, 3000)); menu.selectAction("Make X"); } } } Perhaps you should take a look at the debugging console. You can find it under settings -> show logger. You can then determine your error from the output. Probably a NPE. Your logic and code structure could also use some improvement if(!myPlayer().isAnimating() && !myPlayer().isMoving()){ RS2Widget spinMenu = getWidgets().get(); // Whatever you do to get the spin menu if(spinMenu == null || !spinMenu.isVisible()){ wheel.interact("Spin"); sleep(random(700, 3000)); } else { spinMenu.interact("Make X"); } } Edited December 15, 2015 by Explv Quote Link to comment Share on other sites More sharing options...
Joseph Posted December 15, 2015 Share Posted December 15, 2015 if(!spinMenu.isVisible()){ wheel.interact("Spin"); //Wheel is now visible, spin bowstring sleep(random(700, 3000)); } Perhaps you should take a look at the debugging console. You can find it under settings -> show log (or something similar). My guess is you probably have a null pointer exception. for sure just because he didn't do a null check with spinMenu op: btw spinMenu is a widget null check it before using it. And you can use its built in interaction method spinMenu.interact("ACTION"); it already search menu action for action. Quote Link to comment Share on other sites More sharing options...
ni562 Posted December 15, 2015 Author Share Posted December 15, 2015 Perhaps you should take a look at the debugging console. You can find it under settings -> show logger. You can then determine your error from the output. Probably a NPE. Your logic and code structure could also use some improvement if(!myPlayer().isAnimating() && !myPlayer().isMoving()){ RS2Widget spinMenu = getWidgets().get(); // Whatever you do to get the spin menu if(spinMenu == null || !spinMenu.isVisible()){ wheel.interact("Spin"); sleep(random(700, 3000)); } else { spinMenu.interact("Make X"); } } Hey thanks, that seems to fix the issue... if i change you're code from if(spinMenu == null || !spinMenu.isVisible()){ to if (!spinMenu.isVisible()) { I get a null pointer on that line...How come it works when I check for null, but crashes when i don't? Quote Link to comment Share on other sites More sharing options...
Explv Posted December 15, 2015 Share Posted December 15, 2015 Hey thanks, that seems to fix the issue... if i change you're code from if(spinMenu == null || !spinMenu.isVisible()){ to if (!spinMenu.isVisible()) { I get a null pointer on that line...How come it works when I check for null, but crashes when i don't? Because when the widget is not on screen, when you do getWidegets().get() it will return null. So always make sure you null check Quote Link to comment Share on other sites More sharing options...
ni562 Posted December 15, 2015 Author Share Posted December 15, 2015 Because when the widget is not on screen, when you do getWidegets().get() it will return null. So always make sure you null check I'm not sure i follow..how does checking for null not make it crash? Does it skip the 2nd condition because it's an or and the first condition was true? Quote Link to comment Share on other sites More sharing options...
Explv Posted December 15, 2015 Share Posted December 15, 2015 I'm not sure i follow..how does checking for null not make it crash? Does it skip the 2nd condition because it's an or and the first condition was true? Yes, it is a logical OR || so the second condition in the OR is not checked if the first evaluates to true. If you were to use a bitwise OR | then both sides of the condition would be checked and a null pointer exception thrown. Quote Link to comment Share on other sites More sharing options...
ni562 Posted December 15, 2015 Author Share Posted December 15, 2015 Yes, it is a logical OR || so the second condition in the OR is not checked if the first evaluates to true. If you were to use a bitwise OR | then both sides of the condition would be checked and a null pointer exception thrown. sweeet, i didn't know that...Im sure it'll be useful in the future. Thanks for the help dude Quote Link to comment Share on other sites More sharing options...
Explv Posted December 15, 2015 Share Posted December 15, 2015 sweeet, i didn't know that...Im sure it'll be useful in the future. Thanks for the help dude No problem For more information on the different operators in Java you can take a look at this Java tutorial: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html Quote Link to comment Share on other sites More sharing options...
ni562 Posted December 15, 2015 Author Share Posted December 15, 2015 I realized the 2nd part of the if statement was useless...it will never get to the 2nd condition. if(spinMenu == null || !spinMenu.isVisible()){ is the same as if(spinMenu == null ){ because if (spinMenu == null) then it's deff not visible and if it's not null then it is visible. Quote Link to comment Share on other sites More sharing options...
Explv Posted December 15, 2015 Share Posted December 15, 2015 I realized the 2nd part of the if statement was useless...it will never get to the 2nd condition. if(spinMenu == null || !spinMenu.isVisible()){ is the same as if(spinMenu == null ){ because if (spinMenu == null) then it's deff not visible and if it's not null then it is visible. Pretty much :P Quote Link to comment Share on other sites More sharing options...