Tai va padirbejau truputi ir padariau script kurimo guida lt kalba.
Steps 1. Script Model 2. GUI Building 3. Player Movement 4. Objects, Menus, and Items 5. NPCs & Player Interactions 6. Player Properties
Pirmas žingsnis – Script Model
import java.awt.*;
import com.speljohan.rsbot.bot.Bot;
import com.speljohan.rsbot.event.listeners.PaintListener;
import com.speljohan.rsbot.script.Script;
import com.speljohan.rsbot.script.wrappers.*;
public class testscript išplečia Scenarijaus įgyvendina
PaintListener { public void onRepaint(Graphics g) {
Bot.getEventManager().addListener(PaintListener.class,
this); } public double getVersion() {
return 1.0;
} public String getScriptCategory() {
return "other Scripts";
} public String getName() {
return "Frozen Script";
} public String getAuthor() {
return "Frozen (Hunterbdb)";
}public boolean onStart(String[] args) {
Bot.getEventManager().addListener(PaintListener.class, this);
Frame myframe = new Frame("Input");
myframe.setVisible(true);
return true;
} public void onFinish() {
} public int loop() {
return 1000; } }
Ką jūs matote aukščiau yra paprastas Scriptas, jūs kada nors matyti Rsbot.
Kiekvienas scriptas turi bent šiu metodu kurie Leidžia peržiūrėti, ką kiekvienas
metodas: onStart (): šis metodas vadinamas kai scriptas prasideda. Ji grąžina
boolean (true arba false pareiškimą), kuris pasakoja scenarijų arba tęsti (jei tiesa)
arba sustabdo (jei klaidinga). loop (): tai yra, kur bus scripto kodas.
loop () yra nuolat. jis kartojasi ir kartojasi ir kartojasi. Stai kaip scriptas veikia.
Pavyzdžiui: jei norite, kad jūsų scriptas nueitu prikirstu malku
ir vaikščiotu į banką, jusu loop () metodas atrodys taip:
loop () { if(I have cut logs)
then(walk to the bank)
if(I have not cut logs)
then(cut some logs) return 100; }
Grizimas yra skaicius milisekundžių kuri norite, kad jūsų programa palauktu
tarp pasikartojimų. jei pasakysi "return 1000;" pabaigoje loop() tada jusu scripte
nurodytus veiksmus prades vykdyti palaukus 1000 milisekundžių, ir paleis save nuo pradziu.
(then your script will execute your code,wait 1000 milliseconds, and then restart itself from the top.)
onRepaint (Graphics g): Tai metodas, kuris leidžia rodyti zaidejo ataskaita RuneScape ekrane.
šis metodas yra vadinamas milijonų kartų per sekundę. Naudojant šį metodą,
galima parodyti vartotojo pažangos ataskaitas. Pavyzdžiui, jei norite, kad vartotojas,
zinotu kiek žuvų buvo sugauta, galite tai tai padaryti su. onRepaint
(Graphics g) method. get() methods:these are methods like getVersion(), getAuthor(), etc.
sitie tiesiog grazina eilute (string) arba dviguba verte (double value)
kuri atitinka pavadinima. pvz. getAuthor() as pasakysiu "return Frozen ", nes as esu autorius
Antras žingsnis - GUI Building Alright, taigi pirmas dalykas, kurį kada nors noresi padaryti
savo scripte yra gauti input(indėlis,sanaudos), na jus paklausite kas yra tas input. Input yra kai jus
prasote vartotojo informacijos ar specifikaciju. Štai pavyzdys Rsbot "What kind of logs do you want to fletch?"
šis tyrimas yra pateiktas teksto laukelįyje, pvz.vieną žemiau: Rsbot naudoja Java
programavimo kalba, o tai reiškia, mes turime naudoti java, kad gautume input(indėli,sanaudas) is jusu scripto vartotojo.
Kelias java tai yra per GUI (Generic User Interface). Garsai Hightech, taip? N, taip nera.
Istiesu tai taip paprasta, kad net nežinau, kodėl as tai aiskinu :)
Java rašomoji programavimo kalba, todėl ji naudojama langus(nu notepad ir kiti) dalyku paaiskinimui.
langas yra kaip ir narsykle kuria jus naudojate perskaityti sita guide, arba microsoft word.
Viskas kompiuteryje tam tikros rusies langai. Langas i java taip pat vadinamas frame (kadras)
ir tai vieta kur kodas pasideda. Kaskart jum darant GUI, jus naudosite GUI koda i onStart() method (metodas).
Kodėl? Todėl, kad onStart() metodas vadinamas kai scriptas prasideda. Tu nenori
prasyti vartotojo input po scripto baigimo, todel prasai kai jis prasideda.
Yra du būdai kaip sukurti langus ir objektus i java. yra Swing(submeniu) ir AWT.
Rsbot nepalaiko swing, ir man nerupi ,nes galime naudoti senesni bet vienodai galinga AWT nustatyti klases.
Norėdami sukurti AWT rėma, naudokite šį kodą: Frame myframe = new Frame("Frozen GUI");
Taigi kas vyksta? Tiesiog tai, ka jus darote cia yra sakoma kompiuteriui, sukurk
langą pavadinimu myframe kurios antraštės juosta su užrašu" Frozen GUI "ant jo"
Tai galinga komanda, bet tai tik daro nematomą rėma. ūtu nematomas, tačiau taip nieks nemaytu savo pasiekimu.
Pakeisti "myframe" Jūs galite pavadinta savo rėmais pirmoje komandoje aš parodžiau jums.
Rėmo dydžiai turi būti nustatyti kitaip jie bus labai maži. Na štai myframe.setSize(250,250);
dydžiai nustaotmi pagal tašku(pixeliu) skaiciu. Ši komanda pasako kompiuteriui nustatyi
iki 250 plocio ir 250 ilgio lentele. Pagaliau mes padarėme nuobodu, kvaila, leva rėma :)
Na dabar jau galime prikist visokio šlamįto i jį. Rėmeliai yra erdvė i kurią mes galime i kuria mes galime rasyti ir pns.
Sukurkim 2 input dėžes pavatintas TextFields:
TextField input1 = new TextField();
TextField input2 = new TextField();
As padariau du TextFields, tačiau jie yra nematomi. Komponentas tampa matomas, kai
ji pridedi prie rėmo, padarykime tai:
myframe.add(input1);
myframe.add(input2);
Tai puiku, bet musu darbas dar prastai atrodo komponentai susimaise tarpusavyje.
Ar nebutu sauni tureti gerai atrodanti GUI kur komponentai gerai isideste? java reguliuoja
daiktus ant rėmų naudojant isdėstymo valdytoja. Yra daug rūsių išdėtymo vadovu, bet
laikykimes paprasčiausių is visų, FlowLayout. Norėdami nustatyti rėmelio Maketavo vadova naudojam sita koda:
myframe.setLayout(new FlowLayout(FlowLayout.CENTER,30,10));
FlowLayout tiesiog suderina
komponentus ir juos viena po kito. Butent tai pirmasis argumentas daro.
Ateinantys du argumentai kurie yra (30 ir 10) pasako kiek horizontalus atstumas ir kiek vertikalus atstumas utri būti tarp komponentų
Ahhhhh pavargau :) Na , bet toks gyvenimas reik test toliau.
Nepamirskite. kad galite rašyti :
FlowLayout lm = new FlowLayout(FlowLayout.CENTER,30,10));
myframe.setLayout(lm);
Šios komandos daro ta patį dalyka ir prisiminkite galite pasirinkti parašyti FlowLayout.LEFT or FlowLayout.RIGHT.
Dar mum reiks etiketės, nes, jei neturite jos, kaip vartotojas žinos, ką įdėti i savo textfields?
Etiketės rodo teksta. Kad įrasyti i etikete naudokite viena iš šiu kodu:
Label lb1 = new Label("Logs type");
Label lb2 = new Label("Bow type");
Ir visada atsiminkite itraukti juos į rėmus. Dabar jum tereikia mygtuko.
Button button = new Button("Begin Script");
Ji taipat reik idėt i rėmelius. Dar pravartu turėti rėmeliuose mygtuka "x" kurį paspaudus scriptas išsijungtu.
Jo sukūrimui naudokime sita koda:
myframe.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
myframe.setVisible(false); }});
Dar mum reikia mygtuko kuris uzdaro langa ir pradeda jusu scripto darba rsbote štai kodas:
public boolean onStart(String[] args) {
Bot.getEventManager().addListener(PaintListener.class, this);
final Frame myframe = new Frame("User Input");
myframe.setLayout(new FlowLayout(FlowLayout.CENTER,30,10));
myframe.setSize(175,175) ;
myframe.setResizable(false);
myframe.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
myframe.setVisible(false); }});
Label lb1 = new Label("Logs type");
Label lb2 = new Label("Bow type");
final TextField input1 = new TextField();
final TextField input2 = new TextField();
Button button = new Button("Begin Script");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
logtype = input1.getText();
bowtype = input2.getText();
myframe.setVisible(false);}});
myframe.add(input1);
m yframe.add(lb1);
myframe.add(input2);
myframe.add(lb2);
myframe.ad d(button);
myframe.setVisible(true);
return true;
}
Dar vienas papildomas dalykas kuriuo noriu pasidalinti su jumis.
Štai scriptas kuri padariau:
import java.awt.*;
import com.speljohan.rsbot.bot.Bot;
import com.speljohan.rsbot.event.listeners.PaintListener;
import com.speljohan.rsbot.script.Script;
import com.speljohan.rsbot.script.wrappers.*;
import java.awt.*; import java.awt.event.*;
public class testscript extends Script implements PaintListener {
String logtype;
String bowtype;
public void onRepaint(Graphics g) {
Bot.getEventManager().addListener(PaintListener.class, this);
} public double getVersion() { return 1.0;
} public String getScriptCategory() {
return "Ben's Scripts";
} public String getName() {
return "Test Script";
} public String getAuthor() {
return "Ben B (Hunterbdb)";
} boolean maybegin = false;
public boolean onStart(String[] args) {
Bot.getEventManager().addListener(PaintListener.class, this);
final Frame myframe = new Frame("User Input");
myframe.setLayout(new FlowLayout(FlowLayout.CENTER,30,10));
myframe.setSize(175,175) ;
myframe.setResizable(false);
myframe.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
myframe.setVisible(false); }});
Label lb1 = new Label("Logs type");
Label lb2 = new Label("Bow type");
final TextField input1 = new TextField();
final TextField input2 = new TextField();
Button button = new Button("Begin Script");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
logtype = input1.getText();
bowtype = input2.getText();
myframe.setVisible(false);
maybegin = true;
}});
myframe.add(input1);
myframe.add(lb1);
myframe.add(input2);
myframe.add(lb2);
myframe.add(button);
myframe.setVisible(true);
return true;
} public void onFinish() {
} public int loop() {
if(maybegin) {
} return 1000;
} }
Jus turetumet matyt kazka panasaus i sita.
Trečias žingsnis - Player Movement
Kiekvienas norite, kad jusu accountas judėtu rsBot numatyta būdu lengvai perkelti jūsų personažas su programavimu.
Sitam etapui reiks naudot rsbot virsui tabmeniu spaudziam view ir player position
matom jusu kordinates position x___ ir y___
Norint judeti jum reike padaryti sarasa kur norite keliauti eiles tvarka
Jums reiks judet plytelemis RuneScape plytelės vadinamos RSTiles naudojam sita koda:
RSTile[] path = new RSTile[]{
new RSTile(1215,1418), new RSTile(1215,1425)};
galite įdėti daug plyteliu šioje matricoje, kaip norite . Tačiau, jei jos yra
nepasiekiamos per kelias, tai bus problemų. galit naudot tada sita :
RSTile[] path = new RSTile[2];
path[0] = new RSTile(1215,1418);
path[1] = new RSTile(1215,1425);
pirmas metodas yra zymei greitesnis, db jus turit savo komplekta, pasivaiksciokim pabandykim sita koda:
walkPathMM(path,20);
ką reiškia "20" čia reiškia? šis metodas atsižvelgia i rstiles ir juda pesciomis jusu eiles tvarka.
Antrasis argumentas yra "maksimalus nuotolis",norite kad jusu accountas keliautu
Įsitikinkite, kad jūsų personažas neturi eiti per toli arba jis pasiklys
Viskas gerai, bet jei visalaik vaiksčiosi tuo paciu keliu gali but uzbanintas todel gal
padarykime kad jis atsisiktinai rinktusi kelia bandome sita koda:
walkPathMM(randomizePath(path,2,2),34);
Daabr tikriausiai vel nesuprantat kas ve per 3 skaiciai na tuoj paaiskinsiu.
Giliai įkvėpkite. užrūkykite. Antrasis argumentas šiuo metodu yra didžiausia "X" nuokrypis (arba atstumas nuo pradinio RSTile "x" vertės) norite randomize.
Trečiasis argumentas yra didžiausias "y" nuokrypis.pavyzdžiui, mano kodas, plytelės diapazono keliu [0] (1213 iki 1217, 1416 ir 1420).
Kodėl? nes aš nustačiaui x ir y didžiausias nuokrypis į randomizePath metodas 2,2.
Na va ir baigem su 3 etapu.
Ketvirtas žingsnis - Menus, Objects, and Items
Gerai, jei mes sužinojome, kaip padaryti nuobodziai atrodanti GUI, rsbot modelio script ir kaip padaryt kad musu heroju judėtu.
Nuobodu... Kas toliau dabar mes mokysimes svarbiausiu dalyku: kaip paspausti ant daikto.
Kaip as anksciau sakiau viskas turi numerius runescape.
Be to, kiekvienas daiktas ir pastatas ir veikejas yra daiktas (kaip ir visi daiktai java).
objektai gali buti dalykai pvz, banko kabinos jum reiks gauti ju numerius.
kaip matote, banko stende yra sveikasis 36831.
Yra du žingsniai paspaudžiant ant objekto: raskite ir objektą, spustelėkite objektą.
Yra keletas būdų, kaip rasti objektų:
1. publick RSObject getObjectAt (int x, int y) Šis metodas nėra tas pats kaip
4. būdas nebent jis naudoja visose vietose, o ne RSTile.
2. visuomenės RSObject findObject (int) Šis metodas nustato artimiausio objekto su spcified numerį.
3. visuomenės RSObject findObject (int nuotolio, int numeris) Šis metodas nustato artimiausią objektą su nurodytu numeriu ir per nurodytą maksimalų nuotolį nuo žaidėjo.
4. visuomenės RSObject getObjectAt (RSTile t) Šis metodas tampa objektu, kuris yra nurodytas RSTile. Galite naudoti 2 metodas labiausiai naudojamas dėl savo paprastumo.
Dabar, jeigu aš noriu, kad mano scriptas galetu naudotis banko stendu aš naudosiu šį kodą:
int id1 = 36831;
RSObject bankbooth = findObject(id1);
atObject(bankbooth,"Use-Quickly");
Kas tai atObject metodas? Šis metodas tiesiai paspaudžia ant objekto,kad jūs radote ir pasirenka variantą nurodyta 2 argumentas iš meniu.
Įsitikinkite, kad 2 argumentas eilutė yra būtent tai, ko jūs norite.
Daiktai tai objektai jusu inventoriuje norėdami paspausti ant ju naudokite šį kodą:
atInventoryItem(379,"eat");
Šis metodas bus dešiniuoju pelės mygtuku spustelės ant Mano omarų, o tada pasirinks "valgyti".
taip pat jus galite naudoti trumpesnius metodus:
1. public boolean useItem(RSItem item, RSItem targetItem) Šis metodas naudoja daikta ant kito daikto.
2. public boolean useItem(RSItem item, RSObject targetObject) Šis metodas naudoja daikta ant objekto.
Norėdami sukurti RSItem objektą naudojam šiuos metodus, pavyzdžiui:
RSItem item = getInventoryItemByID(1319);
Sitas metodas tik padare RsItem (vieta) mano rune 2h kardui inventoriuje.
Db kalbam apie banka kai aš atidarau banka, tarkim bank.searchItem (String), kuris
ieško nurodyto punkto savo inventoriuje. tada naudojam clickMouse metoda spustelėkite ant taško, kur objektas bus po ieškojimo to, kuris yra viršutiniame kairiajame kampe.
atlikime atranką po paspaudimo dešiniu klavišu elementa į inventorių. būdas tai padaryti yra naudoti atMenu metoda.
Ką aš galiu padaryti, tai pasakyti: atMenu("Withdraw 100");
Pakeisti teksto kabučių su atitinkamą komandą ir metodas pasirinks jį iš meniu kuri jūs turite atidaryti.
zymos yra mygtukai kurie leidzia jum keisti is inventoriaus i jusu zaidejo ekrana i jusu dialoga runescape.
atidaryti šias žymas rsbote, naudokite šį kodą:
openTab (INTERFACE_TAB_PRAYER);
public static final int INTERFACE_TAB_CLAN = 589;
galite atidaryti bet kokia kortelę naudojant vieną iš šių nustatymu
public static final int INTERFACE_TAB_IGNORE = 551;
public static final int INTERFACE_TAB_FRIENDS = 550;
public static final int INTERFACE_TAB_MUSIC = 187;
public static final int INTERFACE_TAB_OPTIONS = 261;
public static final int INTERFACE_TAB_EMOTES = 464;
public static final int INTERFACE_TAB_MAGIC = 192;
public static final int INTERFACE_TAB_QUESTS = 274;
public static final int INTERFACE_TAB_STATS = 320;
public static final int INTERFACE_TAB_COMBAT = 92;
public static final int INTERFACE_TAB_EQUIPMENT = 387;
public static final int INTERFACE_TAB_PRAYER = 271;
public static final int INTERFACE_TAB_LOGOUT = 182;
public static final int INTERFACE_GUI = 548;
public static final int INTERFACE_CHAT_BOX = 137;
public static final int INTERFACE_TRADE = 279;
public static final int INTERFACE_GAME_SCREEN = 549;
public static final int INTERFACE_LEVELUP = 740;
Jums nereikia ju naudoti galima labai gerai pasakyti openTab (271) kad atidaryti zaidejo zyma.
Kintamųjų tik lengviau. Nereikia prisiminti visus tuos numerius! Bankinės Yra keletas
būdų banko. Šie tik kai bankas ekranas OPEN! Įgyvendintos kintamasis "bankas" yra
naudojamas prieigai prie banko komandos. Galite naudoti savo būdų:
bank.depositAllExcept (379);
sitas jei viska nori padet
bank.depositAll ();
Penktas žingsis - NPCS and Player interaction
Daugumoje scriptu noresit pakalbet su npc ir kitais zaidejais.
dirbti su npc ir zaidejais tai kaip dirbti su objektais.zingsniai tie patys
surasti objekta ir paspausti ant jo bet metodai yra skirtingi
1. public RSPlayer getNearestPlayerByLevel(int level)
2. public RSPlayer public RSPlayer getNearestPlayerByName(String name)
3. public RSNPC getNearestFreeNPCByName(String... names)
4. public RSNPC getNearestNPCByName(String... names)
NPCs, yra vadinamas RSNPCs ir zaidejai vadinami RSPlayers.
jei norite rasti ir sukurti RSNPC objekta, reikia padaryti, tai pasakyti:
RSNPC dragon = getNearestNPCByName ( "Green Dragon");
šis kodas suranda žalia drakona, jei toks yra. Jei aš noriu rasti zaideja ir nuzudyti vilde, man reikia padaryti, tai pasakyti:
RSPlayer player_to_kill = getNearestPlayerByLevel (95);
Šis kodas nustato aa lvl 95 žaidėjas , jei toks yra.
Padaryti kažką su NPC objektu arba zaideju objektu, naudoti šį metodą:
atNPC(dragon, "Attack");
sitas kodas puola drakona npc.
Antrasis argumentas yra galimybė meniu norite spustelėkite su dešiniu klavisu ant NPC. Ką nors padaryti su zaidejo , naudoti šį metodą:
ClickCharacter(player_to_kill,"Attack");
Šis metodas gali būti naudojamas kaip RSNPC taip pat.Na, tai yra pagrindo žaidėjams ir NPK interation.
Šeštas žingsis - Player Properties
Yra daug savybiu kurios ateina su zaideju.
statistiniai duomenys,inventoriaus duomenys,zaidejo vietos ir tt.
Tai naudinga žinoti, nes jie gali padėti jums parašyti kodą. ra labai naudingas metodas,
getMyPlayer() metodas kuris grąžina save.
RSPlayer me = getMyPlayer();
RSTile mylocation = getMyPlayer().getLocation(); Tai bus jūsų dabartinis RSTile.
RSTile mydestination = getMYPlayer().getDestination(); Tai bus jūsų dabartinę vietą ir persikelti. ji atkreipia null, jei nėra juda, todėl įsitikinkite, kad jūs ją vadina tik tada, kai juda.
int index = Skills.getStatIndex("Fishing");
int exp = skills.getCurrentSkillExp(index);
šis kodas bus indeksuotas arba numeris žvejybos statuso kuris gauna dabartinės įgūdžių patirties
getStatIndex(String)
int level = skills.getCurrentSkillLevel(index);
int xptonextlvl = skills.getXPToNextLevel(STAT_FISHING);
public static final int STAT_ATTACK = 0;
public static final int STAT_DEFENSE = 1;
public static final int STAT_STRENGTH = 2;
public static final int STAT_HITPOINTS = 3;
public static final int STAT_RANGE = 4;
public static final int STAT_PRAYER = 5;
public static final int STAT_MAGIC = 6;
public static final int STAT_COOKING = 7;
public static final int STAT_WOODCUTTING = 8;
public static final int STAT_FLETCHING = 9;
public static final int STAT_FISHING = 10;
public static final int STAT_FIREMAKING = 11;
public static final int STAT_CRAFTING = 12;
public static final int STAT_SMITHING = 13;
public static final int STAT_MINING = 14;
public static final int STAT_HERBLORE = 15;
public static final int STAT_AGILITY = 16;
public static final int STAT_THIEVING = 17;
public static final int STAT_SLAYER = 18;
public static final int STAT_FARMING = 19;
public static final int STAT_RUNECRAFTING = 20;
public static final int STAT_HUNTER = 21;
public static final int STAT_CONSTRUCTION = 22;
public static final int STAT_SUMMONING = 23;
Jums nereikia naudoti ju naudoti. Galima labai gerai pasakyti
skills.getXPToNextLevel(10) gauti žvejybos XP į kitą lygį.
Tikiuos suprantamai parasiau, nepykit jei kas nors nesuprantama. ;)