|
You last visited: Today at 05:11
Advertisement
[Help] Bot programmiern
Discussion on [Help] Bot programmiern within the Kal Online forum part of the MMORPGs category.
03/23/2009, 19:39
|
#1
|
elite*gold: 0
Join Date: Dec 2006
Posts: 648
Received Thanks: 342
|
[Help] Bot programmiern
jo moin ersma,
ich hatte vor als nächstes mich an einem bot zu versuchen.
das heißt ein packetbot.
---
ich hab mir das so vorgestellt:
wenn ein mob erscheint (0x33) dann soll er zum mob hinlaufen (0x14) beim mob anhalten (0x15) und das mob attacken (0x0f). wenn 0x0f reinkommt wird der attackhack "in kraft" gesetzt und er setzt stagger hinterher (0x10), mob down>behead (0x10), items>pick (0x20). so weit so gut.
in der theorie einfach. in der praxis "schwer"...wenn ich die packets für laufen sniffe bekomme ich immer so etwas raus wie
PHP Code:
PACKET TYPE: 0x14 FORMAT: bbb 2: 0 3: 13 4:-4
nur leider kann ich mit den zahlen nix anfangen. keine coordinaten etc.
ich weiß auch nicht ob das so in der praxis hinhaut. in der theorie klingt das ja eig. vernünftig oder? mob erscheint, laufen, stehen, attacken, beheaden, picken, nächstes mob. weiß einer von euch was die zahlen bei 0x14, 0x15 bedeuten? währen es coordinaten hätt ich das mit den coords von den mobs gemacht sprich sowas (0x14, "bbb", MobX, MobY, MobZ???). oder so ähnlich.
wie gesagt, wenn einer von euch weiß was die bytes bei 0x14, 0x15 bedeuten wäre ich überglücklich wenn mir das einer verraten würde :P.
MfG
Diamond
|
|
|
03/23/2009, 19:57
|
#2
|
elite*gold: 0
Join Date: Oct 2007
Posts: 474
Received Thanks: 159
|
Quote:
Originally Posted by kalhacker9000
jo moin ersma,
ich hatte vor als nächstes mich an einem bot zu versuchen.
das heißt ein packetbot.
---
ich hab mir das so vorgestellt:
wenn ein mob erscheint (0x33) dann soll er zum mob hinlaufen (0x14) beim mob anhalten (0x15) und das mob attacken (0x0f). wenn 0x0f reinkommt wird der attackhack "in kraft" gesetzt und er setzt stagger hinterher (0x10), mob down>behead (0x10), items>pick (0x20). so weit so gut.
in der theorie einfach. in der praxis "schwer"...wenn ich die packets für laufen sniffe bekomme ich immer so etwas raus wie
PHP Code:
PACKET TYPE: 0x14 FORMAT: bbb
2: 0
3: 13
4:-4
nur leider kann ich mit den zahlen nix anfangen. keine coordinaten etc.
ich weiß auch nicht ob das so in der praxis hinhaut. in der theorie klingt das ja eig. vernünftig oder? mob erscheint, laufen, stehen, attacken, beheaden, picken, nächstes mob. weiß einer von euch was die zahlen bei 0x14, 0x15 bedeuten? währen es coordinaten hätt ich das mit den coords von den mobs gemacht sprich sowas (0x14, "bbb", MobX, MobY, MobZ???). oder so ähnlich.
wie gesagt, wenn einer von euch weiß was die bytes bei 0x14, 0x15 bedeuten wäre ich überglücklich wenn mir das einer verraten würde :P.
MfG
Diamond
|
du brauchst die mobid auch dazu sonst wird er nicht atken bzw weiss nicht was
|
|
|
03/23/2009, 20:10
|
#3
|
elite*gold: 0
Join Date: Dec 2006
Posts: 648
Received Thanks: 342
|
ja ich weiß das ich die mobID brauch :P das ist ja kein problem....
unter case 'd'
mobID = temp
mhmm...omg mir fällt nich ein was das sein könnte xD ... und das ist eig. das wichtigste/schwierigste...der rest ist ja nich wirklich schwer
edit:
ich werde das jetzt mal wie bei pick item versuchen mit X Coordinate/32 und Y Coordinate/32
edit2:
FAILED.....ka dann xD....
edit3:
ich weiß der code funktioniert nicht, ist nur damit ihr ne bessere vorstellung von dem habt was ich meine:
PHP Code:
if ((buf2[2] == 0x33) && (bot == 1))
{
SendPacket(0x14,"bbb",0,Mob[MonsterI].X/32,Mob[MonsterI].Y/32);
printf("walk now...vllt...oder so xD\n");
SendPacket(0x15,"bbb",0,Mob[MonsterI].X/32,Mob[MonsterI].Y/32);
SendPacket(0x0f,"bdd",1,mobID,lastweapon);
autopick=1;
autobehead=1;
if (type == 0x0f)
{
SendPacket(0x10,"bdd",3,1,mobID);
SendPacket(0x10,"bdd",3,1,mobID);
SendPacket(0x10,"bdd",3,1,mobID);
else
SendPacket(0x10,"bdd",3,1,mobID);
SendPacket(0x10,"bdd",3,1,mobID);
SendPacket(0x10,"bdd",3,1,mobID);
}
}
|
|
|
03/23/2009, 20:38
|
#4
|
elite*gold: 20
Join Date: Feb 2008
Posts: 993
Received Thanks: 173
|
 <-- beste hilfe
