Status
Not open for further replies.
Ok after updating this to the new version ive finally got it to work with only 1 slight problem left..

Mapdefinitions.cs

Code:
RegisterMap(0, 0, 0, 7168, 4096, 4, "Felucca", MapRules.FeluccaRules);
            RegisterMap(1, 1, 1, 7168, 4096, 0, "Trammel", MapRules.TrammelRules);
            RegisterMap(2, 2, 2, 2304, 1600, 1, "Ilshenar", MapRules.TrammelRules);
            RegisterMap(3, 3, 3, 2560, 2048, 1, "Malas", MapRules.TrammelRules);
            RegisterMap(4, 4, 4, 1448, 1448, 1, "Tokuno", MapRules.TrammelRules);
            RegisterMap(5, 5, 5, 1280, 4096, 1, "TerMur", MapRules.TrammelRules);
            RegisterMap(32, 32, 32, 2560, 2048, 1, "Testing", MapRules.FeluccaRules);

Mapregistry.cs
Code:
AddMapDefinition(0, 0, new Point2D(7168, 4096), new Point2D(5120, 4096)); //felucca
      AddMapDefinition(1, 1, new Point2D(7168, 4096), new Point2D(5120, 4096)); //trammel
      AddMapDefinition(2, 2, new Point2D(2304, 1600), new Point2D(2304, 1600)); //Ilshenar
      AddMapDefinition(3, 3, new Point2D(2560, 2048), new Point2D(2560, 2048)); //Malas
      AddMapDefinition(4, 4, new Point2D(1448, 1448), new Point2D(1448, 1448)); //Tokuno
      AddMapDefinition(5, 5, new Point2D(1280, 4096), new Point2D(1280, 4096)); //TerMur
 
      //those are sample maps that use same original map...
      AddMapDefinition(32, 3, new Point2D(2560, 2048), new Point2D(2560, 2048));
      //AddMapDefinition(33, 0, new Point2D(7168, 4096), new Point2D(5120, 4096));
      //AddMapDefinition(34, 1, new Point2D(7168, 4096), new Point2D(5120, 4096));

when on a staff chara if i use a moongate or [set map testing it transfers me to the "new malas" testing map but im unable to walk on the map and teleporting to a new tile then kicks my client and i am unable to relog in..

I am using a client that has the Dll file inside.
 
Here-> AddMapDefinition(32, (3,)new Point2D(2560, 2048), new Point2D(2560, 2048));

Should be:
AddMapDefinition(32, 32,new Point2D(2560, 2048), new Point2D(2560, 2048));
 
i thought that would mean id have 2 maps using the malas map as a base.. Do i need to copy the malas map mul's change them to say 32 and use it that way?
 
You can use whatever maps, muls you choose for map 32, include statics32.mul and staidx32.mul. Just remember to adjust the map size.
ex: AddMapDefinition(32, 32, new Point2D(6144, 4096), new Point2D(6144, 4096)); //Doinsiun Dungeons
 
For now i am trying to use malas as a test map.. I plan on purchasing the Darkshire map set once i get paid.. For now tho im just using the malas as a test but using the above code as stated im unable to walk on the 2nd malas map
 
For now i am trying to use malas as a test map.. I plan on purchasing the Darkshire map set once i get paid.. For now tho im just using the malas as a test but using the above code as stated im unable to walk on the 2nd malas map

Yes, you need to make that 3 into a 32 and it should all be golden. ;)
 
Praxiiz updated UltimaLive Map Streamer and Editor with a new update entry:

UltimaLive v.0.97

Fixed a bug that caused some file handles to be closed twice
Fixed a bug that was causing map and graphic glitches on maps that were smaller than Felucca
Moved Client files save path into the UltimaLiveSettings.cs file to centralize it
Added path for lumber harvest system to the UltimaLiveSettings.cs file. If you are not using the system, you can remove these lines of code or leave them.
Cleaned up various warnings
Fixed a bug that was causing map operations to conflict...

Read the rest of this update entry...
 
Downloaded v.0.97 but noticed its missing the installation info can you please add a detailed method on how to add this again thanks...
 
