[TuT]Walk with packets.

04/21/2009 19:54 kalhacker9000#1
Hey guys,
yes i make a tut.
i'm not the best in making Tutorials....of course not for Packets.
but i try to do it so "noobs" can read it and don't have to ask.
So here we go:

Walk in Kalonline is, i think, "simple".
A walk packet looks like this:
PHP Code:
PACKET TYPE0x15 FORMATbbb
b
1
b
0
b

Okay 0x15 is the packet for Move stop.
the bytes are the coordinates which you move. how i can explain it in english....
I'm try to say it like Mahatma say it to me (danke übrigens):
Maybe you stay on
PHP Code:
X100
Y
100
Z
100 
Now Packet 0x15 with byte
PHP Code:
b:1
b
:0
b
:
appeared. Now you stand on
PHP Code:
X101
Y
100
Z
101 
so the bytes from 0x15 means the steps you walk on the coordinates.

So that's easy i think.....but now the difficult part.
How to make a "bot"?

Okay i'm try to explain it but i can't finish my bot...xD
--
A bot is a program which make things in games automatticly.
So a bot in KalOnline can be very usefull.
You can lvl without do anything.
Behead.
Pick.
Skilluse.
All these things without do anything.
That would be great.

So how to program a Bot?
I'm try to explain it on Autopick.

First thing who appeared is the item.
PHP Code:
if (packet[2] == 0x36
{
    
DWORD itemid,x,y;
    
memcpy((void*)&itemid,(void*)((DWORD)packet+5),4);
    
memcpy((void*)&x,(void*)((DWORD)packet+5+4),4);
    
memcpy((void*)&y,(void*)((DWORD)packet+5+4+4),4); 
The program see: "aah a item appeared", and give you information about the item like
PHP Code:
ItemIDXYXYXY ItemXBlubbBla ItemYBlaBlubb 
so now we come to step two:

now we have to calculate the differenz about the item and us.
PHP Code:
int difx=x-Player[0].X;
int dify=y-Player[0].Y
so now it can be look like:
difx: 115
dify: 105
--
now calculate the range:
PHP Code:
float ItemRange=(difx*difx+dify*dify)*1.0;
DWORD ItemRangesqrtsqrt(ItemRange); 
The range is important....but this comes later.
sqrt(ItemRange) means you calculate the square root of the range.

so now calulate the move....
PHP Code:
unsigned char tempx=difx/ItemRangesqrt)*30;
unsigned char tempy=dify/ItemRangesqrt)*30
So now you have the steps that your character have to do in KalOnline.
It looks like this:
tempx: 23
tempy: 15

But that's not all....you have calculate the differenz about the item and you. You have calculate the Range and you make the square root about the Range. You have calculate the steps you have to do.

But you must Send a Packet to the Server, so the server knows that your Character have to move.

