pGrind

08/25/2011 21:03 Sᴡoosh#61
Guys, thanks for your feedback, but limiting the language to german will make it hard for others to follow :)

@Turbo : Water is a bitch. Since the last version, flying to emrchant is disabled while your in water. At the current stage, the bot is really not suited yet to grind under water. Use Prophet bot for that in the meantime, they did a good job on their bot.

@zeo :
The bot switches target while its still killing another mob? Strange, this should actually not be, even in beta :D
It will only add items into the item database if they are lying on the ground. I will make items addable from inventory next update.

So, for now, drop item to floor and then have bot add it to item db, then set the sell option :)

Cheers
08/26/2011 22:47 3aber sabil#62
really in general its awsome

but the last realease regarding the script which i didnt try yet has some problems with looting i think ,, and targeting mobs too
it sometimes targets far mobs b4 near ones
and some time leave drops for along time b4 coming back to loot it
08/26/2011 23:33 Sᴡoosh#63
Yes, both issues are beeing worked on and will be resolved next update.

Try out the scripting, people tell me its usefull :)

Cheers
08/27/2011 00:53 3aber sabil#64
ah othere thing ,,, i think we need an option to save profile

so we can save settings to an external file if its easy casue every time i log i set settings from begining ,,, while some times it saves it donno how

and really thanks u r doing a great job
08/27/2011 01:32 Zeomak#65
Update: Target switch passiert nur bei Venos. Habs mit nem Barbteam versucht und da ist nichts derartiges vorgefallen.

Zum Pet Heal:
Habe Pet Heal auf 60% stehen. Der bot heilt aber selbst wenn die HP des Pets noch über 60% sind und dann auch bis 100%. Manches mal wird nachdem 100% erreicht sind noch 2-3 mal gehealed.
08/27/2011 08:04 wongfei888#66
please added

1. Use pet skills while killing monster or buff pet (phonix n herc)
2. Target monster like MHS or Oracle/NtKid BOT
3. Autologin for DC or login

thx so much :)
08/27/2011 16:37 Sᴡoosh#67
@Wongfei :
I will consider pet skills.
What do you mean with targeting like mhs/oracle?
I probably will not implement DC stuff.

-----------------------------------------

For all people who may be interested in scripting the bot, I wrote a small tutourial which hopefully outlines all you need to get started a bit. I will strongly improve the scripting next release, and also add definitions.

Anyways, heres my tuturial. It can also be found on my site , [Only registered and activated users can see links. Click Here To Register...].

Lets go :)

Hey guys,

alright this is for all of you who wish to write their own bot :)

on pGrind you will find a tab called scripting. It looks pretty bad now, and very unattractive to the eye. I will implement syntax highlighting and other helpfull stuff the next few updates.

Anyways, lets continue.

You have 3 main boxes on this tab, and a few buttons. The box titled "Code" is where your code goes. The box named Output is the log of the interpreter. And finally, the "Installed Scripts" one lists all saved scripts.

pGrind uses a delphi/Pascal dialect for scripting. Hence , the main program flow always looks like this :

Code:
Program pGrind_Demo;
Begin

End.
For this example, ive decided to name the program pGrind_Demo. It does not matter what you choose, but I suggest keeping it the same as the filename. The name may NOT include spaces or special characters, or a number as first character.

Good :
  • lol
  • test
  • killer
  • grinder

Bad :
  • 2lol
  • test program
  • killer$33
  • "grind"r

Alright, lets continue.

Now that we know how a program is built, we can get to the basics. You can use functions and procedure, variables and directives, constants and structs.

Consider the small example program I included in pGrind :

Code:
Program Rest; //Program name
Begin //begin declaration
Rest; //procedure "rest"
End. //end of program
This simply makes your character sit down. "Rest" is a procedure, means that it does not give a return value. Functions pass return values.

Now lets look at said functions.

Code:
Program getinfo;
Begin
writeln(inttostr(gethp));
End.
If you run this, you will get the following output :

Quote:
Syntax check...
Syntax checked successfully :)
1234 //YOUR HP will be different ofc :)
Succesfully executed :)
Lets analyse this.

writeln()
This function writes a STRING to the output window.

IntToStr()
This function typecasts an integer value into a string.

GetHP()
This function retrives the character HP for you.

So basically, the command hirarchy is like this :

GetHP -> returns integer (your hp) -> inttostr() -> converts to string -> writeln() writes this line to output.

Clear so far? If yes, you have pretty much understood the basics :)

Now to more fun stuff. You will stumble over cases where you must use conditionals.

Code:
Program OneKill; //Creative name, huh?
Begin //Begin of program

SelectClosestMob; //Select the closest mob

If gettarget <>  0 //Was it successfull?
then 
	Killmonster; //Kill it with fire!!11

If Gethp < getmaxhp //Do we need to rest?
then 
	rest; //Yepp, lets chill a bit

end. //End of program
Maybe you recognise this - its the script I wrote already for you guys, it comes with pGrind.

