Group Spawn Packet

01/26/2012 01:25 gabrola#1
Well every now and then a packet isn't parsed correctly, sometimes character spawn data just simply ends after the character name causing me to read over other data while it tries to read guild name and stuff like that. Also some buffs related to clerics and bards seem to have an extra byte while parsing the character spawn packet, I'm not sure which buffs exactly so that's a problem too. It'd be great if someone could point out what I can do to correctly parse these group spawn packets. I've already looked at a couple of p-serv sources but none of them help :/
01/26/2012 01:32 R0bbY LoLz#2
look at sro emu` ..
01/26/2012 03:18 gabrola#3
Quote:
Originally Posted by R0bbY LoLz View Post
look at sro emu` ..
I've looked at srevolution and sroemu. Both of them are of no help.
01/26/2012 06:36 Little Hole#4
Post the packet here so we can help you !!
01/26/2012 16:17 kevin_owner#5
at steal*hex.org are some pretty helpfull posts about the group spawn packet. these also include the skill series which have an extra byte.

About the suddenly ending after the guildname that is (if i remember correctly) only if the character is in his job suit. So check in the itemlist for a job item in slot 7 (not sure about the slot) and you can simply check if the user is jobbing then stop reading the guild stuff else read the guild/union/pvp and all the stuff at the end.
01/26/2012 22:34 gabrola#6
Quote:
Originally Posted by Little Hole View Post
Post the packet here so we can help you !!
I need to make some changes to fetch these packets, so this should take a while, I'm testing out a new parsing method.

Quote:
Originally Posted by kevin_owner View Post
at steal*hex.org are some pretty helpfull posts about the group spawn packet. these also include the skill series which have an extra byte.

About the suddenly ending after the guildname that is (if i remember correctly) only if the character is in his job suit. So check in the itemlist for a job item in slot 7 (not sure about the slot) and you can simply check if the user is jobbing then stop reading the guild stuff else read the guild/union/pvp and all the stuff at the end.
I've been told to search that website a couple of times but I can't seem to find anything. Maybe you could PM the URL? Or do I need to register cause it's telling me that my email is banned for no reason :/
01/29/2012 23:32 gabrola#7
Okay I guess I've taken care of that but there's another thing. Usually there's 8 bytes containing the stall flag and transport flag and such between the end of the Character name string and the guild name length. But there's this one packet I got which had 12 bytes in between, no idea what's the reason of this.

