-
Notifications
You must be signed in to change notification settings - Fork 7
Hacking_SotA
#summary Or how i made a local server for Shroud of the Avatar.
Shroud of the Avatar should be the next generation Ultima Online.
So i thought to myself: "Does it support Customized Servers?"
The answer is: obviously yes.
The game is still in pre-alpha, so a lot will change before it will be made playable, but the core won’t probably change.
I started digging by looking through the game files. SotA Client is being developed using Unity, so C#.. How convenient ;) (RunUO anybody?).
The core file for client handling is CSharp-Assembly.dll.
Talking about making a server we need to know how packets are sent through the net.
I first looked inside the exe, finding references to a C++ Dll but that was a dead end. Networking is being made in C# too, using the Photon3 library for Unity. https://www.exitgames.com/en/PUN
So if the client is using Photon the server should be Photon compatible… Exactly.
The SotA serverS are based on the Photon Server LoadBalancing example. I wrote "serverS" because the server is splitted into multiple instances.
We have:
-
Master Server: This server handles connection, authentication and lobby joining (unique)
-
Game Server: The server attached to the lobby you have been assigned to. Multiple Game servers can be created (But i’m not sure if this has been mantained.)
-
Scene Server: A single server that handles housing for the world. (i think this is unique)
-
Group Server: This server handles social interaction. (Party, friends, chat, etc.) (unique)
-
Metrics Server: This server is a feedback server for your client. It does not require authentication and will provide informations about you client state/exceptions and your hardware
I started looking into "how to avoid using Photon Server" but then i got bored, too much work to do just to test something like what i had in mind.
PhotonServer is free to be downloaded and with a free licence you can accept up to 100 connections.. it’s enough to start.
So i started looking for packets, finding the PortMessage class. This class is the backbone of the whole SotA networking.
Instead of using the Photon protocol SotA developers chose to add a layer, represented by the PortMessage envelope.
A sigle PortMessage is characterized by a UINT identifier (i haven’t found a logic in the ID assignements) and a JSONPropertyBag containing all the data. (Yes, all the data is sent as string…quite against performances..)
A JSONPropertyBag is a <string,object> serializable dictionary
Packets are encrypted by Photon. I managed to dump them writing directly CIL into the CSharp-Assembly.dll.
The following thing to do was changing IP and the RSA public key used for authenticating.
I made a little program capable of doing such thing and replaced the ip with 127.0.0.1 and the RSA key with a known one.
Once the packets started flowing through my private Photon Loadbalancing instance i had only to handle them in the proper way.
My goal was to log-in, so everything related to DB Management (items ids, items properties, character appearance) was hardcoded.
After some effort i managed to reach the game screen :)!
I will now stop developing this server waiting for further developments (right now it’s almost unplayable), but the path has been shown.
Attached you can see screenshots of my first login on local server.
PS: Please notice (again): my code does not use any DB (yet?), so the code is static and just written to reach logged state.
PPS: I bought the game, but i would wait to buy it again.. there are some things that disappointed me, such as the fact that the world structure does not allow UO Gates and Recall (you would need to wait the loading of the map you are moving to). Also the multi-scened world removes the idea of an enormous area where you can wander around (as UO was). Still, let’s wait for future releases!
- NEW!(191028)* 5Years! Restored images in both Hacking_SotA and CustomMAP
- NEW!(141028)* Shroud of the Avatar Custom server report added to the wiki! Hacking_SotA http://code.google.com/p/kprojects/wiki/Hacking_SotA
(140128) From now on downloads will be put in the download directory on External links in the Home page.
(140128) DDSImage.cs version .5 has been added to the downloads!
(131223) I've added an experimental Unity project (sources) to downloads. The scripts i made allow you to move around the map with arrows. Please notice: The program is totally unstable. If you have the skill and want to help send me a mail, i'll upload an SVN.
(130617) Added a lot of stuff to the wiki, check it out -> [Main]
(130513) Added wiki page on my work for uop rendering with DirectX11
(130425) My account on RunUO has been re-activated, so i'm back there.
What will you find here:
- (130228) UO:Architect 2.6.8 mod-K Verified (it means i installed uo to try it and it worked) and Released!
- UO:SA Loader 2.3 - Supports 4.0.30.0+ clients. As usual i am not responsable for the use you make of the program, it was written for educational purpose. No source will be given. UO:SA Loader does no more contains Encryption removal option for enhanced client since version 2.0. Read the .txt inside the package to know why.
- (130520) UO:Reader 0.87 - My tribute to InsideUO. This program can load followings uops:
Here you can see screenshots of how "Ultima Online:Stygian Abyss" could be:
(120927):Added 2 images CustomMAP
All programs i've made:
Check the WIKI mainpage! -> Main
SotA:
Screenshots:
UO Formats:
- Mythic_Package
- StringDictionary
- Facets
- Sector
- Tileart
- MultiCollection
- Texture
- TerrainDefinition
- Waypoint
- AnimationSequence
- Effects
- Unknowns
- AnimationFrame
- LegacyTexture
- Texture_uop
Programs: