Hello everyone, it's a long time since I don't touch or even more time I don't talk to these forums.
First things first, I'm a long-time SphereCommunity member, I joined at the end of 2012 (10 years ago), and in those years, I've owned a sphere shard here in Brazil (Dragon Shard) for a few years, I've helped a lot of members here at the forums and also in other communities, like Ultima Online Brazil at Facebook which I'm an administrator.
Last week a friend asked me to help'em to solve a compatibility issue at an old project of mine called UltimaPHP (
UltimaPHP), so after years without opening my old good friend client.exe... I decided to get back on it in my free time.
Don't ask me why PHP... I just like it and I wanted to learn about server development/game packet communication.
So I fixed the issues my friend asked me and many more things I found out (last PR at the repo) but after that, I started to look at old issues I had and I could not solve.
That's why I'm here. I'm trying to find someone to talk about it at least to try to discover what to do.. so in case you have been playing with the last online server core development, maybe you be able to share this knowledge so we don't lose it!
Problem 1 - Socket Encryption
I've already started in the past to work on it, but I took a punch on the face after the first connection packet... when I get the client version + client random seed to calculate the crypt hash... the packets start to break.
The unencrypted client works like a charm, but it would be awesome to have the server work with encryption too.
I think it's due to some weirdness of PHP "casting", but I may be missing something.
Do someone knows deeply how it works? or worked on some project that had to do it? like any assistant? any encryption removal tool? this knowledge would be hight appreciated.
Problem 2 - Calculating the Z position of objects/mobiles
This issue happens when 2 clients connect and walk or I try to send the mobile AI to walk on uneven ground.
The char should be at
1351,1461,17 (as I can detect client-side using UOAssist/Razor) but when I seek the muls/uop files to get the terrain Z position (as it doesn't' t have static items on it) to sync other clients with the player new position the map file contains
1351,1461,14 (Z-3 from the correct position).
Code:
{
'type': 'land',
'flags': 0,
'unknown': 0,
'texture': 3,
'name': 'grass',
'tile': 3,
'position': {
'x': 1351
'y': 1461
'z': 14
}
}
I assume it's due to the uneven ground, but I'm not certain. Did someone know how to calculate this ground distortion?
Thanks for all these 10 years.