[Question]Walk with packets.

04/21/2009 09:22 meak1#31
mach doch einfach die send packets an und guck selber?
04/21/2009 09:32 kalhacker9000#32
so mit items klappt ganz gut....er läuft zu den items .... zwar läuft er an mir vorbei wenn ich ein item nochma droppe was eig. nich sein kann da die range ja anders ist aber naja das fix ich noch...hauptsache er läuft :)
so jetzt hab ich gestern nacht angefangen den bot zu schreiben also für mobs....prob ist nur sobald ein mob erscheint schließt sich kal automatisch....hab aber keine heightdetour funktion drinne :D ich guck gleich mal....werde jetzt ersma eine rauchen gehen und mir was zu essen holen

guten morgen an den rest
04/21/2009 10:04 bloodx#33
55 8B EC 81 EC 94 00 00 00 D9 45 08 D8 35 E0 DC 66 00 D9 5D 08 <- müsste Hight Detour sein...
04/21/2009 10:13 BorSti#34
Quote:
Originally Posted by meak1 View Post
mach doch einfach die send packets an und guck selber?
hab ich - naja dachte ich würde wieder nen fehler machen - aber scheint echt so zusein

255 bzw 1 ist eine bewegung in -x bzw x richtung und somit 1ne coordinate
04/21/2009 10:51 kalhacker9000#35
Quote:
Originally Posted by bloodx View Post
55 8B EC 81 EC 94 00 00 00 D9 45 08 D8 35 E0 DC 66 00 D9 5D 08 <- müsste Hight Detour sein...
jo thx....eigentlich brauch ich keine oder?
1. teste ich es eh erst auf pserver da auf int immer noch nix geht bei mir :D kp was ich ändern muss damit die packets wieder ausgegeben werden
2. heightdetour wird doch nur für die z.coordinate gebraucht oder? jedenfalls seh ich das aus bakabugs kalhack11 raus...und anstatt z nehm ich einfach 0....läuft zwar irgendwann in den boden aber naja egal.

ich hab kp
mein problem ist eher der code glaub ich....hab iwas zusammengewürfelt:
PHP Code:
                    DWORDcoordpointerX = (DWORD*)0x006F3840;
                    
DWORDcoordpointerY = (DWORD*)0x006F3840;
                    
DWORD PX;
                    
DWORD PY;
                    
MemcpyEx((DWORD)&PX,(((DWORD)*coordpointerX)+0x0000463C),4);
                    
MemcpyEx((DWORD)&PY,(((DWORD)*coordpointerY)+0x00004644),4);
int difx=Mob[i].X-PX;
int dify=Mob[i].Y-PY;
float MobRange=(difx*difx+dify*dify)*1.0;
DWORD MobRangesqrt=sqrt(MobRange);
    
target=id;
    
MessageBoxA(NULL,"Mob found...Walk to mob...\n","Mob found",0);
    
printf("Target found...\n");
    
printf("Target stats: X %d Y %d HP %d\n",Mob[target].X,Mob[target].Y,Mob[target].HP);
    
printf("Continue to step 2...\n");




unsigned char tempx=(double(difx)/MobRangesqrt)*30;
unsigned char tempy=(double(dify)/MobRangesqrt)*30;



DWORD lastattack=GetTickCount();
if (
lastattack=GetTickCount()-800)
{
int difx=Mob[target].X-PX;
int dify=Mob[target].Y-PY;
float MobRange=(difx*difx+dify*dify)*1.0;
DWORD MobRangesqrt=sqrt(MobRange);
                            if ((
MobRangesqrt 55.0)&&(MobRangesqrt 200.0))
                            {
                                
SendDetour(0x15,"bbb",tempx,tempy,0);
                                
printf("walk to mob..\n");
                                
lastattack=GetTickCount();
                            }
                            else
                            {
                                if (
MobRangesqrt 55.0)
                    {
printf("Attack mob...\n");
SendDetour(0x0f,"bdd",1,Mob[target].MID,lastweapon);
                                }
                                else
                                {
if (
MobRangesqrt 200.0)
{
printf("Ignore mob..\n");
}
                                }
                            }
}



x und y coordinate mit pointer da das andere ungenau ist und deswegen die falsche range rauskommt....immer wenn ich mich geportet habe blieben die anfangscoordinaten erhalten.
keine ahnung warum. deswegen pointer und das geht super.

