i added a coord calculation to my programm. it seems you are totally right with evrything:
the edges of the objects ingame are exactly what i get in my program:
--> rotation, origin, AABB and position is correct
and i think and hope, that JM calculates collissions only by some space of the ground (a 2D calculation)
i'm currently trying to find the client's collission calculation...
there is something i noticed:
i blocked the stuck packet from server
i blocked the movement of the char (the place where the current position of the char is calculated by the moving speed and angle)
this happens:
i click on move. that char does nothing for some time
than it instantly teleports to the selected target, or to the object at what it would have stucked!
trying to find this...
i found something:
the function where it calculates the current X/Y/Z starts with this:
Code:
0089A370 <sro_clie.test> /$ 83EC 38 SUB ESP,38
0089A373 |. 53 PUSH EBX
0089A374 |. 56 PUSH ESI
0089A375 |. 8BF1 MOV ESI,ECX
0089A377 |. 33DB XOR EBX,EBX
0089A379 |. 399E AC000000 CMP [ESI+AC],EBX
0089A37F 0F84 00010000 JE 0089A485
0089A385 |. 389E 94000000 CMP [ESI+94],BL
0089A38B |. 0F84 E5000000 JE 0089A476
0089A391 |. 8B16 MOV EDX,[ESI]
0089A393 |. 8B42 3C MOV EAX,[EDX+3C]
0089A396 |. 2B86 98000000 SUB EAX,[ESI+98]
0089A39C |. 8B8E 9C000000 MOV ECX,[ESI+9C]
0089A3A2 |. 3BC8 CMP ECX,EAX
0089A3A4 |. 73 16 JNB SHORT 0089A3BC
0089A3A6 |. 8BCE MOV ECX,ESI
0089A3A8 |. C786 9C000000 F4010000 MOV DWORD PTR [ESI+9C],1F4
0089A3B2 |. E8 F9FCFFFF CALL 0089A0B0
0089A3B7 |. E9 AF000000 JMP 0089A46B
a bit below you'll find this:
Code:
0089A585 |. 3B05 F418D300 CMP EAX,[<Data>]
0089A58B |. 75 05 JNZ SHORT 0089A592
0089A58D |> BF 01000000 MOV EDI,1
0089A592 |> 8B06 MOV EAX,[ESI]
0089A594 |. 8B0D 1CACF500 MOV ECX,[F5AC1C] ; sro_clie.00F9BCA0
0089A59A |. 8B11 MOV EDX,[ECX]
0089A59C |. 8B52 30 MOV EDX,[EDX+30]
0089A59F 50 PUSH EAX ; DataPtr
0089A5A0 53 PUSH EBX ; 0
0089A5A1 8D4424 38 LEA EAX,[ESP+38]
0089A5A5 50 PUSH EAX
0089A5A6 8D46 4C LEA EAX,[ESI+4C]
0089A5A9 50 PUSH EAX
0089A5AA 6A 01 PUSH 1
0089A5AC 57 PUSH EDI
0089A5AD <sro_clie.CheckCol> FFD2 CALL EDX
0089A5AF 8BD8 MOV EBX,EAX
0089A5B1 F7C3 00000010 TEST EBX,10000000
0089A5B7 5F POP EDI
0089A5B8 74 15 JE SHORT 0089A5CF
The function at 0089A5AD (i named the position) is the one that checks for collisions.
it returns 0 if evrything is ok
it returns 1 if a collission is detected (and it sets the current X/Y/Z to the point where it happened)
there also seems to be the height check (i noticed some strings like "getnavmeshHeight")
i tried to reverse it but it is very complicated.
if you have some time to look at that function it will be great
Edit2: I have some updates:
the AABB seems not to be used for collision detection...i changed it to (-1000,-1000,-1000)|(-999,-999,-999) but there is still a collision
also: there are more objects than shown in the navmesh
i parsed the .o2 files of the map folder. but it seems only the objects with a collision are in the nvm