ich hoffe mal du probierst es aufn p server und nicht wieder gleich auf int
btw in deiner source sehe ich nicht dass du die x bzw y coordinaten oder die id überhaupt ausliest
außerdem ist die if schleife so falsch ...... du hast wieder die klammern vergessen ... und welchen sinn die gerade hat sehe ich auch nicht wenn normal attack dann stagger wenn nicht stagger ?!
|
|
|
03/23/2009, 20:40
|
#5
|
elite*gold: 0
Join Date: Dec 2006
Posts: 648
Received Thanks: 342
|
ja das mit x und y ist dabei hab ich nur nicht hier mit eingefügt
die klammern okay xD habs in editor reingeschrieben und schnell hier eingefügt weil ich nich so zeit habe.
ich versuche es aufm pserver....und hoffe dann es irgendwann aufm int durchsetzen zu können :P
danke für deine antwort ^^
|
|
|
03/23/2009, 20:57
|
#6
|
elite*gold: 0
Join Date: Dec 2006
Posts: 648
Received Thanks: 342
|
das ist echt gut BorSti...danke ^^ :P
ich werd mir das mal angucken, und nochmal, und nochmal, und soviele nochmals bis ichs richtig verstanden habe. und dann umschreiben auf meine bedürfnisse...xD...ist zwar dann wieder copy+paste...aber naja so lernt man auch.
releasen werde ich denke ich mal den bot eh nicht. wenn dann nich hier im forum wo es jeder kriegen kann.
das ist jetzt eher nur zum lernen gedacht eig.
|
|
|
03/23/2009, 23:07
|
#7
|
elite*gold: 281
Join Date: Oct 2007
Posts: 6,248
Received Thanks: 887
|
PHP Code:
PACKET TYPE: 0x14 FORMAT: bbb
2: 0
3: 13
4:-4
die 3 zahlen sind das wieviel du in x|y|z coords läuft
nehmen wir an du stehst @ coordinate 100|100|100
dann wird 0x15 0 13 -4 gesendet...
dann biste auf den coordinaten 100|113|96
ahja...@borsti
Quote:
|
außerdem ist die if schleife so falsch ......
|
das es ne if schleife gibt wär mir zumindest neu :P
aber den sinn seiner if anweisung versteh ich auch net ganz^^
Greeeeeetz
Mahatma
|
|
|
03/23/2009, 23:25
|
#8
|
elite*gold: 0
Join Date: May 2008
Posts: 106
Received Thanks: 11
|
Quote:
Originally Posted by Mahatma
PHP Code:
PACKET TYPE: 0x14 FORMAT: bbb
2: 0
3: 13
4:-4
die 3 zahlen sind das wieviel du in x|y|z coords läuft
nehmen wir an du stehst @ coordinate 100|100|100
dann wird 0x15 0 13 -4 gesendet...
dann biste auf den coordinaten 100|113|96
ahja...@borsti
das es ne if schleife gibt wär mir zumindest neu :P
aber den sinn seiner if anweisung versteh ich auch net ganz^^
Greeeeeetz
Mahatma
|
auch IF-verzweigung genannt .. aber if-schleife ... nenene ^^
|
|
|
03/23/2009, 23:56
|
#9
|
elite*gold: 20
Join Date: Feb 2008
Posts: 993
Received Thanks: 173
|
yayaya xD
if ist keine schleife? naja dann --- vergleicht mal ne normale schleife mit if hin oder her - bester vergleich ne do - while SCHLEIFE - name hin oder her :P funktion is die selbe
what ever - diamond neue fragen? immer her damit
|
|
|
03/24/2009, 13:39
|
#10
|
elite*gold: 0
Join Date: Dec 2006
Posts: 648
Received Thanks: 342
|
also ich find das ist verständlich xD ... erscheint ein mob (Type == 0x33) und der bot ist an (bot == 1) dann soll er erstmal laufen, behead an, pick an...das mob attacken. wenn er das mob normal attacked (0x0f) wird der attackhack angemacht xD ... ich mein das mit if kram hab ich nich so drauf wie gesagt war schnell einfachi n editor geschrieben  aber eig. dürfte das doch verständlich sein....oder? 
ich teste das jetzt alles mal aufm pserver...da sind so viele sachen drin die ich bis jetzt gesucht habe  danke
|
|
|
03/24/2009, 14:40
|
#11
|
elite*gold: 0
Join Date: Dec 2006
Posts: 648
Received Thanks: 342
|
oder hätte das so aussehen müssen?
PHP Code:
if ((buf2[2] == 0x33) && (bot == 1)) { SendPacket(0x14,"bbb",0,Mob[MonsterI].X/32,Mob[MonsterI].Y/32); printf("walk now...vllt...oder so xD\n"); SendPacket(0x15,"bbb",0,Mob[MonsterI].X/32,Mob[MonsterI].Y/32); SendPacket(0x0f,"bdd",1,mobID,lastweapon); autopick=1; else if(type == 0x0f) { SendPacket(0x10,"bdd",3,1,mobID); SendPacket(0x10,"bdd",3,1,mobID); SendPacket(0x10,"bdd",3,1,mobID); else SendPacket(0x10,"bdd",3,1,mobID); SendPacket(0x10,"bdd",3,1,mobID); SendPacket(0x10,"bdd",3,1,mobID); } }
|
|
|
03/28/2009, 11:31
|
#12
|
elite*gold: 0
Join Date: Dec 2006
Posts: 648
Received Thanks: 342
|
bot "geht"
also ich hab bis jetzt nur wenig sachen zum laufen gebracht ich hab viel aus bakabugs kalhack11 genommen...denke mal das sollte kein problem sein da ich eh nicht vorhabe einen bot zu releasen...jedenfalls fürs erste
das ist nur zum üben um das iwann aufm int realisieren zu können...
er zeigt alles an die x coordinaten, die y coordinaten alles
das ja auch noch kein problem
gut wenn ich jetzt in chat /start eingebe dann gibt er aus "Sucht Mob..." ... sobald ein mob erscheint steht da "läuft zu mob..." und dann schließt sich kal automatisch....kocp ist r10....kocp ist aus, hs ist aus. einer ne idee woran das liegen könnte? den walk to mob code hab ich von bakabug rausgenommen....
PHP Code:
if (botstate == 2) { //walk int difx=Player[0].X-Mob[target].X; int dify=Player[0].Y-Mob[target].Y; int difz=Player[0].Z-MyHeightDetour(Player[0].X,Player[0].Y); float range=(difx*difx+dify*dify)*1.0; if (sqrt(range) < 50.0) { botstate=3; //attack printf("attack the MOB..\n"); lastattack=GetTickCount()-800; } else { //move signed char tempx=-(difx/sqrt(range))*30; signed char tempy=-(dify/sqrt(range))*30; signed char tempz=-(difz/sqrt(range))*30; if (playerx > 1) { if (lastattack<GetTickCount()-200) { SendDetour(0x15,"Ubbb",last_u,tempx,tempy,tempz); lastattack=GetTickCount(); } } else SendDetour(0x15,"Ubbb",last_u,tempx,tempy,tempz); } }
edit:
ich glaub ich weiß warum....wenn das der fehler ist bestraf ich mich gleich selber für meine dummheit
da der server off ist kann ich das nich testen:
PHP Code:
#include <math.h>
ka ob das jetzt was damit zu tun hat  math interpretier ich als "mathe" sprich wenn er playerx/mobx (etc) ausrechnet.
ka ob ich da jetzt richtig liege
|
|
|
03/28/2009, 13:05
|
#13
|
elite*gold: 20
Join Date: Feb 2008
Posts: 993
Received Thanks: 173
|
Quote:
Originally Posted by kalhacker9000
PHP Code:
if (botstate == 2) { //walk int difx=Player[0].X-Mob[target].X; int dify=Player[0].Y-Mob[target].Y; int difz=Player[0].Z-MyHeightDetour(Player[0].X,Player[0].Y); float range=(difx*difx+dify*dify)*1.0; if (sqrt(range) < 50.0) { botstate=3; //attack printf("attack the MOB..\n"); lastattack=GetTickCount()-800; } else { //move signed char tempx=-(difx/sqrt(range))*30; signed char tempy=-(dify/sqrt(range))*30; signed char tempz=-(difz/sqrt(range))*30; if (playerx > 1) { if (lastattack<GetTickCount()-200) { SendDetour(0x15,"Ubbb",last_u,tempx,tempy,tempz); lastattack=GetTickCount(); } } else SendDetour(0x15,"Ubbb",last_u,tempx,tempy,tempz); } }
|
MyHeightDetour <--- die funktion hat mir immer nen close gebracht....frag mich aber nicht wie ich es gelöst habe zulange her
die beiden threads sind auch ganz hilfreich!
achja und öhm nimm mal bei "Ubbb" das U weg
also die z coordinate muss sich ändern - temp und masken haben schon nen gewissen höhen unterschied
|
|
|
03/28/2009, 13:18
|
#14
|
elite*gold: 0
Join Date: Dec 2006
Posts: 648
Received Thanks: 342
|
also erst wurde MyHeightDetour immer als Fehler angezeigt:
Funktion nimmt keine 2 Argumente oder sowas in der Art...dann hab ich
PHP Code:
int Naked MyHeightDetour(DWORD x,DWORD y)
{
__asm
{
push ebp
mov ebp, esp
sub esp, 94h
}
//show info
//printf("Height 0x%08x 0x%08x %f\n ",x,y);
__asm
{
jmp MyHeightBack //back to original
}
}
hinzugefügt und dann kam keine Fehlermeldung mehr....vllt hast du recht und es closed sich deswegen....ich guck ma ein wenig weiter...aber jetzt ersma bett bin total auf schmerzmittel gestern operiert worden xD....
danke für deine antwort ^^
edit:
mir ist aufgefallen das die Z: coordinate sich bei mir nie ändert...das heißt wenn erst 19630 für temp da steht und ich zu den masken laufe steht immer noch 19630 da
PlayerZ-MyHeightDetour(blablabla) dürfte dann ja fürn arsch sein oder?
allgemein iwi versteh ich den sinn nicht ganz...ich werde mir den code wohl ncoh ein paar mal durchlesen müssen ...
-->bett
|
|
|
03/29/2009, 13:21
|
#15
|
elite*gold: 0
Join Date: Dec 2006
Posts: 648
Received Thanks: 342
|

laufen tut er mittlerweile....bloß so schnell das ich innerhalb von 3 sekunden über ganz kal laufe
aber sehen tu ich das nich
hab anstatt Player[0].Z-MyHeightDetour(blabla) einfach nur Player[0].Z-(blabla) genommen. jetzt ist aber das problem das sich die Z. Koordinate nie verändert. Wenn ich in temp stehe und mich nach naroot teleportiere steht immer noch 19630 da....auch bei /test
PHP Code:
if ((i==1)&&((type==0x14)||(type==0x15)))
Player[0].X+=(signed char)va_arg( args, DWORD);
if ((i==2)&&((type==0x14)||(type==0x15)))
Player[0].Y+=(signed char)va_arg( args, DWORD);
if ((i==3)&&((type==0x14)||(type==0x15)))
Player[0].Z+=(signed char)va_arg( args, DWORD);
bitte bitte bitte helft mir ;D
PHP Code:
printf("Search MOB..\n"); //SEARCH NEARES MOB ! int nearest=65530000; int id=-1; int i; for (i=0;i<5;i++) if (Mob[i].X != 0) { //MOB HERE CALC NEAR ! int difx=start_x-Mob[i].X; int dify=start_y-Mob[i].Y; // int first=difx*difx; int second=dify*dify; int range=first+second; if (nearest > range) { id=i; nearest = range; } }
if (id!=i) { //MOB FOUND target=id; botstate=2; //walk to it ! printf("Walk to MOB..\n"); } } if (botstate == 2) { //WALK TO SELECTED MOB !! int difx=Player[0].X-Mob[target].X; int dify=Player[0].Y-Mob[target].Y; int difz=Player[0].Z-(Player[0].X,Player[0].Y); float range=(difx*difx+dify*dify)*1.0; if (sqrt(range) < 50.0) { botstate=3; printf("attack the MOB..\n"); lastattack=GetTickCount()-800; } else { signed char tempx=-(difx/sqrt(range))*30; signed char tempy=-(dify/sqrt(range))*30; signed char tempz=-(difz/sqrt(range))*30; if (playerx > 1) { if (lastattack<GetTickCount()-200) { SendDetour(0x15,"Ubbb",last_u,tempx,tempy,tempz); lastattack=GetTickCount(); } } else SendDetour(0x15,"Ubbb",last_u,tempx,tempy,tempz); } }
|
|
|
All times are GMT +1. The time now is 05:13.
|
|