-
Posts
1217 -
Joined
-
Last visited
-
Days Won
1 -
Feedback
100%
Everything posted by NotoriousPP
-
I forgot to post when I got home.. But, I'ma post this shit anyways! Epic Hardstyle: Also so sick Trap: https://soundcloud.com/ookaymusic/gta-the-crowd-ookay-remix
-
Actually I was going to start writing a Node tutorial and try cover everything I possibly can, seeing as most people I try to explain Nodes to seem to get stuck at abstract classes, why use super(), and overriding methods! So expect a Node Tutorial coming very soon!
- 19 replies
-
- 4
-
- Beginner
- Intermediate
-
(and 1 more)
Tagged with:
-
Cat+Dog = Great Cartoon. So this is completely invalid.
-
Using Multiple Classes Complete Guide! Tutorial Written By: @NotoriousPP Introduction: It has been brought to my attention that some script writers do not know how to use multiple class files inside of their project, and in this tutorial I will try to cover everything I can, to help you have a better understanding how this is done correctly. I will be working on an example project for this tutorial, just follow along using your own project, doesn’t matter which type of project, as long as you understand what’s going on. This project will be modeled in a State based framework, as I see this most often used throughout the forum. Another question you may have, why should you use multiple classes, what are the benefits, is there an upside? Speaking from an Organizational aspect, yes! Splitting up classes makes it easier for the writer and to whoever is working on the script, instead of having to search through a wall of text; you can simply find the class in your Project Folder. Things you’ll need: A Computer or Laptop. A IDE (For this tutorial I will be using Itellij) Latest Version of OSBot. A Brain (Might help) Getting your project setup: Create new project, and add OSBot as a library. Your project should now look something like this: Create packages inside of your src folder, this well help better organize your script! After doing this it should look similar to this: The Real Work Begins (Kinda): So now that we have packages in our src, we need to fill them up! So first lets create a Script class inside of our Core package. (Notice the Class name “ExampleScript”, this is following correct Conventions. An incorrect way of naming classes would be “examplescript”, “exampleScript”, “EXAMPLE_SCRIPT”, etc. If you would like to learn more about Conventions, you can go here: Code Conventions for the Java Programming Language) Alright so now we have a basic Skeleton setup, though it does nothing just yet. Well, lets change that! Since for this tutorial we are writing a State based script, first we need to create State Objects! To do this we need to create an Enum, which basically is “a special data type that enables for a variable to be a set of predefined constants.” (docs.oracle.com). I personally like to have a package that stores all my data needed for a script, so I’m going to create a new package “data”. After we have created the package, create a new Enum inside of the “data” package. (If you don’t know how to create an Enum right away, just create a new class file for right now, and I’ll show you what to do next!) (If you were one of the people who did not know how to create an Enum, simply create a new Class, and then replace “class” with “enum”, and your set!) For this Enum were are only really using the name, and not storing any real data here, so all we need to do is add the different States we want in our script! For this example, I will be using Attack, Eat, Loot, Drop, and Bank. REMEMBER! To follow correct Conventions we are going to name the states using all CAPITAL letters. Optional: Adding a toString() method can be used to make your “state” or “status” more presentable, and not YELLING AT YOU when displaying. The method essentially grabs whatever “state” being used, and modifies it to your liking. In the example below, it creates a final String “s”, then replaces all underscores (Not used in example) with a space; the next like I return the String “s”, though I grab the first Char of the string and add it to a substring for the rest of the string and add a toLowercase(), making ATTACK, to Attack. This is especially helpful when using States as a status; this method can be applied to all types of Enums! (Cool trick if you’re a Windows Intellij user! You can type all your states without having to type with caps lock, or holding shift; just type your states, select them, and press “ctrl + shift + u”, and it will capitalize all selected, or turn it to lowercase if already capital) So we have our States, now what do I do? Well we need to get a getState() method ready our Script class. If you don’t already know, this is the method we use to determine which action or “state” should be executed. Then in the onLoop we have a Switch statement that determines which action should be executed. So what do we do now? The some people here make the mistake of continuing using this class for their tasks, actions, and data; just everything really. This is exactly what this tutorials main focus is on; how we can use multiple classes to help organize our project. You Script class should now look something similar to this. So now we get to create our first separate class! You may ask, well how will I be able to use myPlayer(), client.getInventory(), if I’m not inside of the Script class. Well one word really “Constructors”. We are going to need to create a constructor that takes a Script variable which we can use throughout the script, in this case “sI” (Swizzbeat are you happy now? I didn’t use sA this time ) which refers to Script Instance; but first we need to create a new class inside of our “tasks” package (folder), and in the example I will be creating an Attack() class. In this class we create a public Constructor that accepts a Script variables “sI” as discussed before! So now you should have a class that looks like this. Well you’re almost done implementing your first separate class (If this is your first time that is)! In the Attack() class we can now use “sI” for all of the calls we need, so instead of typing myPlayer() like in the Script class, it would be sI.myPlayer() in your extended class. So for example you can do something along the line of this: (Please don’t use this snippit below for real, it’s just a funny example, I don’t want a PM saying this didn’t work…) Alright so I got a separate class, but how the hell do I use this shit? You might be asking. Well in your Script class, since you extended Script, by using “this” is other words a Script variable, so that’s what we will be using to call our class! So in the onLoop, we can now add the new separated class, simply by adding “new Attack(this);”. Yup it was that easy! So it should look similar to what I have below. Just import the class (Most IDEs do it automatically), and call the class using “new Class(this)”: Well if you don’t understand how this all works by now, read through it once more, it will make sense eventually! To add more classes to our project, just use the same logic we used in creating our Attack() class(Or hell you can just copy/paste, and edit a little). The other packages in our “src”, can be used for numerous of different classes, just it’s up to you to fill them, just use them to keep organized! Conculsion: Well if you followed along, and got it working correctly! Congratulations! Separating classes help you so much down the road when working with large project, teammates, and or co-workers! No one wants to read a wall of text, it’s much easier to navigate through folders and get the file you need (Like how an office files paper work, Duh…). I really hope you guys all enjoy reading this, and it helps a few people out with their scripts! If you have any suggestions, and or comments, please leave them below, and I’m more than gladly answer them! Also let me know about any errors that you find! I'm not a expert, just trying to help! Sources used: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html http://www.oracle.com/technetwork/java/codeconv-138413.html
- 19 replies
-
- 12
-
- Beginner
- Intermediate
-
(and 1 more)
Tagged with:
-
I'm not sure if your using the toString() correctly, I don't believe you should have a input in the constructor. Shouldn't it be something like: @Override public String toString() { final String s = super.toString().replace('_', ' '); return s.charAt(0) + s.substring(1,s.length()).toLowerCase(); } And to call toString you would simply call: log(Direction.NORTH.toString()); //Outputs: North
-
Yea Item IDs always seem to stay constant, I've been using the same Enum for Food since I started scripting, the ID's have always stayed the same. So you should be safe using IDs for Items, just that's about it really.
-
Item ID's don't ever change, so you don't have to worry about them changing on you!!! But I understand your idea about getPotBonus, which a really cool actually! But thank you!
-
I just use this for my potion handler, it's really simple, but it works fantastically! Though a suggestion for yours would to use a Switch instead of if/else, because the only time it's efficient to use multiple if/else over a switch is when your working with less than 3, if more than that its best to use a switch statement. private void potUp(Script s) throws InterruptedException{ for(Item i : s.client.getInventory().getItems()){ for(PotionData p : PotionData.values()){ if(i != null && p.contains(i.getId())){ switch (p) { case ATTACK: if(s.client.getSkills().getCurrentLevel(Skill.ATTACK) <= s.client.getSkills().getLevel(Skill.ATTACK)){ if(s.client.getInventory().interactWithId(i.getId(), "Drink")){ break; } } break; case STRENGTH: if(s.client.getSkills().getCurrentLevel(Skill.STRENGTH) <= s.client.getSkills().getLevel(Skill.STRENGTH)){ if(s.client.getInventory().interactWithId(i.getId(), "Drink")){ break; } } break; case DEFENCE: if(s.client.getSkills().getCurrentLevel(Skill.DEFENCE) <= s.client.getSkills().getLevel(Skill.DEFENCE)){ if(s.client.getInventory().interactWithId(i.getId(), "Drink")){ break; } } break; case SUPER_ATTACK: if(s.client.getSkills().getCurrentLevel(Skill.ATTACK) <= s.client.getSkills().getLevel(Skill.ATTACK)){ if(s.client.getInventory().interactWithId(i.getId(), "Drink")){ break; } } break; case SUPER_STRENGTH: if(s.client.getSkills().getCurrentLevel(Skill.STRENGTH) <= s.client.getSkills().getLevel(Skill.STRENGTH)){ if(s.client.getInventory().interactWithId(i.getId(), "Drink")){ break; } } break; case SUPER_DEFENCE: if(s.client.getSkills().getCurrentLevel(Skill.DEFENCE) <= s.client.getSkills().getLevel(Skill.DEFENCE)){ if(s.client.getInventory().interactWithId(i.getId(), "Drink")){ break; } } break; } } } } }
-
When I get home I'll post real EDM and not a bunch of Top 100 crap songs that are ruining the entire genre! Get some hatdstyle up in here!
-
The whole confused me. But this little piece is still puzzling me. It 100% work, but it doesn't, but it does? Yes I'm lost.
-
The planetary evidence is proof enough.
-
Corrected.
-
I'm not really for nor against this. Though by linking a post talking about DMT is kinda dumb. You should do some research, because DMT is a drug found in every living creature on this planet, from Grass, Elephants, to Humans, and is believed to make us a dream at night. Also is legal in some countries including the US for some Spiritual practices, so technically it's not completely illegal. I would understand if you were linking a post about meth or heroin, but come on... It's a chemical that inside all of us, and has never killed anyone. Please get your facts straight.
-
Yea Rainmeter, though not alone, I have it sided with Rocketbar and Task Bar Eliminator for the start bar at the bottom.
-
You guys like? I was bored today, and thought I would change up my theme on my computer today! Had to edit a ton to make all this look the way I wanted, but I'm happy with the finished product. By the way this is Windows 7 if your curious.
-
Not sure what's wrong, but I'm unable to even start the client. I tried booting through my IDE, and all it does, it pops up the initial frame asking if I want to stealth the injection and run in debug mode. I press "Launch" then nothing, and my console in my IDE says "Process finished with exit code 0", like it finished.
-
Too lazy to click a button? Your kidding.... Sends source code without any written agreement. Logic.
-
Just let him keep it yo! Hit me up skype later, I got you!
-
Just because it works means he will buy it? So if it works, but runs like complete shit then he's obligated to buy it? I wouldn't... Just because it "works", doesn't mean shit.
-
Just got done with 12 hours of fishing over night with no bans. I don't think it's the client to be honest, though these do sound weird, if it was the client everyone would be banned.
-
Completely Agree
-
Easel ftw!
-
Underestimation of game development. Go look and see how games are built, before you get a team setup for failure. Writing a game require a lot of good script writers, a lot of good artists, and to top it off, a lot of fucking time(No exaggeration), and even that's not enough sometimes. Do some research first, because the moment you said "I don't know much code" instantly proves that you have done little to no research, but rather threw a idea that pop up in your head; because if you don't know much "code", then you will literally understand nothing to how a game is developed. Not being a dick, just being straightforward.