Code:
73 07 00 00 44 00 00 00 2D 05 3B 0E 00 00 00 3C		s...D...-.;....<
0E 00 00 00 3D 0E 00 00 00 30 0E 00 00 00 86 2A		....=....0.....*
00 00 00 05 00 00 1C AB 57 0A 33 5B 00 A0 EA 44		........W.3[...D
94 B9 AE 44 00 40 CB 44 A4 31 01 01 33 5B 55 07		...D.@.D.1..3[U.
75 05 5A 06 01 00 00 00 00 00 80 41 00 00 48 42		u.Z........A..HB
00 00 C8 42 00 05 00 50 68 69 44 75 00 01 00 01		...B...PhiDu....
00 77 B4 57 0A 00 00 00 0C 00 47 6F 44 44 5F 4F		.w.W......GoDD_O
46 5F 57 61 52 53 33 10 00 00 08 00 50 75 6E 69		F_WaRS3.....Puni
73 68 65 72 0E 00 00 00 00 00 00 00 00 00 00 00		sher............
01 00 00 FF 1E 3A 00 00 44 00 00 00 2D 06 F9 2E		.....:..D...-...
00 00 03 D5 2E 00 00 03 41 2F 00 00 03 1D 2F 00		........A/..../.
00 03 65 2F 00 00 03 F3 2B 00 00 03 05 00 00 F0		..e/....+.......
EB 58 0A 33 5B 00 20 E8 44 F5 B1 B2 44 00 40 DC		.X.3[. .D...D.@.
44 EC 48 01 01 33 5B 41 07 95 05 E2 06 01 00 00		D.H..3[A........
00 0A D7 23 42 00 00 00 43 00 00 C8 42 02 7F 79		...#B...C...B..y
00 00 3B FD 01 00 73 26 00 00 0A 65 01 00 08 00		..;...s&...e....
44 72 61 67 6F 6E 30 30 00 01 00 00 00 00 00 00		Dragon00........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00		................
00 00 00 00 00 00 00 FF 4E 0F 00 00 77 B4 57 0A		........N...w.W.
33 5B 00 A0 EA 44 94 B9 AE 44 00 40 CB 44 A4 31		3[...D...D.@.D.1
01 01 33 5B 55 07 75 05 5A 06 01 00 00 00 00 00		..3[U.u.Z.......
34 42 00 00 F0 42 00 00 C8 42 00 00 			4B...B...B..
01/30/2012 00:19 Schickl#8
reverse engineering ftw
1. find out how it's parsed
2. change something
3. look for changes ingame
4. ?????
5. profit
01/30/2012 05:15 Little Hole#9
73 07 00 00 model
22 volume
00 00 noob icon
37 max item slot
00 num items items: dword id - byte plusvalue
05 avatar slot
00 num avatar items
00 duplicate flag 01: byte num_items + itemid's (no plusvalue!)
AD D7 00 00 object id
A7 61 sectors
B4 72 6F 44 float: x
18 E7 D5 C0 float: z
3D 74 E5 44 float: y
8F 7E angle
01 have_destination
01 walk flag 00: walking - 01: running
if(have_destination) {
A7 61 sectors
97 03 x
FB FF z
2D 07 y
} else {
00 no destination
8F 7E direction angle
}
01 death flag 01: alive - 02: dead
03 move flag 01: no movement - 03: moving - 04: sitting
00 berserk flag 00: normal - 01: berserk
DE 24 C6 41 float: walk speed
CD CC 9A 42 float: run speed
00 00 C8 42 float: berserk speed
00 number of buffs buffs: dword skill + dword duration in ms
0A 00 charname length
62616572626165777262 charname
00 job type 00: normal - 01: trader - 02: thief - 03: hunter
01 job level
00 pvp state 00: normal - 01: purple (attacker) - 02: red (murderer)
00 transport transport: dword transport id
00 ? unknown: no visual change
00 ? unknown: no visual change
00 ? unknown: no visual change
00 stall flag 04: player is stalling
00 00 strlen
<string> guild name
00 00 00 00 guild id
00 00 strlen
<string> guild grant name
00 00 00 00 guild emblem id
00 00 00 00 GP
00 00 00 00 union emblem id
00 ?unknown: no visual change
if(stall flag == 04) {
04 00 strle
1200340056007800 stallname
00 00 00 00 stall avatar (mall)
}
00 cooldown bar in seconds, bar above head indicating cooldown (capes/suits)
FF pvp flag need more info on this
04 1 or 3 or 4 unknown - no visual change



Edit: this is a parsed packet (groupspawn Packet for one player ) hope it help ;)
01/30/2012 06:32 srutownik#10
Do you know how to get character position from float format? (after character ID)
01/30/2012 11:00 Schickl#11
@Little Hole: This packet looks like it's from 90 cap lol
01/30/2012 22:53 gabrola#12
Quote:
Originally Posted by Schickl View Post
reverse engineering ftw
1. find out how it's parsed
2. change something
3. look for changes ingame
4. ?????
5. profit
:bandit:

Quote:
Originally Posted by Little Hole View Post
73 07 00 00 model
22 volume
00 00 noob icon
37 max item slot
00 num items items: dword id - byte plusvalue
05 avatar slot
00 num avatar items
00 duplicate flag 01: byte num_items + itemid's (no plusvalue!)
AD D7 00 00 object id
A7 61 sectors
B4 72 6F 44 float: x
18 E7 D5 C0 float: z
3D 74 E5 44 float: y
8F 7E angle
01 have_destination
01 walk flag 00: walking - 01: running
if(have_destination) {
A7 61 sectors
97 03 x
FB FF z
2D 07 y
} else {
00 no destination
8F 7E direction angle
}
01 death flag 01: alive - 02: dead
03 move flag 01: no movement - 03: moving - 04: sitting
00 berserk flag 00: normal - 01: berserk
DE 24 C6 41 float: walk speed
CD CC 9A 42 float: run speed
00 00 C8 42 float: berserk speed
00 number of buffs buffs: dword skill + dword duration in ms
0A 00 charname length
62616572626165777262 charname
00 job type 00: normal - 01: trader - 02: thief - 03: hunter
01 job level
00 pvp state 00: normal - 01: purple (attacker) - 02: red (murderer)
00 transport transport: dword transport id
00 ? unknown: no visual change
00 ? unknown: no visual change
00 ? unknown: no visual change
00 stall flag 04: player is stalling
00 00 strlen
<string> guild name
00 00 00 00 guild id
00 00 strlen
<string> guild grant name
00 00 00 00 guild emblem id
00 00 00 00 GP
00 00 00 00 union emblem id
00 ?unknown: no visual change
if(stall flag == 04) {
04 00 strle
1200340056007800 stallname
00 00 00 00 stall avatar (mall)
}
00 cooldown bar in seconds, bar above head indicating cooldown (capes/suits)
FF pvp flag need more info on this
04 1 or 3 or 4 unknown - no visual change



Edit: this is a parsed packet (groupspawn Packet for one player ) hope it help ;)
Well thing is you don't always read a transport ID, I'll log some data and see when you need to.

Quote:
Originally Posted by srutownik View Post
Do you know how to get character position from float format? (after character ID)
Well thanks for hijacking my thread but...
Code:
        public static int ToGameX(float X, byte Xsector)
        {
            return (int)Math.Round(((Xsector - 135) * 192 + (float)(X / 10)));
        }

        public static int ToGameY(float Y, byte Ysector)
        {
            return (int)Math.Round(((Ysector - 92) * 192 + (float)(Y / 10)));
        }
02/01/2012 17:15 R0bbY LoLz#13
if you want i`ll help you ...
02/01/2012 22:29 gabrola#14
I got most of it right. I'll perfect it when I'm free.
02/01/2012 22:31 R0bbY LoLz#15
ok good luck