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!

Resource icon

[2.x] Ultima Live Map Streamer and Editor 0.97

No permission to download
Again cool

Look forward to trying it out once you have it going for the older ones
(if you need a link to 7.0.3, there is one on my web site in the "connecting to us page")
 
Is there a reason for the blank Console.WriteLine(); at line 193 in packetHandlers.cs? as it stands it just spams the console with a blank line. :p

also, i'm not sure if i'm doing something wrong, or if i'm just using too old of a client version, but it always deletes all the statics and starts downloading them fresh. The terrain data is still there however, which makes me suspect too old of a version of UO from previous comments.
What version of UO am I supposed to use with this?
 

Praxiiz

Sorceror
The Console.WriteLine() is debug shrapnel. Just remove it.

If you're seeing terrain data and the statics are being wiped, it means the client you're using is too old.

The first time you load up a client with UltimaLive and try to log in, it should create a blank set of map#.mul, staidx#.mul and statics#.mul files in your apps folder (for Windows 7, this is typically c:\programdata\ultimalive\test or whatever you have for shard identifier). This means that when you log in, the terrain data and all the statics will be gone. The system would then start streaming them to you as you move around.

You can take a copy of your shard maps and overwrite the newly created files in the apps folder, in which case the system would not have to stream any of the land data or statics data. In either case the files in your client folder should remain untouched.

The current version of UltimaLive supports clients that use the map0LegacyMUL.uop type maps files, but it uses the map files found in the app folder which are regular .mul files.

I am currently working on a version of UltimaLive that should allow you to use older clients. I should have it done soon.
 

Praxiiz

Sorceror
If anyone tests a client and finds that it crashes, or doesn't behave as expected, I'd love to hear about it. I have only tested a few clients.
 
I loaded my own test server with a custom map, and it had cleared the entire map for some reason, despite the client and server running identical files. Placing the files in the ProgramData folder actually crashed UO on loading.
Although now it will download the terrain along with the statics :p

This is with 7.0.10.3

Although, it will keep parts that are downloaded stored for next time.
 
thanks for the update

hopefully I will get the chance to test it soon, but working 7 days a week right now, might take me a while to get to it :)
 

fwiffo

Sorceror
The live patch works with client <= 6.0.6.2 || >= 7.x.x.x, there are a bunch of clients that don't work.

6.0.10.4 doesn't work (don't remember if version is written right). Too other versions I tested between the values stated above.

Client just crashes after execution, I've tested with various version I have, only prior to 6.0.6.2 did correctly work.

If you need help in this or if you need the client, since I cannot post them here, make a call, I would gladly help.
 

Praxiiz

Sorceror
I am getting ready for a new release. In this upcoming release, I have replaced my searching code with part of xenoglyph's MasterControl project. I think he has a much more stable method than what I was doing previously. Using parts of MasterControl will mean that I will release this next version under version 3 of the GPL and release the full source code.

That being said, I would like to extend a special Thank You to Xenoglyph for making his project open source and releasing it under the GPL.

I would also like to extend a thanks to the maker of mhook, Márton Anka who made the hooking part of this project possible by releasing mhook under the MIT license.
 

Praxiiz

Sorceror
I would also like to note that this project is very close to code completion. There are only a couple of additional features that I plan on implementing before I consider this to be ready for release as v1.0.

The two primary undeveloped features are automatic defragmentation of statics files on load, and a welcome message that will be sent to the client on login that informs them that UltimaLive is up and running and which version.
 

fwiffo

Sorceror
As I said I promised to help, so here it is for client > 6.0.6.2 && < 7.0.0.0

in MasterControlUtils.cpp
Change
Code:
unsigned char MasterControlUtils::g_PlayerBaseSignature[] = { 0x66, 0x89, 0x71, 0x24, 0x8B, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC };
To
Code:
unsigned char MasterControlUtils::g_PlayerBaseSignature1[] = { 0x66, 0x89, 0x71, 0x24, 0x8B, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC };
unsigned char MasterControlUtils::g_PlayerBaseSignature2[] = { 0x66, 0x89, 0x71, 0x28, 0x8B, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC };

In unsigned char* MasterControlUtils::GetPlayerBasePointer()

Change
Code:
const unsigned char* pOffset = FindSignatureOffset(BASE_ADDRESS, CLIENT_IMAGE_MAX_SIZE, g_PlayerBaseSignature, sizeof(g_PlayerBaseSignature));
 
 
  unsigned char* retPointer = (unsigned char*)*(uint32_t*)(pOffset + 6);

To
Code:
const unsigned char* pOffset = FindSignatureOffset(BASE_ADDRESS, CLIENT_IMAGE_MAX_SIZE, g_PlayerBaseSignature1, sizeof(g_PlayerBaseSignature1));
 
  if(pOffset==0)
      pOffset = FindSignatureOffset(BASE_ADDRESS, CLIENT_IMAGE_MAX_SIZE, g_PlayerBaseSignature2, sizeof(g_PlayerBaseSignature2));
 
  unsigned char* retPointer = (unsigned char*)*(uint32_t*)(pOffset + 6);

In MasterControlUtils.h

Change
Code:
    static unsigned char g_PlayerBaseSignature[];
To
Code:
    static unsigned char g_PlayerBaseSignature1[];
    static unsigned char g_PlayerBaseSignature2[];

That's all.
 

fwiffo

Sorceror
Just to ask, Praxiiz, I have noted some unsucessful CRC block checks, even if I use same maps/statics, copied in 3 different directory:

Game: c:\UO (example)
UltimaLive: c:\AppData\UltimaLive\ShardName
Server: d:\Server (just to be sure)

All three dirs contain *same* statics and maps, but, when logging in I get this (since I noted the black flashing of the screen):


To me there is something wrong in the way it works, since that shouldn't be possible, I'll check it when I can and post eventually a fix here if I make it.
 

Praxiiz

Sorceror
I should have some helper functions in the server side scripts that will print out the hex. I should have equivalent helper functions in the client side. I am out of town this week, but you might check the server side to see if it is sorting statics, I had code to that at one point.
 

fwiffo

Sorceror
It seems that the calculation is done wrongly in the server side, in C++ it seems all right.

The blocks and numbers are all allright, both client and server are equals during calculations/checks, the only thing wrong, to me, is the part relative to sum and calculations in the server code.

I'll try to fix it if I'll be able to. If you've solved already something let me know, maybe my guesses are wrong?
 

James Smith

Wanderer
Anyone have a sample of the playermoblie.cs with the changes I am having trouble finding the correct location to add them
 

Gargouille

Sorceror
Thx, very nice script :)

I got that :

- when (re)login without closing client, I'm in the dark, no refresh.
- even if I got server files in my ProgramData/UltimaLive/Test, I do not have whole map in radar, and it seems that I got to Stream it... (it blinks every 8tiles)
 

fwiffo

Sorceror
Yes. This is a problem that I got too. And Also the fact that you can't, without modifications to the whole app, disable map stream (and use local map files in uo dir ) / enable it
 
Top