Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Kal Online
You last visited: Today at 07:20

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Hilfe] Recive Packet (Achtung Noob)

Discussion on [Hilfe] Recive Packet (Achtung Noob) within the Kal Online forum part of the MMORPGs category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2008
Posts: 208
Received Thanks: 24
[Hilfe] Recive Packet (Achtung Noob)

Hallo,
nach zig Tagen Copy & Paste, Hilfe von Bloodx und hijax und mehr oder weniger Ahnung von C++ hab ich es geschafft Packete zu empfangen und zu versenden.
Das Senden funktioniert auch, d.h ich kann ich setzen (reicht mir).

Mit dem Empfangen sieht das noch ein wenig schlechter aus:
Ich empfange alle Packete, kann sie jedoch nur teilweise "auswerten". Zum Beispiel kann ich Drops in meiner Nähe aufheben:
Code:
//Item Drop
if (packet[2] == 0x36) 
{
	DWORD id,x,y;
	memcpy((void*)&id,(void*)((DWORD)packet+5),4);
	memcpy((void*)&x,(void*)((DWORD)packet+5+4),4);
	memcpy((void*)&y,(void*)((DWORD)packet+5+4+4),4);
	PacketSend(0x20,"ddd",id,x/32,y/32);
}
Das Funktioniert auch. Verstehe den Code auch (glaub ich). Nun mein Problem: Wieso x/32 bzw y/32?

Ich schaffe es aber nicht die Veränderungen der MP / HP "mitzuloggen":
Code:
if(packet[2] == 0x45)
{
	if (packet[3] == 0x08) //Mana
	{
		DWORD magicpoints;
		memcpy((void*)&magicpoints,(void*)((DWORD)packet+4),2);
		printf("MP changed [%d]\n",magicpoints);
	}
}
In Magicpoints steht sowas wie -424123542243 ...

1. Das was ich nicht Verstehe: DWORD benötigt 32 Bit (4 Byte). Wieso werden mit memcpy dann nur 2 Byte kopiert?

2. Werden alle 4 Byte weitere Infos zu dem Packet übertragen? Woher weis ich wieviele Infos bei z.b packet[2]=0x32 folgen? Kann ich das irgendwie herrausfinden oder muss man das wissen?

Danke für jede Mühe
Doofy is offline  
Old 02/11/2009, 14:24   #2
 
elite*gold: 0
Join Date: Oct 2007
Posts: 856
Received Thanks: 35
x/32 bzw y/32 ist glaub ich die weite die du aufhebst. x rechts/links y oben /unten bin mir nciht sicher vermute ich aber.
Slade100 is offline  
Old 02/11/2009, 14:29   #3
 
elite*gold: 0
Join Date: Feb 2009
Posts: 172
Received Thanks: 70
Schau' mal, ob die Coordinaten [Ingame] mit den Coordinaten [Hack] übereinstimmen. ;-)
xUsername is offline  
Old 02/11/2009, 14:35   #4
 
syntex's Avatar
 
elite*gold: 46
Join Date: Mar 2006
Posts: 2,589
Received Thanks: 1,198
mp=*(WORD*)&buf[4];
syntex is offline  
Thanks
1 User
Old 02/11/2009, 14:36   #5
 
BorSti's Avatar
 
elite*gold: 20
Join Date: Feb 2008
Posts: 993
Received Thanks: 173
Quote:
Originally Posted by Doofy View Post
Code:
//Item Drop
if (packet[2] == 0x36) 
{
	DWORD id,x,y;
	memcpy((void*)&id,(void*)((DWORD)packet+5),4);
	memcpy((void*)&x,(void*)((DWORD)packet+5+4),4);
	memcpy((void*)&y,(void*)((DWORD)packet+5+4+4),4);
	PacketSend(0x20,"ddd",id,x/32,y/32);
}
x/32 und y/32 weil y und x ingame coordinaten sind - falls du mal ne genmonster geschrieben hast weisst du dass du die ingame coordinaten durch 32 teilen musst damit sie an der ausgewählten position spawnen - so und hier ist das so dass die ingamge coordinaten ausm speicer kopiert werden und dann durch 32 geteilt werden damit du auch genau an dieser position pickst - schau dir mal das normale pick packet an dann siehste es - nen weiteres beispiel wäre zb storm command welche moep mal verfasst hat