Read the comments I wrote, it should pretty much clarify all.

Quick walkthrough of conditionals :

If [CONDITION] then [DOSHIT];

Pretty much self explinatory :)

Also, some comparisson operators :

<> - not equal

0 <> 1 = true
0 <> 0 = false

= - equal

0 = 1 = false
0 = 0 = true

< - smaller then

0 < 1 = true
0 < 0 = false
1 < 0 = false

> - smaller then

0 > 1 = false
0 > 0 = false
1 > 0 = true

All comparrison operators can be used with "=" too. For example : <= means "smaller or equal". Its the same as writing (0 < 1) OR (0 = 1). Which brings us to our enxt point :

Logical operators.

OR
If [CONDITION_one] OR [CONDITION_two] then DOSHIT;

AND
see above, it should also be self - explinatory :)

Now for some more fun.

We need a way to do something for a certain amount of time, or until a certain condition is true or false. Welcome to the world of loops.

For this, we need to declare a counter variable. This is just a place where the interpreter will place the loop index.

Declare a variable like this :

Code:
Program Loopdemo;
Var 
Counter : Integer;
Begin 
//empty for now
end;
This will make our variable "Counter" accessable for our program.

Now to the loop :

Code:
Program Loopdemo;
Var 
Counter : Integer;
Begin 
For Counter := 0 to 3 do
writeln('Hello world!!!11!!');
end.
This will generate the following output :

Quote:
Syntax check...
Syntax checked successfully :)
Hello world!!!11!!
Hello world!!!11!!
Hello world!!!11!!
Hello world!!!11!!
Succesfully executed :)
Bingo :)

Do not wonder why the line is outputted 4 times - the script is 0 indexed, means it starts at 0 and works up to the given delimiter.

0 - 1 - 2 - 3 = 4 lines :)

Alright, I hope this will help those who are interested in writing scripts. Check out beta 3 - it will offer much more powerful commands and an improved execution model.

Cheers :)
08/27/2011 17:34 msxgames#68
Killing and grinding doesn't work well on PW MY.

This works:
Quote:
{ pGrind Script file , created @ 4:42:54 PM 8/21/2011}
Program Rest;
Begin
Rest;
End.
This works only after I selected the mob myself. It seems that the SelectClosestMob; procedure doesn't select anything:
Quote:
{This small demo program shows how to use the SelectClosestMob function.
The function returns the closest mobs, depending on your settings in grinding tab.
So a set radius is mandatory, along with a set safe point and selected monster types/names.}


Program OneKill; //Creative name, huh?
Begin //Begin of program

SelectClosestMob; //Select the closest mob

If gettarget <> 0 //Was it successfull?
then
Killmonster; //Kill it with fire!!11

If Gethp < getmaxhp //Do we need to rest?
then
rest; //Yepp, lets chill a bit

end. //End of program
What is the mode parameter in the Gather procedure?:
Quote:
{ pGrind Script file , created @ 13:31:57 27-8-2011}
Program TestADC;
Begin
//Add your code here!
Gather(C01009F2, 1)
End.
08/27/2011 17:35 Sᴡoosh#69
The SelectClosestMob Procedure selects acording to your settings on grind tab :) So please define those first.

You need to pass IDs with "$" in front of them, or as decimal representation.

Gather($ID,MODE);

Mode : 0 for items, 1 for mats

Cheers
08/27/2011 17:56 Zeomak#70
Ok, nächstes:

Potten funktioniert einwandfrei aber Healskills werden dummerweise nur nach einem Kampf eingesetzt. Das ist aber vor allem für BMs und clerics nicht grade das beste.

Edit:Werden teilweise gar nicht eingesetzt auch nicht nach dem Kampf.
08/27/2011 18:04 wongfei888#71
MHS and Oracle bot use address monster not by radius, this very help when selected only few monster attacked
08/27/2011 18:05 Sᴡoosh#72
Ah you mean an monster list. Well, while this is certainly possible - you are the only one until now who requested this, and thus I wont add it just now. Maybe if you only add one name to list, it would suit your needs too?
08/27/2011 19:50 dumbfck#73
Botting isn't really my thing and I haven't tried this out, but I must say... From reading about the features of this thing it sounds like you've done a freaking awesome job on it!
Hats off to you, sir.
08/27/2011 20:11 Sᴡoosh#74
Thanks :)

Its still buggy and needs much work, but from the feedback I have recived it seems like people like it :)
08/28/2011 14:52 Zeomak#75
Quote:
Originally Posted by Sᴡoosh View Post
Ah you mean an monster list. Well, while this is certainly possible - you are the only one until now who requested this, and thus I wont add it just now. Maybe if you only add one name to list, it would suit your needs too?
I think what he actually means is the list to hunt by mob ID not name. As I take it that was a pretty nice feature to hold the Bot in an area, but since this one (as later versions of Oracle and MHS aswell) has a radius option, I think this is solved ^^