der code ist vermutlich voll fürn arsch oder?
04/21/2009 10:56 bloodx#36
kalhacker guck meine source an von auto login an da ist send funktion drinne die geht ^^
04/21/2009 11:00 kalhacker9000#37
Quote:
Originally Posted by bloodx View Post
kalhacker guck meine source an von auto login an da ist send funktion drinne die geht ^^
hab mir schon runtergeladen aber noch nich angeguckt....danke werd ich machen :P
kann man hier den namen eig. ändern? ich hasse den namen kalhacker9000 den hab ich 2006 benutzt wo ich....13 oder 14 war :D ....
04/21/2009 11:18 kalhacker9000#38
also das geht nich aufm int
Deine Sendfunktion:
PHP Code:
DWORD Send_To_Server_Main_ SearchPattern("55 8B EC 83 EC 18 83 3D x x x x 00 74 07 33 C0 E9 x x x x 8A 45 08"
                                      
,0x00400000,0x007FFFFF);
DWORD Send_To_Server_Main  SearchPattern("55 8B EC 83 EC 18 83 3D x x x x 00 74 07 33 C0 E9 x x x x 8A 45 08"
                                      
,Send_To_Server_Main_+1,0x007FFFFF);

DWORD Send_To_Server_Back  Send_To_Server_Main 0x06;

int Naked Send_To_Server(BYTE type,LPCSTR format,...)
{
    
__asm
    
{
        
push ebp
        mov ebp
esp
        sub esp
18h
    

"Meine":
PHP Code:
DWORD SniffPacketMain_ SearchPattern("55 8B EC 83 EC 18 83 3D x x x x 00 74 07 33 C0 E9 x x x x 8A 45 08",0x00400000,0x007FFFFF);
DWORD SniffPacketMain  SearchPattern("55 8B EC 83 EC 18 83 3D x x x x 00 74 07 33 C0 E9 x x x x 8A 45 08",SniffPacketMain_+1,0x007FFFFF);
DWORD SniffPacketBack  SniffPacketMain_ 0x06;
DWORD SendPacketMain_ SearchPattern("55 8B EC 83 EC 18 83 3D x x x x 00 74 07 33 C0 E9 x x x x 8A 45 08",0x00400000,0x007FFFFF);
DWORD SendPacketMain  SearchPattern("55 8B EC 83 EC 18 83 3D x x x x 00 74 07 33 C0 E9 x x x x 8A 45 08",SendPacketMain_+1,0x007FFFFF);
DWORD SendPacketBack  SendPacketMain 0x06;
char buf2;
DWORD RecvMain SearchPattern("55 8B EC 83 EC 08 89 4D F8 8B 45 14 50 8B 4D 10 51 8B 55 0C 52 8B 45 08 50",0x00400000,0x007FFFFF);//0x0053E1F0;
DWORD RecvBack RecvMain 0x19;

char SniffPacketText[] = "PACKET TYPE:0x%02x FORMAT:%s\n";
int Naked SendPacket(BYTE type,LPCSTR format,...)
{
    
__asm
    
{
        
push ebp
        mov ebp
esp
        sub esp
18h
    

und wenn ich mich nich irre bräuchte ich die recv funktion da die send funktion ja geht. ich hab alle // vor printf weggemacht aber er zeigt mir ja keine packets mehr an. das dürfte dann ja an der recv funktion liegen richtig?
04/21/2009 12:08 5had0w#39
PHP Code:
// send.cpp

bool autologin true;
int Naked UserSendPacketToServer(BYTE sent,LPCSTR format,...)
{
    
__asm
    
{
        
push ebp
        mov ebp
esp
        sub esp
18h
    
}


    if (
SNF1)
    {
        
printf(SniffPacketText,sent,format);
    }

    
va_list args;
    
va_start(argsformat);

    
int i;
    
charsomething;
    for (
i=0;i<(signed)strlen(format);i++)
    {
        switch (
format[i])
        {
            case 
'U':
                
temp=va_argargsDWORD);
                
last_u=temp;
                if (
SNF6)
                {
                    
printf(" %d: %d\n",i+1,va_argargsDWORD));
                }
            break;

            case 
'b':
                
temp =(DWORD)va_argargsDWORD);
                if (
SNF2)
                {
                    
printf(" %d: %d\n",i+1,temp);
                }
            break;

            case 
'd':
                
temp =(DWORD)va_argargsDWORD);
                if (
SNF3)
                {
                    
printf(" %d: %d\n",i+1,temp);
                }

                if ((
i==0)&&(sent 0x22)&&(trade))
                {
                    
PlayerID temp;
                    
UserSendPacketToServer(0x23,"bd",01,PlayerID);
                }

                if ((
== 0)&&(sent 0x2c)&&(party))
                {
                    
PlayerID temp;
                    
UserSendPacketToServer(0x2d,"bd",01,PlayerID);
                }

                if ((
i==0)&&(sent 0x50)&&(duel))
                {
                    
PlayerID temp;
                    
UserSendPacketToServer(0x51,"bd",01,PlayerID);
                }

                if ((
usedrop)&&(sent 0x1a)&&(i==0))
                {
                    
dropID temp;
                }

                if ((
i==0)&&(sent 0x1a))
                {
                    
dropID temp;
                }

                if ((
useweapon)&&(sent 0x41)&&(i==0))
                {
                    
wearID temp;
                }

                if(
sent 0x41)
                {
                    
wearID temp;
                }
            break;

            case 
'w':
                
temp=va_argargsDWORD);
                if (
SNF4)
                {
                    
printf(" %d: %d\n",i+1,(WORD)va_argargsDWORD));
                }
            break;

            case 
's':
                if (
SNF5)
                {
                    
printf(" %d: %s\n",i+1,something);
                }
                
something=va_argargschar*);
            break;
        }
    }

    
