Jump to content

Ex0rcism

Members
  • Posts

    58
  • Joined

  • Last visited

  • Feedback

    100%

1 Follower

Profile Information

  • Gender
    Male

Recent Profile Visitors

1746 profile views

Ex0rcism's Achievements

Iron Poster

Iron Poster (3/10)

9

Reputation

  1. No one is, I promise you. But for the Verification Thread everyone seems to just post their UID which you cannot search it in Discord, or they'll just add their name only and not post their UID. I'm sure some of them are probably spammers and scammers but there might be legit users who do not know what they are doing or how to do it. Pretty simple guide, even the pictures are self explanatory.
  2. For updated Verification Tutorial please check this out!
  3. Copying Your Discord Name: Step 1: (Click Your Discord Name) YOU ARE FINISHED COPYING YOUR DISCORD NAME! Copying Your Discord Unique ID: Note: If you already have Developer Mode Enabled then proceed to Step 4. Step 1: (Click Account Settings Button) Step 2: (Click Advanced Tab) Step 3: (Click Developer Mode Toggle Button) Step 4: (Click My Account Tab) Step 5: (Click Copy ID Button) YOUR ARE FINISHED COPYING YOUR DISCORD UID! Getting Verified for OSBot Discord Server: Note: If you already have signed into OSBot Forums then proceed to Step 3. Note: If you have already signed into OSBot Forums and you are viewing Discord Verification Thread then proceed to Step 5. Step 1: (Click Login) || Visit OSBot Homepage Step 2: (Enter Your Login Details & Click Sign In) || Visit OSBot Login Page Step 3: (Scroll Down & Click Community Discussion Under OSBot Category) || Visit Community Discussion Step 4: (Scroll Down & Click Discord Verification Thread) || Visit Discord Verification Thread Step 5: (Click Reply To Topic Button) Step 6: (Enter Your Discord Name + Discord UID & Click Submit Reply Button) YOU ARE NOW OFFICIALLY DONE WITH TUTORIAL! Note: Please be patient for verification!
  4. Yes, sorry was in rush making this tutorial will update and give credits. And yes you can use singleFilter() but will cause warnings to your project unless you suppress it. Either way they both work perfectly fine I just think the List and getAllWidgets() is easier to understand on what is happening.
  5. I've seen a lot of people on here that still to this day think that using the basic run down getWidgets() method works. Example: [DO NOT USE] @Override public int onLoop() { log(getWidgets().get(int rootId, int childId).getMessage()); getWidgets().get(int rootId, int childId).interact(); return 300; } Note: This is a big NO NO! The reason why is because you're not properly null checking the widgets, and will cause the script to fail if the widget returns as a null, so lets get started! Basic Tutorial [FOR NOOBS]: So lets take into consideration that you just want to do things with your widget but you find yourself down the road running into problems with it not working properly. First we want to get our widget, but how do we do this? Simple let's call for a widget and store it! private RS2Widget getMyWidget() { //Replace ids with your ids RS2Widget storedWidget = getWidgets().get(int rootId, int childId); return storedWidget; } Now that we have our basic method getMyWidget() created, we still need to null check getMyWidget() before using it. Below you will see how to use it in your onLoop() method! @Override public int onLoop() { if (getMyWidget() != null && getMyWidget().isVisible()) { log(getMyWidget().getMessage()); getMyWidget().interact(); } else { log("(Error) - Can't use any action for getMyWidget(). Returning as null or invisible."); } return 300; } You're now officially done, you've created a method to get your widget and to check if it's not null and is visible on screen! BUT LETS KEEP GOING TO MAKE IT EVEN MORE SIMPLE! Lets make a boolean method to check to see if our widget is working. private boolean isMyWidgetWorking() { return getMyWidget() != null && getMyWidget().isVisible(); } Now we have to change our original if statement in the onLoop() method. @Override public int onLoop() { if (isMyWidgetWorking()) { log(getMyWidget().getMessage()); getMyWidget().interact(); } else { log("(Error) - Can't use any action for getMyWidget(). Returning as null or invisible."); } return 300; } CONGRATULATIONS YOU'VE SUCCESSFULLY KNOW HOW TO USE A WIDGET! YOU'RE FINAL RESULTS SHOULD LOOK SIMILAR TO THE ONE BELOW: private RS2Widget getMyWidget() { //Replace ids with your ids RS2Widget storedWidget = getWidgets().get(int rootId, int childId); return storedWidget; } private boolean isMyWidgetWorking() { return getMyWidget() != null && getMyWidget().isVisible(); } @Override public int onLoop() { if (isMyWidgetWorking()) { log(getMyWidget().getMessage()); getMyWidget().interact(); } else { log("(Error) - Can't use any action for getMyWidget(). Returning as null or invisible."); } return 300; } Advanced Tutorial [FOR PROS]: This will be a more in depth guide that will teach you how to use widgets without ever having to use root and child ids. This makes it way more convenient for script writers that do not want to constantly update their widgets when Jagex updates the game. We will continue off the Basic Tutorial, so for your getMyWidget() we are going to change a few things. But first I will teach you how to use the Widget Debugger that OSBot has in the Options. First open up Settings in OSBot and select Options. Now click on Debug and check the Widgets option. Lets go into the game and check for a widget we can use. So in this tutorial we will use the widget that has Look up name in it. We will have to query this widget in Widget Debugger so go back to OSBot Options and click on Widget Debugger. The widget we used was in the color of white, why use the white one and not the green one? Because it has the fields we need, that's all that matters. We will take these fields and add them to a filter to find the widget! So lets make a filter search in the method getMyWidget(). private RS2Widget getMyWidget() { List<RS2Widget> allWidgets = getWidgets().getAll(); String[] actions = {"Look up name"}; RS2Widget storedWidget = allWidgets.stream().filter(w -> w.getWidth() == 120 && w.getHeight() == 30 && w.getInteractActions() == actions).findFirst().orElse(null); return storedWidget; } Now we can change our onLoop() method and get rid of getMyWidget().getMessage() because it will return as null. @Override public int onLoop() { if (isMyWidgetWorking()) { getMyWidget().interact(); log("(Info) - Succesfully clicked getMyWidget()!"); } else { log("(Error) - Can't use any action for getMyWidget(). Returning as null or invisible."); } return 300; } THAT'S IT YOU ARE NOW OFFICIALLY A PRO AND WON'T HAVE TO EVER WORRY ABOUT UPDATING YOUR WIDGET! YOUR FINAL RESULTS SHOULD LOOK SIMILAR TO THE ONE BELOW: private RS2Widget getMyWidget() { List<RS2Widget> allWidgets = getWidgets().getAll(); String[] actions = {"Look up name"}; RS2Widget storedWidget = allWidgets.stream().filter(w -> w.getWidth() == 120 && w.getHeight() == 30 && w.getInteractActions() == actions).findFirst().orElse(null); return storedWidget; } private boolean isMyWidgetWorking() { return getMyWidget() != null && getMyWidget().isVisible(); } @Override public int onLoop() { if (isMyWidgetWorking()) { getMyWidget().interact(); log("(Info) - Successgully clicked getMyWidget()!") } else { log("(Error) - Can't use any action for getMyWidget(). Returning as null or invisible."); } return 300; } CREDITS: Dream - Simplifying the methods above for an easy understanding! OSBot Developers - For providing the API and being able to write your own scripts! Me - For making a tutorial for noobs like you!
  6. That actually helped me knowing it was a boolean statement, but it did not solve trying to set the actual pitch and yaw to it's specific target. Recalling the function doesn't help any, still ends up being the same, and yeah currently working on a fix for when the camera stops moving to return another boolean as true, hopefully this will solve my issue.
  7. Unfortunately it got sold to somebody else, I'm sorry for the inconvenience.
  8. Title says it all please PM here or PM me on Discord (Ex0rcism#6304) UPDATE: SOLD (OUT OF STOCK)
  9. So for some reason I cannot set the camera to move to specific pitch and yaw degrees. Everytime I do I get different results on current pitch and yaw. My Code: if (camera != null) { targetPitch = random(22, 67); targetYaw += 1; camera.movePitch(targetPitch); camera.moveYaw(targetYaw); log("Camera moved successfully to position [Current(Pitch: " + camera.getPitchAngle() + ", Yaw:" + camera.getYawAngle() + "), Target(Pitch: " + targetPitch + ", Yaw: " + targetYaw + ")]"); return; } Results (Log): Camera moved successfully to position [Current(Pitch: 24, Yaw: 0), Target(Pitch: 25, Yaw: 7)] Camera moved successfully to position [Current(Pitch: 33, Yaw: 1), Target(Pitch: 33, Yaw: 8)] Camera moved successfully to position [Current(Pitch: 58, Yaw: 3), Target(Pitch: 57, Yaw: 9)] Is there a way I can get it to the specific target, so I'm able to do a check with a boolean statement?
  10. So this should be efficient enough to use: private int getSackWidgetRootId() { RS2Widget sackWidgetRoot = getWidgets().singleFilter(getWidgets().getAll(), w -> w.getSpriteIndex2() == -1 && w.getHeight() == 68 && w.getWidth() == 68); if (sackWidgetRoot != null) { return sackWidgetRoot.getRootId(); } return -1; } private int getSackValue() { List<RS2Widget> sackWidget = getWidgets().matchingTextColour(getSackWidgetRootId(), 13158600); if (sackWidget != null) { RS2Widget messageWidget = sackWidget.get(0); return Integer.parseInt(messageWidget.getMessage()); } return -1; } Thank you @Malcolm and @MasterOfData for all the help I needed to achieve this! Topic can now be closed.
  11. Sprite Ids don't change? Wonder how this could be achieved, because you're right I don't want to keep updating the script every Thursday lol.
  12. I'm trying to develop my own mining script for motherlode mine, I need to verify how many Pay-dirt the player has in the sack before moving on to the next step. Does anyone have a solution on retrieving a widget text and returning it as an int? Note: I Have censored this heavily because I'm using my main, I don't need Jagex banning my account just by using a 3rd party client or for writing a script. All surrounding players have been censored too just in case they are a bot or Jagex staff. All the information you need is in the picture without any of my personal account details. *UPDATE*: I have managed to figure it out thanks for the help anyways. sackValue = Integer.parseInt(getWidgets().get(382, 4, 2).getMessage()); Please close thread.
  13. Currently quitting osrs since I have noticed there's not much you can really bot and make money off of. Doing paypal only. PM me if interested.
  14. Thank you, guess I'll be using terminal for running jars!
×
×
  • Create New...