Quote:
Originally Posted by Doofy View Post
Code:
if(packet[2] == 0x45)
{
	if (packet[3] == 0x08) //Mana
	{
		DWORD magicpoints;
		memcpy((void*)&magicpoints,(void*)((DWORD)packet+4),2);
		printf("MP changed [%d]\n",magicpoints);
	}
}
Jop khi source xD - hatte / habe auch hin und wieder das problem dass ich ne komische zahl bekomme - nimm mal magicpoints als integer variable ( so ist es auch inner khi source) - dann bekommste hin und wieder die richtige zahl - selbe gilt für hp - warum da hin und wieder nen fehler bereich ist weiss ich auch noch nicht
BorSti is offline  
Old 02/11/2009, 15:11   #6
 
meak1's Avatar
 
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,126
komme auch nich so kla mit packets da bla if packet[2] == 0x?? <- immer kp was zu was gehört also wenn du 32 is das man weiß das das spieler appear heißt undso

edit : gibs da nich viell. sone liste ;E?
meak1 is offline  
Old 02/11/2009, 15:22   #7
 
elite*gold: 0
Join Date: Feb 2009
Posts: 172
Received Thanks: 70
Quote:
Originally Posted by Syntex
0x0b: == CPlayer::GameStart ( BOOL set - dwZcoord )
0x0c: == if (SYSTEM_GUILDWAR_SIEGEGUN) jumps always to return ( dummy )
0x0d: == if (SYSTEM_GUILDWAR_SIEGEGUN) jumps always to return ( dummy )
0x0e: == if (SYSTEM_GUILDWAR_SIEGEGUN) jumps always to return ( dummy )
0x0f: == CPlayer::Attack
0x10: == CPlayerSkill::ExcuteSkill
0x11: == CPlayer::ProcessMsg ( chat )
0x12: == CPlayer::OnTeleport ( set height after respawn / town teleport )
0x13: == CPlayer::Write 0x1D ( select char )
0x14: == CSMap::MovePlayer
0x15: == CSMap::MovePlayer and stop
0x16: == CNPC::Reply
0x17: == CCastle::GetCastle ( get npc tax )
0x18: == CPlayer::BuyItemEx
0x19: == CPlayer::SellItem/
0x1a: == CPlayer:ropItem
0x1b: == CPlayer::Write 0x5D ( quit game )
0x1c: == CPlayer::ShowOffItem ( put into tradewindow is meant^^ )
0x1d: == CChar::WriteInSight packet 0x3D ( animation state )
0x1e: == CPlayer::GetNeedPoint (set stat point)
0x1f: == CPlayer::Rest GState 0x04
0x20: == CSMap::PickUpItem
0x21: == CPlayer::UseItem
0x22: == CPlayer::AskTrade
0x23: == CPlayer::OnAskTrade
0x24: == CPlayer::CancelTrade
0x25: == GameServ.CPlayer::Revival
0x26: == if (SYSTEM_GUILDWAR_SIEGEGUN) CPlayer::SiegeGunProcess ( FALSE )
0x27: == if (SYSTEM_GUILDWAR_SIEGEGUN) CPlayer::SiegeGunProcess ( TRUE )
0x28: == if (SYSTEM_GUILDWAR_SIEGEGUN) CPlayer::SiegeGunControl
0x29: == CPlayerSkill::LearnSkill
0x2a: == CPlayerSkill::SkillUp
0x2b: == CPlayerSkill::PreSkill ( SkillAnimation )
0x2c: == CPlayer::AskParty
0x2d: == CPlayer::OnAskParty
0x2e: == CGuild
0x2f: == CPlayer::LeaveParty
0x30: == CPlayer::ExileParty ( 30 - dwPlayerID -> kick player)
0x31: == CPlayer::PutInStorage
0x32: == CPlayer::PutOutStorage
0x33: == CQuest::CallProcess ( 33 ** 00 2e 23 jobchange ) (33 03 00 71 17 fishing -> GState 0x20)
0x34: == CPlayer::StorageInfo
0x35: == always jumps 2 return.. dumb! ( was bird event )
0x36: == if (SYSTEM_GUILDWAR) CAuthSocket::Write 0x10 -> CDBSocket::Write 0x4D
0x37: == Invalid packet type at CPlayer::Process()
0x38: == CPlayer::SaveRevivalPt ( town statue )
0x39: == CPlayer::EnchantItem ( tali over item )
0x3a: == CPlayer::SetStallInfo ( stall = shop^^, info = sell item )
0x3b: == CPlayer::RemoveItem use StoneOfJob (not for Naraeha/Hanin)
0x3c: == CPlayer::RemoveItem use HighGradeSoC (not for Naraeha/Hanin)
0x3d: == CChar::WriteInSight packet 0x18 (its dance)
0x3e: == CPlayer::TradeAgreed
0x3f: == CPlayer::TrashItem ( destroy )
0x40: == CPlayer::FRDProcess ( FRD= friend stuff )
0x41: == CPlayer::PutOnItem
0x42: == CPlayer::PutOffItem
0x43: == CPlayer::SwitchStall ( switch state.. 0 = end, 1 = start )
0x44: == CPlayer::ProcessEvent (GambleSystem (dice) not running on hanin/naraeha)
0x45: == remove GState 0x60 (10 20 30 40 50 60) send2client 2e pID GState (stop fishing / cooking)
0x46: == CPlayer::GetStallInfo
0x47: == CPlayer::BuyItemAtStall
0x48: == CPlayer::EventSetMora if (EVENT_SPONSOR) packet 0x0E - (MasterOfPaper-Rock-Scissores) 4303 start
0x49: == CPlayer::IsCooking GState 0x40
0x4a: == CPlayer::RevivalSkill ( Accept MageRevive )
0x4b: == CPlayerSkill::Redistribute -> CPlayer::RemoveItem ( use StoneOfChance)
0x4c: == CPlayer::ExchangeBoddariToItem ( 4c02 - AddEState 0x200 | 4c00 if EState 0x200 use GoldenLuckyPouch | 4c** (not 02) use Silver~
0x4d: == CPlayer::ExchangeDanjiToItem ( 4d02 - AddEState 0x400 | 4d00 if EState 0x400 use GoldenPot | 4d** (not 02) use Silver~
0x4e: == CPlayer::InitStat use StoneofBirth
0x4f: == if (SYSTEM_LOCAL_TEST) CPlayer::PKBulletinInfoSend (GetAssaList)
0x50: == CPlayer::AskPvP
0x51: == CPlayer::OnAskPvP
0x52: == CPlayer::Transform
0x53: == CPlayer::Bless
0x54: == CPlayerSkill::ExcuteTransformSkill
0x55: == CPlayer::MLMProcess Teacher/Student
0x56: == Invalid packet type at CPlayer::Process()
0x57: == Invalid packet type at CPlayer::Process()
0x58: == BOOL(byte) Parameter[0] remove/add GState 0x800
0x59: == CPlayer::Shortcut ( skillbar )
0x5a: == CPlayer::SetMyTelPt ( use saving / moving scroll )
0x5b: == CPlayer::UpgradeItem ( 0,id -> make revs | 1,id -> increase % | 2,id -> upgrade )
0x5c: == CPlayer::MAILProcess ( message system )
0x5d: == CMonster::FindMonster as UNIT ( cancel opening woodenbox )
0x5e: == CMonster::FindMonster as UNIT ( open woodenbox )
0x5f: == CPlayer::ChangeGuildName ( GuildNameChangeScroll )
0x60: == CPlayer::ChangePlayerName ( NameChangeScroll )
0x61: == CPlayer::NPCProcess ( goto fishisle / D4 door (as npc) open oO? )
0x62: == CPlayer::EnforceItem lvl 1 | CPlayer::MixItem | CPlayer::EnforceItem lvl 2
0x63: == [BeadOfFire - dwId] [armor - dwId]
Wenn Syntex was dagegen hat, dann schreib's mir. ^.^

Ganz neben: Suchfunktion? ;-)

Liebe Grüße,
hijax.
xUsername is offline  
Thanks
2 Users
Old 02/11/2009, 15:51   #8
 
syntex's Avatar
 
elite*gold: 46
Join Date: Mar 2006
Posts: 2,589
Received Thanks: 1,198
Quote:
Originally Posted by hijax View Post
Wenn Syntex was dagegen hat, dann schreib's mir. ^.^

Ganz neben: Suchfunktion? ;-)