I can find my map by using [go map - however I am not seeing the new map. I don't really want to replace the original maps and have a couple of new ones to add on.
 
So I'm using the newest client for this, and whenever I do [set map 33 and click on my character my server crashes (not my client). For MapDefinitions, I have
Code:
RegisterMap(33, 33, 33, 6144, 4096, 1, "Doria", MapRules.TrammelRules);
For Mapregistry, I have
Code:
AddMapDefinition(33, 33, new Point2D(6144, 4096), new Point2D(6144, 4096));
I can do the MoveStatic command, AddStatic command, DelStatic command, so those work fine. I'm using Map7 from http://source.uo-developer.com/index.php/anasayfa/71 and I renamed the map files map33.mul, staidx33.mul, and statics33.mul and put them in my UO folder and my server client files folder(they're separate). I obviously also followed the instructions for the .dll files. Am I missing something? Here is the crash log:
Code:
Server Crash Report
===================

RunUO Version 0.5, Build 5186.6164
Operating System: Microsoft Windows NT 6.1.7601 Service Pack 1
.NET Framework: 4.0.30319.18444
Time: 3/14/2014 8:27:00 AM
Mobiles: 41082
Items: 199047
Exception:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at Server.Mobiles.XmlSpawner.GlobalSectorTimer.OnTick()
   at Server.Timer.Slice() in c:\ServUO\trunk\Server\Timer.cs:line 387
   at Server.Core.Main(String[] args) in c:\ServUO\trunk\Server\Main.cs:line 622

Clients:
- Count: 1
+ 127.0.0.1: (account = Denjiki) (mobile = 0x1 'Denjiki')
 
I suppose rather than searching ultimalive threads up and down and googling UltimaLive I should've considered an outside problem as well, I just sort of assumed (wrongly I will admit) that the problem was with ultimalive as I had no issues with my server before the install. I will try this in a bit when I'm done with homework. Thanks for doing what I should've done.
 
@Praxiiz I love ultima live, it is an amazing tool and I appreciate your time uploading it. I just have one issue that seems small but to me is a big thing, and if you could find the time to fix it for me while I finish up publish 55 I would be a happy camper. Before I installed UltimaLive whenever I was on a trammel ruleset facet, my cursor was a shiny gold. Ever since I installed Ultima Live, this is no longer the case. I can also confirm that any shard i've played on has this issue once they install UltimaLive.

These images are from OSI.

Felucca
acloudup_com_cPfFr2dKms5__.png


Trammelacloudup_com_clL2ikhrWZm__.png

As you can see the cursor is much golder on trammel, If you could sherlock this out for me that would be great.
 
Interesting. I never noticed Trammel uses a different cursor. It makes sense that once you install UltimaLive you don't ever see the cursor change.

Maybe this diagram will help explain why this occurs.

ai22.photobucket.com_albums_b347_Praxiiz_UltimaLiveVirtualSpace_1.png

Under normal operation the client has a virtual address space for each map. When it changes maps, it loads the data from the map space that you are changing to.

Under UltimaLive, all the maps point to the same place. Just before the client changes maps, UltimaLive goes out to disk and copies the appropriate map into the single map space. It then tells the client to switch to trammel and then to switch back to Felucca.

As far as the client knows, you always end up in Felluca. That's why you always see the Felucca cursor.

In order to get the cursor working right I would need to track the rule set from the server and change which map the client ends up at after a map change.

It would break backwards compatibility, but UltimaLive isn't at 1.0 yet so that may not be a big deal.
 
You said any map with a trammel rule set... If you change the default Felucca map to use the trammel ruleset, do you get the gold cursor without UltimaLive installed?
 
Last edited:
I apologize PRaxiiz, I seem to be pretty stupid, it isn't tied to the ruleset, its bound to the map. Felucca even with trammel is silver cursored... Seems like a bug, but it's something client side based on what you stated? So not much I can do to fix it, but perhaps this is something ultimalive could do for us? As a feature request?
 
The only reason I was asking is if the client did go by the ruleset, then there would be something in the map change packet I could manipulate.

I am not looking at it now, but I think you're right that it is bound to the map number. I'd like to look into it a bit more though because it seems like there are several fields in the client map definition that are still unknown to me.

I think that UltimaLive could definitely add that as a feature. I will plan on adding it in before the 1.0 release.
 
