RunUO Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

UOExt - We do what EA can't.

Status
Not open for further replies.

Warstone

Sorceror
1st of all - sorry for my english. It's not my native language, I'm russian.

Ok... Some history...

My favorite role in UO is crafter... ore digging, wood chopping, etc. Once upon a time, when I wrote another one EasyUO macro for auto wood chopping, I thought, that it would be great if chopped trees really falls. This was fantastic idea that "must be done". Deep researching showed me that it's not so easy...

Trees hardcoded into static and server can't change this... mistake. Even more - changing of statics is really hard. You need to draw it, then [freeze and, finally, ship changed files to every client that ever logon to your server. 1st thing that I've done - I've wrote client's loader, that open statics files in share mode. So, when you change your static and make [freeze, you only need to [tele out from that location and [tele backwards. Local client cache will be renewed and you see new statics, but only if you runs client and server on the same PC and on the same statics files.

Next idea was even more fantastic - we have 2 types of statics... 'dynamic' statics, that ships from server and 'static' statics, that client gets from hard drive... So... Let's make all statics 'dynamic'! It can be done, because when you travel near Luna, many 'dynamic' static shipped to your client (house customization). You can't do it with server because you need wide connection for shipping every statics on every client, but... If you will load statics from hard drive manually, and ship it to client as it "came from server" - it will be fine! That's how UOExt was born.

Main idea is 'Insert proxy between client and server', that could be managed from server, if needed.

For now UOExt has some plug-in system via dll, that allow you to modify and extend protocol with you logic.

It written on Delphi (if someone want to port it to fpc - that will be great), because I knew it better :p.

Main core released under GPLv3 license, but you can write your plugins under any license because they are individual projects and core loads it in binary mode. You can write plugins on every langugage you like, but I'm asking you don't write it on managed (C# or java) languages, because they has big demands to resources. Right now UOExt needs only 1Mb for work (include loaded binary) and I will sleep better, if it will remain so (Real reason - UO client can be run on very old machine under smth like Win98, that hasn't .Net support).

And last thing. You can get source code here: http://code.google.com/p/uo-ext/ , 1st stable compiled release will be done somewhere in august. (r44 middleware commit, so if you want to compile it - get r16)

If someone wants to help - I'm open to suggestions.

More screenshots and videos will be later... If they will.
 

SATA

Wanderer
this is a brilliant idea.. I'm not very good at programming anything but basic, so I couldn't really help, but I hope this project works, because it would take UO to a new level.
 

Warstone

Sorceror
Right now I'll try to describe the ideal algorithm for UOExt:

Let's start from double click on UO client icon. Wrong. This will run unhandled client. Right now you need to run client with UOLoader (small program, that runs client with UOExt.dll). I know that this kind of start makes Razor impossible, but I'm working on it. Last commit have Infestation algorithm, that can infect client with UOExt, and this enables Razor, but it hasn't tested yet. It you interested you cant see it here. Client start loading and get to "read login.cfg" phase, When UOExt inits (before real client stars) it makes some hooks, one of it will hook reading login.cfg. It read login cfg before client, start new thread and initialize proxy in it. Then UOExt return to client modified content of login.cfg, smth like 127.0.0.1:45327 (port generates randomly from OS). Client continue loading. When you enter your login and password and press next button, client connects to... proxy, while proxy connects to real server. From now on proxy will decrypt, unpack, crypt and pack (if needed. It can automatically recognize encryption, detect keys etc. If you intersting, you can see it here) protocol to send to the reciver. When packet uncrypted and unpacked every plugin can react on it, stop it, change it or send another packet(s) in any direction. Because proxy is standalone thread, you can do heavy calculation when you handle packet. You have 0,1-0,5 second. It will grow lag, but client will react on player moves, without freezing. That's why proxy starts in new thread.

So, how static can be turned into 'dynamic'? Simple. When player moves it send packet to server. Proxy catch it and send back to client new static. Client think that this static arrives from server. Even more... Proxy can ask server for static changes to make ingame map(right now - only static) patch. That is what we do, and EA - can't :p
 

Jeff

Lord
You can already do this with RunUO + standard client. You just have to make items inherit from StaticItem in the scripts. This mod is not necessary.
 

Jeff

Lord
When you do this, you need to unfreeze all map. Hello lags.
Nope, you don't. I made a dynamic static tree system, worked great, you could cut trees down, they would grow back, and the client treated them like statics.
 

Warstone

Sorceror
Jeff, you don't understood... Yes. you can do this, but you need every tree in Britannia be 'dynamic'. And in my case every tree physically lays at staticsX.mul on every client. But server may get it from staticsX.mul on every client that logged into server (and see this tree). There is online staticsX.mul file patching. I'll record some video when it will be in working alpha stage. Right now I have some screenshots, but they are not so cool They are already deleted from image shares. And i can't make them right now, because plugins system revorked and need to be sync between core and plugins.
 

Warstone

Sorceror
In fact, with this system you can make [freeze and/or [unfreeze and every client that will came to UpdateRange will get new static from server you don't need to relogin of download new staticsX.mul it will be downloaded automatically when it need and only that part fo staticsX.mul, that you will see in next moment when you done moving. It's too hard to explain and my english is not so cool, I think )
 

Jeff

Lord
With my system, you just remove the trees, and add spawner. You do not need every tree to be dynamic... you can select areas or however you want. I think i see what you are getting at, but it sux to require your users to use a 3rd party app, to play a game like this. Especially when you can get the same results without it.
 

Warstone

Sorceror
You can't get same results. Trees is only example. If you want to get same results without this app you need to [unfreeze all map.

BTW... Jeff... Let's imagine what it will be if you make forest with your system (you have 10% that tree will appear on every tile in... 1000*1000 tiles, I think that this is fair amount of forest in Felucca)? It will be near 100K of only trees in your server. And let's make world save... How long it will be done? And this is only one example.

As I already said above - with this '3d party addon' you can change any static (that lays in staticsX.mul, that [freeze) and any player in range will see changes, any player that come there later will see this changes. You do not need to ask player to download new files (staticsX.mul). Players do not need to rerun client. They just need to use your 'patched' client. Everything else they will get from server automatically, but only when they needed.
 

Jeff

Lord
You can't get same results. Trees is only example. If you want to get same results without this app you need to [unfreeze all map.

BTW... Jeff... Let's imagine what it will be if you make forest with your system (you have 10% that tree will appear on every tile in... 1000*1000 tiles, I think that this is fair amount of forest in Felucca)? It will be near 100K of only trees in your server. And let's make world save... How long it will be done? And this is only one example.

As I already said above - with this '3d party addon' you can change any static (that lays in staticsX.mul, that [freeze) and any player in range will see changes, any player that come there later will see this changes. You do not need to ask player to download new files (staticsX.mul). Players do not need to rerun client. They just need to use your 'patched' client. Everything else they will get from server automatically, but only when they needed.
So instead of having them download a staticsX.mul you have them download a client.exe, a client.exe which cannot be auto patched through programs like ConnectUO, so if the server you wanna play ALSO has custom patching, they now have an issue because they have to use a custom client.exe, and patches that have to download.

Also, 1 million trees isn't a big deal, save time on a million trees is trivial, they are static items, small and lightweight compared to other items and mobiles. Anyway, i wish you luck, i just don't see this being widely used due to the way it has to be implemented. I think ideally, this should be included in ConnectUO or Razor, or any other connecting tool in order to get good use of the system. People do not like hassle when they play, they want easy. That is why ConnectUO is so successful, 1 click play. I think you should write this in C++, then it could be moved to ConnectUO and/or Razor... just my thoughts on the matter.
 

Warstone

Sorceror
Sorry Jeff, but I never see that someone use ConnectUO, maybe it's because UO universe in Russian different.

I think about including this into Razor, and maybe I make Razor infection instead of client. It's not so different. BTW UOExt not bound to RunUO, it can be used with any emulator. And Razor/ConnectUO is using only for RunUO servers (correct me if I'm not right).
 

Blackheart87

Sorceror
Also on italy i don't kown of people that use connectUO, all of italian server use custom patcher, i like the idea of UOext, i'm on the same opinion of Warstone, it's better a third party program and not too many Dynamic item...
 

Blackheart87

Sorceror
It's not one-for-all-shards, unfortunatley :(
Some server use a modded version of the old classic uo autopacher, someone use uo launcher ( you can find both somewhere in third party program runuo forum) and others a launcher/patcher that they made by themselves and don't release a source :(
Italians don't use a tool like connect uo, simply do a "Italian Uo server List" called uoshards
Who knows ultima online on italy simply go on uoshard, choose a server like a lot of "Best200 server uo" site and download game file from game server site.
We don't have shards that use connect uo or similiar projects :(
 
Status
Not open for further replies.
Top