Packet jump noob question - How to update hero position /client ?

05/28/2018 01:40 giacometti#1
Hello, this my first project messing with packets, so get it easy guys.

After sending a jump packet to server I can see from another account logged in that the jump was made, but client that i sent the packet didnt update the hero position (jump animation on client was not made). How can I update the client, I mean, how can i synchronize it?
Shouldn't it working by sending the same jump packet to client? I guess no, right...

I can call jump function from memory, but at the end it will send jump packet again to server, so no point doing that way...

Would it work if I use same packet that I received from others players jump and construct one with my hero info and send it to client? (I suppose that there is some hero info on this packet)

Here are some jump packets, one received (server->client) from someone jumping around and one packet sent by jumping with mouseclick.

Code:
27-05-2018 20:15:15 [RECV] Type: 2102 Length: 25
===================================================================
19 00 36 08 08 fc b3 c9 02 18 00 48 ac 81 86 0f  ; ..6........H....
60 a1 01 68 00 70 00 78 00                       ; `..h.p.x.

[DECODED]  Decoded-length: 32 Decoded-Fields: 7
Field's key :  1,  3,  9, 12, 13, 14, 15, 
Field's type:  0,  0,  0,  0,  0,  0,  0, 
Field's size:  4,  4,  4,  4,  4,  4,  4, 
19 00 36 08 fc 59 52 00 00 00 00 00 ac 80 e1 01  | ..6..YR.........
a1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................

Code:
27-05-2018 20:29:21[SENT] Type: 2102 Length: 47
===================================================================
2f 00 36 08 08 fb b3 c9 02 38 b2 03 40 d3 03 48  ; /.6......8..@..H
d3 96 c3 0f 60 89 01 68 06 70 af 03 78 d2 03 88  ; ....`..h.p..x...
01 ea 07 a0 01 ff ff ff ff ff ff ff ff ff 01     ; ...............