Just a heads up, I posted this in your other thread but since it is related to your main system I will post it here as well:

"I ran the debug dll and the "UNIQUE_SHARD_IDENTIFIER" in the Ultima Live settings apparently needs to be 27 characters or less lol, I of course used the max you stated of 28 and that's where my client would crash."
 
I'm wondering if anyone else is having problems when using Ultima Live UOP's using standard osi maps and darkshard custom maps..

It seems all my maps are reading the fel map no matter what map i try to use as a custom map.. However if i replace the fel map i can walk around on my custom map.. But i would like to keep fel and have the custom maps..
 
I am using both without issue. The darkshard maps are mul and the rest uop.
Yeah I think it was an error on my part somehow lol.. I think that it was caused when the save crash was happening but the locations were still being saved to file when chopped and that somehow threw it all crazy. Since then I haven't noticed any issues at all and am LOVING this system!
 
This is a great system Praxiiz. One that we have not even seen its full potential and already it is powerful. I thought modifying world omniporter to recognise the new maps was hard, I am still adding damn doors to the first map. I have about decided to pull the other 2.
 
It makes me happy that people like the systems. It's taken a long time to get them to this point.
I agree this is an incredible system with great potential! You could do so many things with this and I can't wait to see this continue to develop!
 
Not really toyed with this one much yet but have been watching the thread with growing interest.
Got a couple of questions
-Am I able to put this in a server and have players connect to the server without having the .dll file on their side. (I know they won't be able to access new maps - but will the 'standard' ones if left un-changed still work?)
- If a player has the .dll installed, can they go and play on a server that doesn't use this system without changing the .dll back over?
- I'm also assuming that if a player wanted to patch their client, they'd have to swap out your .dll for the EA one to patch back up?

Cheers!
 
To answer your first question, yes you can. UltimaLive uses god client packets which are thrown away by the normal client. All packet sizes are valid sizes and will not crash a client that doesn't use UltimaLive. I currently have UltimaLive running on a production shard and we do not require players to use UltimaLive. I recommend modifying your Playermobile to check for UltimaLive before moving a player to a custom map. I think I've provided instructions for doing this. If your server sends a player to a map that isn't recognized by the normal client, and they don't have UltimaLive installed, they will get an unknown facet error and their client will exit.

To answer your third question - if the EA patcher detects that Igrping.dll is different, then it may replace it for the original. UltimaLive doesn't modify the behavior of the patcher, only the client. UltimaLive doesn't modify any files in the client folder, so I would imagine you can continue patching as normal.

The answer to your second question is no. The main issue is that as long as the Igrping.dll has been replaced in the client folder, the system will ignore the map files in the client folder.

Normally, the client loads the map files into memory in such a way that it uses the least amount of memory possible. The mechanism is called memory mapped files. Each map file has it's own memory space and the client reads directly from that space.

With UltimaLive injected into the client, the client thinks it is reading separate maps from separate memory spaces, but in reality it is reading them all from the same memory space and they are no longer memory mapped out to disk. This allows UltimaLive to load whatever map it wants into the space just before the client thinks that it is changing maps.

ai22.photobucket.com_albums_b347_Praxiiz_UltimaLiveVirtualSpace.png

The whole remapping of the memory space happens when windows loads the client.exe into memory, just before it starts executing. What this means is that UltimaLive cannot know if a shard supports UltimaLive until after it has already remapped the client memory.

Even if UltimaLive were to use the files right out of the client folder, it would still have this remapped memory in place. This is a little slower and is not guaranteed to work with a regular shard because UltimaLive uses some special packets to ensure that it does the map switching on time. A regular shard would not have these packets.

The easiest and cleanest way to disable UltimaLive for a shard that supports it is to not load UltimaLive in the first place when connecting to such a shard. This could be accomplished in several ways:
  1. A player could keep two copies of the client folder on their system (one with the replaced Igrping.dll and one without)
  2. A custom Launcher could be provided that would only load UltimaLive when the launcher was used, but players wouldn't be able to use Razor or AssistUO
  3. A batch file or another program could be used to switch the Igrping.dll in and out of the client folder.
 
Last edited:
Thanks for taking the time to explain that in full Praxiiz, good to know how and why something works rather than the simple fact that it either does or doesn't.
The only thing that's stopped me from using Ultima Live so far is, as I suspected, once installed you're limited to Ultima Live only servers. (More reason for everyone to use the system I guess ;) ! )
I could write a batch file to switch out the files or simply write some instructions up on my website as it's not that hard but I get the feeling, that for many players extra steps are a 'turn off' for a server.
If it was easy a checkbox in AssistUO/Razor then that would be awesome but such things are rarely that simple. :p