Liebe Grüße,
hijax.
Diese Liste stammt von Sandro + Ist nur Send kein RECV.
syntex is offline  
Thanks
1 User
Old 02/11/2009, 17:46   #9
 
meak1's Avatar
 
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,126
jojo thx schonmal und woher weiß ich was ich an die 0x?? senden kann ? also woher ich immer weiß das man x und y dazu macht und welche zeile undso ;E oda halt zahl für animation oda für skill

leida sehe send packets nich nur wenn ich selba was sende ;s
meak1 is offline  
Old 02/11/2009, 17:56   #10
 
meak1's Avatar
 
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,126
jojo thx schonmal und woher weiß ich was ich an die 0x?? senden kann ? also woher ich immer weiß das man x und y dazu macht und welche zeile undso ;E oda halt zahl für animation oda für skill

edit: sry 4 doppel post scheiß inet -.-
meak1 is offline  
Old 02/11/2009, 19:42   #11
 
Zogga's Avatar
 
elite*gold: 20
Join Date: Jan 2007
Posts: 568
Received Thanks: 227
Zogga is offline  
Thanks
3 Users
Old 02/11/2009, 22:50   #12
 
elite*gold: 0
Join Date: Dec 2008
Posts: 208
Received Thanks: 24
Quote:
Originally Posted by syntex View Post
mp=*(WORD*)&buf[4];
danke funktioniert...
aber geht das nich irgendwie auch mit memcpy?
versuche mich daran aber irgendwie.... immer nen fehler
so gehts:
Code:
WORD magicpoints=*(WORD*)&packet[4];
1. das * am anfang greift ja auch den wert zu (umkehrung des pointers)
2. wofür ist aber (WORD*) sag das es ein zeiger auf eine WORD variabe ist?!
3.&packet[4] ist der zeiger auf das 5. packet vom array (also auf die speicheradresse
umkehrschluss.: in packet[4] ist von Typ WORD (2 byte) ich hole die adresse, speicher es zwischen und der wert dieser adresse wird in magicpoints gespeichert?!

so versuch das jetzt ma mit memcpy:
Code:
WORD* magicpoints; //Der Pointer auf die magicpoints
memcpy((void*)&magicpoints,(void*)((WORD*)packet+4),2);
printf("MP changed [%d]\n",magicpoints);
da stürzt kal immer ab :-( kann mir jemand sagen wo der denkfehler ist?


so nochwas: die ganzen SendBefehle die gepostet wurden, danke ersmal. nur kann ich leider zu wenig assembler...
ist für 0x00453E7D break; //CPlayer::CancelTrade
Code:
case 0x24:
00453E7D  MOV ECX,DWORD PTR SS:[EBP-2B8]
00453E83  MOV EDX,DWORD PTR DS:[ECX+14]
00453E86  AND EDX,9
00453E89  CMP EDX,8
00453E8C  JE SHORT 00453E93
00453E8E  JMP 00456546
00453E93  MOV ECX,DWORD PTR SS:[EBP-2B8]
00453E99  CALL GameServ.CPlayer::CancelTrade
00453E9E  JMP 004564E8
gibts da nur 2 parameter (DWORD)?
was welcher parameter macht ist für mich noch ein langer lehrnprozess

danke erstmal wieder für alle antworten
Doofy is offline  
Old 02/12/2009, 08:29   #13
 
elite*gold: 0
Join Date: Feb 2009
Posts: 172
Received Thanks: 70
Was welcher Parameter macht kommt auf das Packet an. Meißtens ist der erste Parameter ein 'U'. Frag' mich nicht, was das 'U' bedeutet. Vielleicht sowas wie ein Hash. Kann aber euch nicht sein. Oder doch? Ich weiß es nicht. Denn, wenn ich bei "SendPacket()" den Parameter 'U' einen zufälligen Wert geben, stürzt KalOnline manchmal ab.

Die anderen Parameter sind eben für jedes Packet anders.

Bei 'Us' wird eben das 's' ein String sein. Kann zum Beispiel ein String sein, den du gerade im Chatfenster eingegeben hast.

Bei 'b' oder 'd' (ich weiß jetzt nicht genau) werden zum Beispiel Werte wie Coordinates oder HP, MP gesendet.

Und so weiter. Es lässt sich eigentlich leicht verstehen.

Du musst einfach nur auf die Namen der Funktionen achten. Als erstes kommt ein 'case 0x??'. Dann achtest du darauf, wie die Funktion heißt. Wie zum Beispiel "CancelTrade". Jetzt weißt du, dass 0x24 das "Format" für "Handel abgebrochen" ist.

Liebe Grüße,
hijax.
xUsername is offline  
Old 02/12/2009, 11:49   #14
 
elite*gold: 0
Join Date: Dec 2008
Posts: 208
Received Thanks: 24
danke für die Beschreibung.
Die idee das erst ein String übertragen und daran erkannt wird wieviele parameter folgen war mir klar.
Das u was du immer zuerst überträgst lasse ich seit anfang weg, sehe darin kein Sinn, und das Picken,setzen funktioniert auch so ?! Wenn mir jemand "type va_arg ( va_list ap, type )" beschreit, versteh ich vielleicht was das "U" sein soll.

gehe ich mal davon aus das ich mich bewegen will: case 0x15
Wie finde ich herraus was für Daten übertragen werden müssen? Reichen x und y Koordinaten, oder auch z? und wie finde ich das herraus?
Code:
Arg3 = 004B5670 ASCII "bbb"
so ein kommentar steht überall. aber auch beim picken. und da steht was von ddd ? wobei ddd für itemid,x,y steht...
Doofy is offline  
Old 02/12/2009, 13:48   #15
 
meak1's Avatar
 
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,126
joa is bei mir auch so keine ahnung was da alles reinmuss bei move jez bei dir zb. 0x15 was man alles brauch damit er zu x und y läuft bla
meak1 is offline  
Reply


Similar Threads Similar Threads
[noob QUESTION] about packet bot
02/21/2010 - Kal Online - 8 Replies
Hello all, I know how packet bots works, but I don't know how can I connect betwen kalonline client and kal server. So anyone know how can I connect with kal client to my localhost and not directly to server? Or how you guys do this? I saw many threads talking about packet bots ... so please just help me with this ... Thanks
HOW TO RECIVE PASSWORD
02/07/2009 - Metin2 Private Server - 1 Replies
How to recive password of account, coz i dont remeber my password in 5imt2 and longju91. help me :(.
Sound file when recive a Tell
10/19/2006 - Final Fantasy XI - 0 Replies
Since the update from yesterday you can get a sound when you recive a tell. Anyone know witch file this sond is, and if i can replace it with a real Alarm sound? thx for your help



All times are GMT +2. The time now is 07:20.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.