va_end(args);

    
__asm
    
{
        
jmp UserSendPacketToServerBack
    
}



should work now ...

hf.
04/21/2009 13:06 bloodx#40
kann dir nacher ne ganze send geben...bin grade @freundin...
04/21/2009 13:42 kalhacker9000#41
alles klar thx
04/21/2009 15:30 meak1#42
PHP Code:
if ((packet[2] == 0x24) || (packet[2] == 0x25))
{
//mob move..
DWORD id;
memcpy((void*)&id,(void*)((DWORD)packet+3),4);
int i;
for (
i=0;i<500;i++)
{
//check if x =0
if (Mob[i].MID == id)
{
signed char x,y/*,z*/=0;
memcpy((void*)&(x),(void*)((DWORD)packet+3+4),1);
memcpy((void*)&(y),(void*)((DWORD)packet+3+4+1),1) ;
//memcpy((void*)&(z),(void*)((DWORD)packet+3+4+1+1), 1);
Mob[i].X+=x;
Mob[i].Y+=y;
//Player[i].Z+=z;
break;
}
}

ich habe mal mit printf geguckt, da kommen zuviele packets, also is wie bei mobs, dass 1 mob zu oft kommt, das habe ich jez geregelt bekommen aber das hier kriege ich nich hin, da kommt zb. wenn sich der mob bewegt 5x sein move packet, dann schreibt er 5x X bei dem mob dazu <,< dann hätte ich endlich alles, das ich endlich anfangen kann den bot richtig zu schreiben ;E, hm glaube es geht so wie ich es bei mob appeared gemacht habe aber wahrscheinlich bewegen sich soviele mobs das er das nich bei allen so schnell löschen kann wenn er zuviel X addiert ;<

@Bloodx meinst die searchpattern geht noch weil die is ja schon überalt also hat sich nich geändert oder? ich guck mal nochmal ;E

@kalhacker ich weiß nich ob es mit pointer geht weil clientside, stehst du noch da bzw wenn man dann eingibt /coordinates kommen die wo man gerade steht clientside aber aufm server stehst schon woanders ,deswegn kp ob es mit pointer geht ;O
04/21/2009 17:20 5had0w#43
meak dafür gibts das packet für synch client with server.
04/21/2009 17:35 kalhacker9000#44
@meak
ähm also es geht eig. recht gut was heißt recht gut es geht perfekt....besser als Player[0].
...naja einziges makel ist halt das er wenn er losläuft immer nur 2-3 schritte macht und dann einfach stehen bleibt...
zweites makel ist das wenn ich (wenn er schon gelaufen ist) und ich droppe noch ein item das er an mir vorbeiläuft....vllt hängt das doch damit zusammen.
naja hauptsache er läuft und er soll ja auch keine riesen entfernungen zurücklegen sondern einfach nur ein wenig laufen damit er die anderen items bekommt.

jetzt zum eigentlichen thema
wie krieg ich das jetzt mit dem bot hin?
denn
PHP Code:
if (packet[2] == 0x33)
{
//mob apear

int i;
for (
i=0;i<500;i++)
{
//check if x =0
if (Mob[i].== 0)
{
DWORD id;
memcpy((void*)&id,(void*)((DWORD)packet+3+2),4);
Mob[i].MID=id;
memcpy((void*)&(Mob[i].Classe),(void*)((DWORD)packet+3),2);
memcpy((void*)&(Mob[i].X),(void*)((DWORD)packet+3+4+2),4);
memcpy((void*)&(Mob[i].Y),(void*)((DWORD)packet+3+4+2+4),4);
memcpy((void*)&(Mob[i].HP),(void*)((DWORD)packet+3+4+2+4+4+1+1),2);
//printf("Mob: %d X %d Y %d Z %d HP %d\n",Mob[i].Classe,Mob[i].X,Mob[i].Y,Mob[i].Z,Mob[i].HP);
mobsx+=1;
if (
boton == 1
{
                    
DWORDcoordpointerX = (DWORD*)0x006F3840;
                    
DWORDcoordpointerY = (DWORD*)0x006F3840;
                    
DWORD PX;
                    
DWORD PY;
                    
MemcpyEx((DWORD)&PX,(((DWORD)*coordpointerX)+0x0000463C),4);
                    
MemcpyEx((DWORD)&PY,(((DWORD)*coordpointerY)+0x00004644),4);
int difx=Mob[i].X-PX;
int dify=Mob[i].Y-PY;
float MobRange=(difx*difx+dify*dify)*1.0;
DWORD MobRangesqrt=sqrt(MobRange);
    
target=id;
    
printf("Target found...\n");
    
printf("Target stats: X %d Y %d HP %d\n",Mob[target].X,Mob[target].Y,Mob[target].HP);
    
printf("Continue to step 2...\n");




unsigned char tempx=(double(difx)/MobRangesqrt)*30;
unsigned char tempy=(double(dify)/MobRangesqrt)*30;



DWORD lastattack=GetTickCount();
if (
lastattack=GetTickCount()-800)
{
int difx=Mob[target].X-PX;
int dify=Mob[target].Y-PY;
float MobRange=(difx*difx+dify*dify)*1.0;
DWORD MobRangesqrt=sqrt(MobRange);
                            if ((
MobRangesqrt 55.0)&&(MobRangesqrt 200.0))
                            {
                                
SendDetour(0x15,"bbb",tempx,tempy,0);
                                
printf("walk to mob..\n");
                                
lastattack=GetTickCount();
                            }
                            else
                            {
                                if (
MobRangesqrt 55.0)
                    {
printf("Attack mob...\n");
SendDetour(0x0f,"bdd",1,Mob[target].MID,lastweapon);
                                }
                                else
                                {
if (
MobRangesqrt 200.0)
{
printf("Ignore mob..\n");
}
                                }
                            }
}



funktioniert nicht. er rechnet zwar die range aus und es erscheint eine message wenn ein mob zu weit weg ist sprich (Ignore mob...) aber sobald eins in seine range kommt kommen bestimmt 1000 0x15 packets oder kal schließt sich sofort.
man ich will das das endlich hinhaut :D

halt mir fällt gerade noch ein das ich ja sowas wie bei kalhack11 einbauen müsste(?).
sprich
nearest=6350000 oder was die zahl war und dann
PHP Code:
if (nearest range
{
printf("Search again..\n");
id=i;
}
else if (
id=-1)
{
boton=2;
printf("Walk to mob\n");

04/21/2009 18:40 Grabgewalt#45
Kann mir bitte mal jemand erklären wozu GetTickCount() bei den sources immer verwendet wird?
Und was dann z.B. auch if (lastattack==GetTickCount()-800) heißt?

Laut msdn: "Retrieves the number of milliseconds that have elapsed since the system was started"

Aber was heißt das nun in diesem konkreten Fall?

@Kalhacker:
Mir fiel bei deinem code grad auf, dass du da in deiner if verzweigung = zu stehen hast.
Das soll doch sicherlich nicht sein oder?