PHP Code:
SendDetour(0x15,"bbb",tempx,tempy,0); 
of course you have to send a packet to pick up the item:
PHP Code:
SendDetour(0x20,"ddd",ItemID,ItemX/32,ItemY/32 
So there are a different other things you have to add this is only a little help for you....cause i'm a noob in this but i want to help other noobs :D

sorry for bad english and thx for reading.
Your
Diamond.

p.s. auf deutsch:

für alle die jetzt meinen rumpöbeln zu müssen und meinen das wäre alles falsch etc....geht kacken und get a reallife.
ich habe dies hier alles selbst aufgeschrieben natürlich hatte ich hilfe und ja mein gott ich bin ein noob darin aber warum sollte ich nicht anderen helfen dürfen? falls was falsch ist sagt es bitte in einem freundlichen ton und helft mir auch beim lernen.

thx to: meak1, BorSti, bloodx, bakabug.
sry wenn ich jemanden vergessen habe :D
04/21/2009 20:13 BorSti#2
nice tut !

nimm lieber meinen namen raus ich verstehe das system einfach nicht ....

ich willl einfach ein paar schritte nach links gehen auf der x achse

wenn ich Sende 0x14 bbb 255 0 0 dann relog mache und coordinaten auslese sehe ich das ich nen schrit gemacht habe - also coordinaten haben sich verändert jetzt schicke ich nachm auslesen erneut das packet und da ist nun mein problem

anstatt wie inner source steht 0x14 bbb 255 0 0 zu senden sendet er 0x14 bbb 255 128 128 - gut dachte ich mir mache ich relog schaue ob er sich bewegt hat ....und was ist nö keinen zentimeter bewegt - ich starte kal neu sende packet reloge - ich habe mich bewegt sende packet erneut relog nope immer noch an gleicher stelle ....

warum macht der aus 0 128?!

gut weiter

ich habe rausgefunden dass wenn ich 0x14 bbb 1 0 0 sende ich einen schritt nach rechts mache bei 0x14 bbb 255 0 0 einen nach links - wie soll ich mir son abgefucktes coordinaten kreuz vorstellen ....

128 ya ist die hälft von 255 - deswegen könnte er vllt die 0 in 128 umwandeln - aber ich ralle es einfach nicht - was ist denn der größte schritt den ich nach links bzw nach rechts auf einer achse machen kann?!

ein weiterer gedanken ansatz
habe 255 durch 2 geteilt = 128 -im kopf gespeichert als 0 pubkt zum verstehen
dann habe ich gesagt 128/2 = 64 gut dachte ich mir und da ich nach links wollte ahbe ich dann 128+64 =192 gerechnet eingeben gesendet und ja hat geklappt habe mich nach links bewegt aber gleiches spiel wie oben einmal gesendet hat geklappt danach hat er wieder aus 0 128 gemacht und ich kam einfach net von der stelle


hoffe einer kann mir das system erklären
tut mir leid dass das nun nicht in english ist aber naja ....mehr als sry kann ich atm net sagen bin total kirre im kopf


also ich habs selber nun alles

für die x achse = 255 entspricht eine coordinate nach links
............................1 entspricht eine coordinate nach rechts

für y achse = 1 entspricht eine coordinate nach oben
.....................255 entspricht eine coordinate nach unten

obs nun doch wirklich größere schritte als 1 coodinate pro schritt gibt kp

wenn ihr gehen wollt macht ne schöne schleife und dann gib ihm!!!!
04/22/2009 12:26 meak1#3
musst du testen ich glaube 30 is das höchste, wenn du jez 255-30 rechnest, dann sendest 225 und 0, [X:30 Y:0] dann läuft er 30 nach links, ich habe es einfach so getestet am anfang das ich 0x15 sende und X und Y einzelnt eintippen kann dann habe immer bissl probiert und geguckt ;E

:::::::::::::::::::::::::::::::
:-------------------------:
:-------------------------:
:-----------#------------:
:-------------------------:
:-------------------------:
:::::::::::::::::::::::::::::::

# = Spieler
Wir senden jetzt
Packet(0x15,"bbb", 30,0);
X achse + 30
:::::::::::::::::::::::::::::::
:-------------------------:
:-------------------------:
:--------------------#---:
:-------------------------:
:-------------------------:
:::::::::::::::::::::::::::::::
------------------------------------------
dann senden wir mal
Packet(0x15,"bbb", 0,230);
:::::::::::::::::::::::::::::::
:-------------------------:
:-------------------------:
:-------------------------:
:-------------------------:
:--------------------#---:
:::::::::::::::::::::::::::::::

X achse - 25, weil 255 - 230 = 25
-------------------------------------------
okay dann senden wir mal
Packet(0x15,"bbb", 225,30);

:::::::::::::::::::::::::::::::
:-------------------------:
:-------------------------:
:---------------------#--:
:-------------------------:
:-------------------------:
:::::::::::::::::::::::::::::::
Y achse + 30
und - 30 weil, 255 - 225 = 30


:::::::::::::::::::::::::::::::
:-------------------------:
:-------------------------:
:-------------#----------:
:-------------------------:
:-------------------------:
:::::::::::::::::::::::::::::::

-----------------------------------------------
hoffe jez hast es bissl verstanden so bin mal off nachher wieder on so um 16 uhr
04/22/2009 15:54 BorSti#4
ich habs nun 100%

also vor weg die schritte werden mit Bytes gesteuert

1Byte ist maximal 256 oder 255 kp jetzt da bin ich noch unsicher ...

also in kal gibt es weder bei 0x14 noch bei 0x15 negative zahlen die gesendet werden deshalbt teilen sich plus und minus die 255

dh

255/2 = 128

128/2 = 64

alles was größer 128 ist ist die bewegung in minus richtung wo bei 128+64=192 der größte schritt ist und 255 der kleinste

alles was kleiner 128 ist ist die bewegung in plus richtung wobei 64 der größte schritt ist und 1 der kleinste

wenn man 0 sendet entspricht das 128 - also weder plus noch minus

[Only registered and activated users can see links. Click Here To Register...]

erklärung zum bild die zahlen untereinander sind nur die x komponenten aus den 3 schritten die ich gemacht habe

beim zweiten habe ich 6 schritte gemacht und beim letzten 2

falls fragen immer her damit glaube ich verstehe es nun
04/22/2009 16:48 syntex#5
Quote:
Originally Posted by BorSti View Post
ich habs nun 100%

also vor weg die schritte werden mit Bytes gesteuert

1Byte ist maximal 256 oder 255 kp jetzt da bin ich noch unsicher ...

also in kal gibt es weder bei 0x14 noch bei 0x15 negative zahlen die gesendet werden deshalbt teilen sich plus und minus die 255

dh

255/2 = 128

alles was größer 128 ist ist die bewegung in minus richtung wo bei 129 der größte schritt ist und 255 der kleinste

alles was kleiner 128 ist ist die bewegung in plus richtung wobei 127 der größte schritt ist und 1 der kleinste

wenn man 0 sendet entspricht das 128 - also weder plus noch minus

[Only registered and activated users can see links. Click Here To Register...]

erklärung zum bild die zahlen untereinander sind nur die x komponenten aus den 3 schritten die ich gemacht habe

beim zweiten habe ich 6 schritte gemacht und beim letzten 2

falls fragen immer her damit glaube ich verstehe es nun
Warum hörst du mir nicht zu :(

BYTE = 255.

Gute Arbeit Basti , ich habe volles vertrauen in dich :bandit:
04/22/2009 16:52 BorSti#6
Quote:
Originally Posted by syntex View Post
Warum hörst du mir nicht zu :(

BYTE = 255.

Gute Arbeit Basti , ich habe volles vertrauen in dich :bandit:
das vertrauen kannste wieder in die tonne treten denn wenn ich 129 sende als x macht der verfickte char nict mal nen mal nen scheiss hüpfer - einfach nichts - es klappt einfach nicht :S

ändere ich es wieder auf 255 rennt er wieder :S

ich kotz gleich meinen pc an

error wohl gefunden haupttext überarbeitet
04/22/2009 19:21 meak1#7
verstehst es jez immernoch nich willst damit sagen oder was is jez dein problem ;D?

edit: warum willst 129 senden is kla 255-129 = 126 und er kann nich so weit laufen bzw das packet is zu weit ich wollte dir ja erklären nen schritt oder so is 30 oder bissl mehr halt aber 126 so weit kann er niemals laufen ;D bzw nich auf einmal
04/22/2009 19:51 BorSti#8
Quote:
Originally Posted by meak1 View Post
verstehst es jez immernoch nich willst damit sagen oder was is jez dein problem ;D?

edit: warum willst 129 senden is kla 255-129 = 126 und er kann nich so weit laufen bzw das packet is zu weit ich wollte dir ja erklären nen schritt oder so is 30 oder bissl mehr halt aber 126 so weit kann er niemals laufen ;D bzw nich auf einmal
lies was ich oben gerechnet habe und du wirst das system von kal verstehen

kannst ja mal ne for schleife machen und 0x14 im x bereich von 128 bis 191 senden du wirst merken - er sendet aber du wirst dich net bewegen

max schritt ist 64
04/22/2009 20:33 meak1#9
ich habs schon lange verstanden wir versuchen dir das zu erklären aber ich weiß jez nich was willst jez?^^

edit: syntex helf mir mal XD, will das bei den mobs richtig X und Y addiert wird da kommt immer 5x das gleiche packet dann is der mob schon überweit auf X oder y <,<
04/22/2009 20:42 BorSti#10
kk lass stecken wenn du auch schon verstanden hast dass nur packete mit bytes nur von 1-64 und 192-255 einen effect auf deinen cha haben dann ist ya gut

tschuldige dass ich das system net gerallt habe!
04/22/2009 21:03 meak1#11
ja ich hatte einfach vor // printf halt // weggemacht und selbst geguckt wies funzt naja jez sind alle glücklich ;D, außer ich xD will endlich weitermachen aber wenn alle mobs soviel X und Y dazukriegen gehts nich ;<
04/23/2009 01:08 SFX-Cookie#12
ich..will das auch können. xD
08/02/2009 15:02 1level2high#13
hi leute, sieht ja alles ganz gut aus was ihr präsentiert, aber woher erfährt man das 0x15 fürs laufen zuständig ist und wie kriegt man raus für was z.b. 0x27 ist ?
08/02/2009 15:16 1level2high#14
noch ne frage, sry :)

Quote:
Originally Posted by kalhacker9000 View Post
PHP Code:
SendDetour(0x15,"bbb",tempx,tempy,0); 
was genau bewirkt das "bbb" ?
08/02/2009 15:37 bloodx#15
bbb = byte byte byte

und wie du rauskriegst was für was ist ? oO

wenn du ingame läufst bekommte 0x15/0x14 packets