I'll continue to hash out some ways in how I could deliver & "sell" this to my players (Convincing current ones wouldn't be a problem, it's the new guys!)

Thanks!
 
Praxiiz, I remember reading somewhere that UltimaLive only will work with custom maps that mimic the size of tram/fel (7168 x 4096 I assume). Is there any way to overcome this so that a custom map size can be used?
 
Praxiiz, I remember reading somewhere that UltimaLive only will work with custom maps that mimic the size of tram/fel (7168 x 4096 I assume). Is there any way to overcome this so that a custom map size can be used?

You can use custom map sizes, but they need to stay under the size of Felucca and Trammel. It's a memory size thing more than it is a map dimension restriction. Really the only reason this restriction even applies is because I had to choose a static size to make the fixed memory space when loading the client.

It could be made larger in which case the client would use more memory on the player's computer. You could in theory have really large maps.
 
Thats great to know that its not a limitation.

Are there changes that would need to be made to utilize it with larger maps, or will that work "out of the box"? I'm talking strictly code changes within the Ultima Live package, not client.exe changes.
 
I just remembered why I put that restriction in. It has to do with the UOP format. Instead of reconstructing it in the client, I took the lazy way out and just parsed it. I copy the existing Felucca map into client memory, but I leave all the headers and offsets in the client alone. I just jump to the to the bytes according to the header and overwrite them.

To get larger maps using the newer clients that are using UOP, I'd have to implement all of the UOP format. It's doable, I just don't know when I'll get to it. It requires calculating file name hashes and some things like that.

One second thought, if a shard has a valid UOP map with the headers and hashes already done, I could just copy it over instead and it could work the same way.

As for the *.MUL files...

Making it user configurable wouldn't be too difficult, although there could be problems if a player doesn't have enough fixed memory space allocated for the shard they are playing on. I suppose I could put a check in there when they log in though, and if any maps are too big, I could throw and error and close the client or something.

FileManager.h
Code:
static const int MAP_MEMORY_SIZE = 100000000;
static const int STAIDX_MEMORY_SIZE = 10000000;
static const int STATICS_MEMORY_SIZE = 200000000;

7168 / 8 = 896 blocks
4096 / 8 = 512 block

896 blocks width x 512 blocks high = 458,752 blocks

458752 blocks * 196 bytes/block = 89,915,392 bytes for map0.mul
100,000,000 - 89915392 = 10,084,608 bytes
It looks like I allocated about 10 megs more than Felucca / Trammel.

458,752 * 12 = 5,505,024 bytes
10,000,000 - 5,505,024 = 4494976 bytes for staidx0.mul
Seems like I left quite a bit of margin in that file.

Finally, the statics files have 200,000,000 bytes. Those aren't a fixed size like the index and the map.mul. Their size depends on how densely you decorate. The more statics on the map, the larger this file gets. On a stock map, it seems like there are 22 megs of them, so there really should be plenty of room to decorate
 
Last edited:
Hello,

I tired to implement this as it seems awesome.

whenever I try to connect the client crashes on the "Entering Britainnia..." screen.

The client version is 7.0.34.23

Has anyone gotten 7.0.34.23 to work with this?

I have also tried the Debug.dll however that crashes the client before it even opens.
last message is
MAP DIMENSION POINTER: 0x688194


Any feed back would be appreciated

thanks!
 
I tried it with 7.0.34.23 today. No crash. But I did only the basic install without static hue. Tested the harvesting system, and it works great until now. So, no additional map or something else, only the base + harvesting system.

Next step will be adding the static hue and trying to add an additional custom map.

Great System! Thank you.
 
Last edited:
Status
Not open for further replies.
Back