[DECODED]  Decoded-length: 56 Decoded-Fields: 11
Field's key :  1,  7,  8,  9, 12, 13, 14, 15, 17, 20,  0, 
Field's type:  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 
Field's size:  4,  4,  4,  4,  4,  4,  4,  4,  4,  8,  8, 
2f 00 36 08 fb 59 52 00 b2 01 00 00 d3 01 00 00  | /.6..YR.........
53 cb f0 01 89 00 00 00 06 00 00 00 af 01 00 00  | S...............
d2 01 00 00 ea 03 00 00 ff ff ff ff ff ff ff ff  | ................
fd 7e bf df ed 76 bb dd                          | .~...v..
Thank you in advance. I can't enjoy a sunday break in other way.
05/28/2018 02:31 Spirited#2
You won't see the animation. Even if you send the jump back to the client, that only confirms the new location. It doesn't perform the animation because it expects that you requested the jump (because why wouldn't you be the requester in a normal situation). Easiest way would be to send a teleport, or some other forced movement, to the client so it updates the location. It won't look great, but it will work. Why did you post guild member list packets?
05/28/2018 13:14 giacometti#3
Hmmm.... Well, maybe the jumps made in autohunt is triggered by received packets, cause that jump does not trigger the jump function on memory, I will look further into this tonight.

I just listed the packets triggered when jump action is done/received. For jump, packet type is 2102 and for running, packet type is 2245 for current conquer patch ( 6717).
05/29/2018 20:39 giacometti#4
Quote:
Originally Posted by giacometti View Post
maybe the jumps made in autohunt is triggered by received packets,
did not work;


Quote:
Originally Posted by Spirited View Post
Easiest way would be to send a teleport
worked like a charm!


[Only registered and activated users can see links. Click Here To Register...] is helping a lot by the way.

For reference, this was the packet that I test to teleport, by sending it to client:

Code:
29-05-2018 15:14:32 [RECV] Type: 2102 Length: 29
===================================================================
1d 00 36 08 08 fb b3 c9 02 18 ea 07 48 a2 d1 dd  ; ..6.........H...
10 50 00 60 56 68 07 70 d7 02 78 b2 03           ; .P.`Vh.p..x..

[DECODED]  Decoded-length: 36 Decoded-Fields: 8
Field's key :  1,  3,  9, 10, 12, 13, 14, 15, 
Field's type:  0,  0,  0,  0,  0,  0,  0,  0, 
Field's size:  4,  4,  4,  4,  4,  4,  4,  4, 
1d 00 36 08 fb 59 52 00 ea 03 00 00 a2 68 17 02  | ..6..YR......h..
00 00 00 00 56 00 00 00 07 00 00 00 57 01 00 00  | ....V.......W...
b2 01 00 00                                      | ....
I think this is like the MsgAction... Fieldkey 1 = playerId, Fieldkey 3 = mapId, Fieldkey 9 = timestamp? , Fieldkey 12 is the actiontype if I am not wrong. F13 maybe the facedirection, F14 and F15 are the coords for sure.
05/29/2018 21:30 ghosfromhell#5
Quote:
Originally Posted by giacometti View Post
did not work;




worked like a charm!


[Only registered and activated users can see links. Click Here To Register...] is helping a lot by the way.

For reference, this was the packet that I test to teleport, by sending it to client:

Code:
29-05-2018 15:14:32 [RECV] Type: 2102 Length: 29
===================================================================
1d 00 36 08 08 fb b3 c9 02 18 ea 07 48 a2 d1 dd  ; ..6.........H...
10 50 00 60 56 68 07 70 d7 02 78 b2 03           ; .P.`Vh.p..x..

[DECODED]  Decoded-length: 36 Decoded-Fields: 8
Field's key :  1,  3,  9, 10, 12, 13, 14, 15, 
Field's type:  0,  0,  0,  0,  0,  0,  0,  0, 
Field's size:  4,  4,  4,  4,  4,  4,  4,  4, 
1d 00 36 08 fb 59 52 00 ea 03 00 00 a2 68 17 02  | ..6..YR......h..
00 00 00 00 56 00 00 00 07 00 00 00 57 01 00 00  | ....V.......W...
b2 01 00 00                                      | ....
I think this is like the MsgAction... Fieldkey 1 = playerId, Fieldkey 3 = mapId, Fieldkey 9 = timestamp? , Fieldkey 12 is the actiontype if I am not wrong. F13 maybe the facedirection, F14 and F15 are the coords for sure.
hey guys
i saw this packet and i know it
but i have one question and please dont say im stupid
can i use this packet to get speedhack ?
if its possible can you only give me the idea about how?
05/29/2018 21:32 boDil#6
Quote:
Originally Posted by giacometti View Post
For reference, this was the packet that I test to teleport, by sending it to client:

Code:
29-05-2018 15:14:32 [RECV] Type: 2102 Length: 29
===================================================================
1d 00 36 08 08 fb b3 c9 02 18 ea 07 48 a2 d1 dd  ; ..6.........H...
10 50 00 60 56 68 07 70 d7 02 78 b2 03           ; .P.`Vh.p..x..

[DECODED]  Decoded-length: 36 Decoded-Fields: 8
Field's key :  1,  3,  9, 10, 12, 13, 14, 15, 
Field's type:  0,  0,  0,  0,  0,  0,  0,  0, 
Field's size:  4,  4,  4,  4,  4,  4,  4,  4, 
1d 00 36 08 fb 59 52 00 ea 03 00 00 a2 68 17 02  | ..6..YR......h..
00 00 00 00 56 00 00 00 07 00 00 00 57 01 00 00  | ....V.......W...
b2 01 00 00                                      | ....
I think this is like the MsgAction... Fieldkey 1 = playerId, Fieldkey 3 = mapId, Fieldkey 9 = timestamp? , Fieldkey 12 is the actiontype if I am not wrong. F13 maybe the facedirection, F14 and F15 are the coords for sure.
You should try using the "NinjaStep" (156) action type - that one doesn't require the map ID and doesn't have any "side effects" like the teleport one does, I believe.
05/29/2018 21:35 ghosfromhell#7
Quote:
Originally Posted by boDil View Post
You should try using the "NinjaStep" (156) action type - that one doesn't require the map ID and doesn't have any "side effects" like the teleport one does, I believe.
hey bodil
please tell me more about the ninja step

please i realy need this
05/30/2018 00:06 giacometti#8
Quote:
Originally Posted by Spirited View Post
Why did you post guild member list packets?

Just notice that. Sorry, probably I ctrl+c/v the wrong one... The first packet on the first post should be something like this (packet of jump action from someone jumping around near hero):

Code:
29-05-2018 18:56:34 [RECV] Type: 2102 Length: 38
===================================================================
26 00 36 08 08 fb b3 c9 02 38 b6 03 40 d5 03 48  ; &.6......8..@..H
b5 d5 94 17 60 89 01 68 00 70 b5 03 78 d2 03 88  ; ....`..h.p..x...
01 ea 07 b8 01 00                                ; ......

[DECODED]  Decoded-length: 44 Decoded-Fields: 10
Field's key :  1,  7,  8,  9, 12, 13, 14, 15, 17, 23, 
Field's type:  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
Field's size:  4,  4,  4,  4,  4,  4,  4,  4,  4,  4, 
26 00 36 08 fb 59 52 00 b6 01 00 00 d5 01 00 00  | &.6..YR.........
b5 2a e5 02 89 00 00 00 00 00 00 00 b5 01 00 00  | .*..............
d2 01 00 00 ea 03 00 00 00 00 00 00              | ............
FK1 = playerId
FK7 = x dest
FK8 = y dest

FK9 = timestamp ?
FK12 = actiontype

FK14 = x source
FK15 = y source
FK17 = mapId
05/30/2018 16:29 teroareboss1#9
Code:
    [ProtoContract]
    public class ActionQuery
    {

        [ProtoMember(1, IsRequired = false)]
        public uint UID;

        [ProtoMember(2, IsRequired = false)]
        public uint TargetUID;
        [ProtoMember(3, IsRequired = false)]
        public uint dwParam;//possible to be ulong
        [ProtoMember(4, IsRequired = false)]
        public uint dwParam2;
        [ProtoMember(5, IsRequired = false)]
        public uint dwParam3;
        [ProtoMember(6, IsRequired = false)]
        public uint dwParam4;
        [ProtoMember(7, IsRequired = false)]
        public uint ObjectX;
        [ProtoMember(8, IsRequired = false)]
        public uint ObjectY;

        [ProtoMember(9, IsRequired = false)]
        public int Timestamp;

        [ProtoMember(10, IsRequired = false)]
        public uint AttackerUID;
        [ProtoMember(11, IsRequired = false)]
        public uint unknow11;


        [ProtoMember(12, IsRequired = true)]
        public ActionType Type;
        [ProtoMember(13, IsRequired = false)]
        public ushort Fascing;//26
        [ProtoMember(14, IsRequired = false)]
        public ushort wParam1;
        [ProtoMember(15, IsRequired = false)]
        public ushort wParam2;
        [ProtoMember(16, IsRequired = false)]
        public uint wParam3;
        [ProtoMember(17, IsRequired = false)]
        public uint wParam4;
        [ProtoMember(18, IsRequired = false)]
        public ushort wParam5;

        [ProtoMember(19, IsRequired = false)]
        public int unknow19;
        [ProtoMember(20, IsRequired = false)]
        public int unknow20;
        [ProtoMember(21, IsRequired = false)]
        public int unknow21;
        [ProtoMember(22, IsRequired = false)]
        public int unknow22;
        [ProtoMember(23, IsRequired = false)]
        public int unknow23;

        [ProtoMember(24, IsRequired = false)]
        public string Text;
}
JumpX = ObjectX;
JumpY = ObjectY;
dwParam3 = mapid;
05/30/2018 16:37 giacometti#10
Quote:
Originally Posted by teroareboss1 View Post
Code:
    [ProtoContract]
    public class ActionQuery
    {

        [ProtoMember(1, IsRequired = false)]
        public uint UID;

        [ProtoMember(2, IsRequired = false)]
        public uint TargetUID;
        [ProtoMember(3, IsRequired = false)]
        public uint dwParam;//possible to be ulong
        [ProtoMember(4, IsRequired = false)]
        public uint dwParam2;
        [ProtoMember(5, IsRequired = false)]
        public uint dwParam3;
        [ProtoMember(6, IsRequired = false)]
        public uint dwParam4;
        [ProtoMember(7, IsRequired = false)]
        public uint ObjectX;
        [ProtoMember(8, IsRequired = false)]
        public uint ObjectY;

        [ProtoMember(9, IsRequired = false)]
        public int Timestamp;

        [ProtoMember(10, IsRequired = false)]
        public uint AttackerUID;
        [ProtoMember(11, IsRequired = false)]
        public uint unknow11;


        [ProtoMember(12, IsRequired = true)]
        public ActionType Type;
        [ProtoMember(13, IsRequired = false)]
        public ushort Fascing;//26
        [ProtoMember(14, IsRequired = false)]
        public ushort wParam1;
        [ProtoMember(15, IsRequired = false)]
        public ushort wParam2;
        [ProtoMember(16, IsRequired = false)]
        public uint wParam3;
        [ProtoMember(17, IsRequired = false)]
        public uint wParam4;
        [ProtoMember(18, IsRequired = false)]
        public ushort wParam5;

        [ProtoMember(19, IsRequired = false)]
        public int unknow19;
        [ProtoMember(20, IsRequired = false)]
        public int unknow20;
        [ProtoMember(21, IsRequired = false)]
        public int unknow21;
        [ProtoMember(22, IsRequired = false)]
        public int unknow22;
        [ProtoMember(23, IsRequired = false)]
        public int unknow23;

        [ProtoMember(24, IsRequired = false)]
        public string Text;
}
JumpX = ObjectX;
JumpY = ObjectY;
dwParam3 = mapid;


Nice, just confirmed field 9, thank you very much!

By the way, anyone knows how to determine timestamp? I could not replicate it, it does not seem a general time like the one you get in gettickcount() function. Maybe it is a mesh with some other value? Am I missing something basic in time functions?

Meanwhile just sending invalid or even null timestamps to client doesnt seem to affect at all, but eventually I will send packets to server, and then problems will arrive for sure. Well, I guess it's just about reversing the client when its building the packet timestamp to see how its constructed (if it is really a mesh).
05/30/2018 16:41 teroareboss1#11
you can send back... the same packet (received packet).

and 2.. They've protobuf and on 10014 ... you can see the other character?

If I remember rightly .. timerstamp is Environment.TickCount
05/30/2018 16:52 giacometti#12
Quote:
Originally Posted by teroareboss1 View Post
you can send back... the same packet (received packet).
Do you mean about the question in first post? or about timestamp?


If it is about timestamp it doesnt work for my purpose, I mean, constructing/building the packet from nothing and just send it to server... But I guess this is not a good idea, I will be caught by a simple packet counter that is easy to miss in client assembly... Better to inject a packet in a client action to get timestamp! Well, no need to evaluated timestamp now I think, having in mind this strategy. Unless timestamps are calculated different in packets types... LoL, so much to cover!

Quote:
Originally Posted by teroareboss1 View Post
They've protobuf and on 10014 ... you can see the other character?
What do you mean? I could not understand.

Quote:
Originally Posted by teroareboss1 View Post
If I remember rightly .. timerstamp is Environment.TickCount
I am not using managed C++ (.net), so I don't have access to that function. But I will look further about it. Thx.

What I can see about timestamp is that the one conquer uses seems to have a precision of 0.1 milliseconds (gettickcount has precision of 1 millisecond).