Latest ServUO repo - UltimaLive 0.98 installation, additional maps / core won't compile

Beefcake

Well-Known Member
Jul 30, 2015
58
3
29
Could anyone help me get this sorted out? This is on a fresh install for testing, my current install won't compile either.
I've followed instructions according to: https://www.servuo.com/archive/ultimalive.687/

(1) UltimaLive Scripts
-Move included server files into (ServUO/Scripts/Customs)
// UltimaLive-Master (folder): docs (folder), igrping (folder), mhook (folder), ServerSideScripts (folder), UltimaLive (folder), VisualStudio2013 (folder), VisualStudio2015 (folder), .gitIgnore (file), README.md (file)

//[Suggestion1]: select only ServerSideScripts (folder)

(2) UltimaLive Scripts/Client (folder)
(ServUO/Scripts/Customs) & (C:\Program Files(x86)\Client)

-Rename (2.2)
igrping.dll to _igrping.dll
-Move (2.3)
UltimaLive's igrping.dll into Client (folder); (Note: file no longer exists in 'ServUO/Scripts/Customs')

(3) Edit PlayerMobile.cs
(ServUO/Scripts/Mobile)

-Adjust (3.2)
C#:
public class PlayerMobile : Mobile, IHonorTarget
to
C#:
public partial class PlayerMobile : Mobile, IHonorTarget

-Adjust (3.3)
C#:
        public override void SetLocation(Point3D loc, bool isTeleport)
        {
            if (!isTeleport && IsPlayer() && !Flying)
            {
                // moving, not teleporting
                int zDrop = (Location.Z - loc.Z);

                if (zDrop > 20) // we fell more than one story
                {
                    Hits -= ((zDrop / 20) * 10) - 5; // deal some damage; does not kill, disrupt, etc
                    SendMessage("Ouch!");
                }
            }

            base.SetLocation(loc, isTeleport);

            if (isTeleport || --m_NextProtectionCheck == 0)
            {
                RecheckTownProtection();
            }          
        }
to
C#:
        public override void SetLocation(Point3D loc, bool isTeleport)
        {
            if (!isTeleport && IsPlayer() && !Flying)
            {
                // moving, not teleporting
                int zDrop = (Location.Z - loc.Z);

                if (zDrop > 20) // we fell more than one story
                {
                    Hits -= ((zDrop / 20) * 10) - 5; // deal some damage; does not kill, disrupt, etc
                    SendMessage("Ouch!");
                }
            }

            base.SetLocation(loc, isTeleport);

            if (isTeleport || --m_NextProtectionCheck == 0)
            {
                RecheckTownProtection();
            }
           
            /* Begin UltimaLive Mod */
            if (BlockQuery != null)
            {
                m_PreviousMapBlock = BlockQuery.QueryMobile(this, m_PreviousMapBlock);
            }
            /* End UltimaLive Mod */          
        }

-Adjust (3.4)
C#:
        protected override void OnMapChange(Map oldMap)
        {          
            ViceVsVirtueSystem.OnMapChange(this);

            if (NetState != null && NetState.IsEnhancedClient)
            {
                Waypoints.OnMapChange(this, oldMap);
            }

            if ((Map != Faction.Facet && oldMap == Faction.Facet) || (Map == Faction.Facet && oldMap != Faction.Facet))
            {
                InvalidateProperties();
            }

            BaseGump.CheckCloseGumps(this);
           
            DesignContext context = m_DesignContext;

            if (context == null || m_NoRecursion)
            {
                return;
            }

            m_NoRecursion = true;

            HouseFoundation foundation = context.Foundation;

            if (Map != foundation.Map)
            {
                Map = foundation.Map;
            }

            m_NoRecursion = false;
        }
to
C#:
        protected override void OnMapChange(Map oldMap)
        {
            /* Begin UltimaLive Mod */
            if (BlockQuery != null)
            {
                m_PreviousMapBlock = BlockQuery.QueryMobile(this, m_PreviousMapBlock);
            }
            /* End UltimaLive Mod */
           
            ViceVsVirtueSystem.OnMapChange(this);

            if (NetState != null && NetState.IsEnhancedClient)
            {
                Waypoints.OnMapChange(this, oldMap);
            }

            if ((Map != Faction.Facet && oldMap == Faction.Facet) || (Map == Faction.Facet && oldMap != Faction.Facet))
            {
                InvalidateProperties();
            }

            BaseGump.CheckCloseGumps(this);
           
            DesignContext context = m_DesignContext;

            if (context == null || m_NoRecursion)
            {
                return;
            }

            m_NoRecursion = true;

            HouseFoundation foundation = context.Foundation;

            if (Map != foundation.Map)
            {
                Map = foundation.Map;
            }

            m_NoRecursion = false;
        }
After recompiling the core with administrative rights, the console indicates this message: IHonorTarget
13699

//Suggestion2:
-Comment out IHonorTarget in
(ServerUO /Scriots/Mobiles - PlayerMobile.cs) & (/Customs/UltimaLive/ServerSideScripts - PlayerMobilePartial.cs)


After including a new map, according to the instructions and recompiling the core with administrative rights
(4) Edit Map.cs, MapDefinitions.cs, MapRegistry.cs
(ServUO/Map.cs), (ServUO/Scripts/Misc/MapDefinitions.cs), (/Customs/UltimaLive/ServerSideScripts/MapRegistry.cs)

-Adjust (4.2) (ServUO/Map.cs)
C#:
       public static Map Felucca { get { return m_Maps[0]; } }
        public static Map Trammel { get { return m_Maps[1]; } }
        public static Map Ilshenar { get { return m_Maps[2]; } }
        public static Map Malas { get { return m_Maps[3]; } }
        public static Map Tokuno { get { return m_Maps[4]; } }
        public static Map TerMur { get { return m_Maps[5]; } }
        public static Map Internal { get { return m_Maps[0x7F]; } }
to

C#:
        public static Map Felucca { get { return m_Maps[0]; } }
        public static Map Trammel { get { return m_Maps[1]; } }
        public static Map Ilshenar { get { return m_Maps[2]; } }
        public static Map Malas { get { return m_Maps[3]; } }
        public static Map Tokuno { get { return m_Maps[4]; } }
        public static Map TerMur { get { return m_Maps[5]; } }
        public static Map ATestMap { get { return m_Maps[40]; } }
        public static Map Internal { get { return m_Maps[0x7F]; } }
-Adjust (4.3) (ServUO/Scripts/Misc/MapDefinitions.cs)

C#:
            if (Siege.SiegeShard)
            {
                RegisterMap(0, 0, 0, 7168, 4096, 4, "Felucca", MapRules.FeluccaRules);
                RegisterMap(1, 1, 1, 7168, 4096, 0, "Trammel", MapRules.FeluccaRules);
                RegisterMap(2, 2, 2, 2304, 1600, 1, "Ilshenar", MapRules.FeluccaRules);
                RegisterMap(3, 3, 3, 2560, 2048, 1, "Malas", MapRules.FeluccaRules);
                RegisterMap(4, 4, 4, 1448, 1448, 1, "Tokuno", MapRules.FeluccaRules);
                RegisterMap(5, 5, 5, 1280, 4096, 1, "TerMur", MapRules.FeluccaRules);
            }
            else
            {
                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);
            }
to

C#:
            if (Siege.SiegeShard)
            {
                RegisterMap(0, 0, 0, 7168, 4096, 4, "Felucca", MapRules.FeluccaRules);
                RegisterMap(1, 1, 1, 7168, 4096, 0, "Trammel", MapRules.FeluccaRules);
                RegisterMap(2, 2, 2, 2304, 1600, 1, "Ilshenar", MapRules.FeluccaRules);
                RegisterMap(3, 3, 3, 2560, 2048, 1, "Malas", MapRules.FeluccaRules);
                RegisterMap(4, 4, 4, 1448, 1448, 1, "Tokuno", MapRules.FeluccaRules);
                RegisterMap(5, 5, 5, 1280, 4096, 1, "TerMur", MapRules.FeluccaRules);
                RegisterMap(40, 0, 0, 1448, 1448, 1, "ATestMap", MapRules.FeluccaRules);
            }
            else
            {
                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(40, 0, 0, 1448, 1448, 1, "ATestMap", MapRules.FeluccaRules);
            }
-Adjust (4.4) (/Customs/UltimaLive/ServerSideScripts/MapRegistry.cs)

C#:
    public static void Configure()
    {
      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, 0, new Point2D(7168, 4096), new Point2D(5120, 4096));
      //AddMapDefinition(33, 0, new Point2D(7168, 4096), new Point2D(5120, 4096));
      //AddMapDefinition(34, 1, new Point2D(7168, 4096), new Point2D(5120, 4096));

      EventSink.ServerList += new ServerListEventHandler(EventSink_OnServerList);
      EventSink.Login += new LoginEventHandler(EventSink_Login);
    }
to

C#:
    public static void Configure()
    {
      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
      AddMapDefinition(40, 0, new Point2D(1448, 1448), new Point2D(1448, 1448)); //ATestMap

      //those are sample maps that use same original map...
      //AddMapDefinition(32, 0, new Point2D(7168, 4096), new Point2D(5120, 4096));
      //AddMapDefinition(33, 0, new Point2D(7168, 4096), new Point2D(5120, 4096));
      //AddMapDefinition(34, 1, new Point2D(7168, 4096), new Point2D(5120, 4096));

      EventSink.ServerList += new ServerListEventHandler(EventSink_OnServerList);
      EventSink.Login += new LoginEventHandler(EventSink_Login);
    }
After recompiling the core with administrative rights, the console displays this:

13700


I'm on a Windows10-Licensed & fully updated.
After removing the map edits, the server compiles just fine. And UltimaLive functionality exists; adding/removing statics, LandTiles, etc, and updating to other clients online. However, the streaming functionality does not.
 

Beefcake

Well-Known Member
Jul 30, 2015
58
3
29
I guess for whatever reason, as a general note: custom maps defined in MapDefinitions.cs are mirror copies of the original map, 0-5.
If the Yellow-circle # isn't defined within range of 0-5, than the map is invisible. Likewise, if the green-circle is defined within the range of 0-5, than the
resulting custom map is an exact mirror of the defined map#.
I.e, the custom map has map#4, removing statics/changing landIDs on map#4 removes the static/changes the landID on this custom map. (tokuno)
I.e, the custom map has map#5, removing statics/changing landIDs on map#5 removes the static/changes the landID on this custom map. (termur)
I.e, the custom map has map#0, removing statics/changing landIDs on felucca removes the static/changes the landID on this custom map. (felucca)

13704

If the Green-circled # is changed from the Yellow-circle, or in other words the Statics# from the Map#, than the custom map neither allows removal of statics, changing of landIDs, or walking on the map whatsoever. Both the Yellow & Green circle #'s must have the same #.


Testing results:
#1: Changing [green-circle #] to those indicated in MapRegistry.cs, *without transferring .mul
*Players may change from TerMur to the custom map.
*Z-axis isn't correct TerMur's -43 to custom map's 0.
*Movement isn't affected.
*Statics deleted on TerMur also deletes the statics on the custom map(s). & reciprocative.
*LandIDs changed on TerMur also changes the landIDs on the custom map(s). & reciprocative.

#2: Changing [green-circle #] to those indicated in MapRegistry.cs, *and transferring .mul
*Players may change from TerMur to the custom map,
*Z-axis isn't correct TerMur's -43 to custom map's 0.
*Movement is affected; cannot walk on the custom map.
*Statics deleted on TerMur also deletes the statics on the custom map(s). & cannot delete statics on custom map(s).
*LandIDs changed on TerMur also changes the landIDs on the custom map(s).

#3: Changing [green-circle #] to those of TerMur(#5), *without transferring .mul
*Players may change from TerMur to the custom map.
*Z-axis is correct TerMur's -43 to custom map's -43.
*Movement isn't affected.
*Statics deleted on TerMur also deletes the statics on the custom map(s). & reciprocative.
*LandIDs changed on TerMur also changes the LandIDs on the custom map(s). & reciprocative.

#4: Changing [green-circle #] to those of TerMur(#5), *and transferring .mul
*Players may change from TerMur to the custom map.
*Z-axis is correct TerMur's -43 to custom map's -43.
*Movement isn't affected
*Statics deleted on TerMur also deletes the statics on the custom map(s). & reciprocative.
*LandIDs changed on TerMur also changes the LandIDs on the custom map(s). & reciprocative.

#5: Changing [green-circle #] to those of Felucca(#0), *without transferring .mul
*Players may change from TerMur to the custom map.
*Z-Axis isn't correct TerMur's -43 to custom map's -5.
*Movement is affected; cannot walk on custom map.
*Statics deleted on TerMur also deletes the statics on the custom map(s). & cannot delete statics on custom map(s).
*LandIDs changed on TerMur also changes the LandID on the custom map(s). & reciprocative.

#6: Changing [green-circle #] to those of Felucca(#0), *and transferring .mul
*Players may change from TerMur to the custom map.
*Z-axis isn't correct TerMur's -43 to custom map's -5.
*Movement is affected; cannot walk on custom map.
*Statics deleted on TerMur also deletes the statics on the custom map(s). & cannot delete statics on custom map(s).
*LandIDs changed on TerMur also changes the LandID on the custom map(s). & reciprocative.

#7: Changing [yellow-circle & green-circle #] to those indicated in Map.cs, *without transferring .mul
*Players may change from TerMur to the custom map.
*Z-axis isn't correct TerMur's -43 to custom map's 0.
*Movement is affected; walk crashes client. / relog crashes client.
*Statics deleted on TerMur causes client to crash on the custom map(s). & cannot delete statics on custom map(s).
*LandIDs changed on TerMur also changes the LandID on the custom map(s), causes client to crash.

#8: Changing [yellow-circle & green-circle #] to those indicated in Map.cs, *and transferring .mul
*Players may change from TerMur to the custom map.
*Z-axis isn't correct TerMur's -43 to custom map's 0; correction causes client crash.
*Movement is affected; walk crashes client. / relog crashes client.
*Statics deleted on TerMur causes client to crash on the custom map(s). & cannot delete statics on custom map(s).
*LandIDs changed on TerMur also changes the LandID on the custom map(s), causes client to crash.

#9: Changing [yellow-circle & green-circle #) to those of TerMur(#5), changing MapRegistry.cs to those of TerMur(#5), *without trasnferring .mul
*Players may change from TerMur to the custom map.
*Z-axis is correct TerMur's -43 to custom map's -43.
*Movement isn't affected.
*Statics deleted on TerMur also deletes the statics on the custom map(s). & cannot delete statics on custom map(s).
*LandIDs changed on TerMur also changes the LandID on the custom map(s), causes client to crash.

#10: Changing [yellow-circle & green-circle #) to those of TerMur(#5), changing MapRegistry.cs to those of TerMur(#5), *no .mul to transfer

#11: Changing [green-circle #) to those of indicated in Map.cs, changing MapRegistry.cs to those of Map.cs, *without transferring .mul
*Players may change from TerMur to the custom map.
*Z-axis is correct TerMur's -43 to custom map's -43.
*Movement is affected; cannot walk on custom map.
*Statics deleted on TerMur also deletes the statics on the custom map(s). & cannot delete statics on custom map(s).
*LandIDs changed on TerMur also changes the LandID on the custom map(s). & cannot change LandID on custom map(s).

#12: Changing [Yellow-circle #) to those indicated in Map.cs, [Green-circle #) to those of TerMur(#5), changing MapRegistry.cs to those indicated in Map.cs
*Players cannot change from TerMur to the custom map; custom map is blank.
*Z-axis is correct TerMur's -43 to custom map's -43.

#13: Changing [Yellow-circle #) to those indicated in Map.cs, [Green-circle #) to those of TerMur(#5), changing MapRegistry.cs to those indicated in Map.cs, *and transferring .mul
*Players cannot change from TerMur to the custom map; custom map is blank.
*Z-axis is correct TerMur's -43 to custom map's -43.


#14: Changing [Yellow-circle # & green-circle #) to those indicated in Map.cs, changing MapRegistry.cs to those of TerMur(#5)
*Players can change from TerMur to the custom map
*Movement is affected; cannot walk on custom map, causes client crash / relog causes crash.
*Statics deleted on TerMur also deletes the statics on the custom map(s). & cannot delete statics on custom map(s).
Post automatically merged:

So, best-case-scenario:
UltimaLive allows live-editing of the original maps, and provides an additional 4 maps via adding 4 custom maps to Map.cs, MapDefinition, & MapRegistry,
setting their Map# & Static# to the originals (2-5), erasing the statics/landIDs from these maps, and wrapping the custom maps to Felucca/Trammel.

Then again, because trammel/felucca has certain statics which cannot be deleted (specifically those of itty bitty flowers and what not),
this doesn't allow dramatic changes to the original maps. Alternatively, could use TerMur, which has the largest X/Y of all the maps, then
wrap portions of felucca/trammel's oceans, to this custom map, allowing for an overall larger X/Y map.
Post automatically merged:

To perform best-case-scenario:
(1) Map.cs make a custom map, i.e (#33)
(2) MapDefinition.cs direct this custom map to TerMur (specifically 33, 5, 5)
(3) MapRegistry.cs indicate this custom map (33, 5, 5)
(4) Search for large ocean-portions in Trammel/Felucca, and wrap these portions to the custom map.
(5) Edit your custom map to liking, and/or create additional land masses in the ocean-portions of Trammel/Felucca

Again, this still provides live-map editing and streaming of these edits and .mul(s) to players, i.e w/out requirements of any downloading.
...So still a great mod anyway
Post automatically merged:

Excuse me, actually:

*I cannot edit my other posts anymore but the forum is still merging my replies.

To perform best-case-scenario:
(1) Map.cs make a custom map, i.e (#33)
(2) MapDefinition.cs direct this custom map to TerMur (specifically 33, 5, 5)
(3) MapRegistry.cs indicate this custom map (33, 33)
(4) Search for large ocean-portions in Trammel/Felucca, and wrap these portions to the custom map.
(5) Edit your custom map to liking, and/or create additional land masses in the ocean-portions of Trammel/Felucca

Again, this still provides live-map editing and streaming of these edits and .mul(s) to players, i.e w/out requirements of any downloading.
...So still a great mod anyway
Post automatically merged:

And portions of Trammel/Felucca which doesn't have those itty bitty flowers can be erased to further enlarge the ocean areas, example: Deceit iceisland.
Deceit Island: [go 4074, 527

This is actually easier to do than anticipated.
So, example: Just add two keyword teleporters on an admin character. Set the X/Y to cover the entire island area,
then [AreaID 100 and say your keywords. Of course, then you'll have to manually add static water to the whole area and this takes forever.
Otherwise, with personal experience, boats cannot be placed nor tranverse the area.

List of X/Y Trammel/Felucca Ocean:
Post automatically merged:

Ideally, you'll want to find portions of Trammel/Felucca which are most alike in dimension to TerMur, for wrapping purposes.
TerMur is (1280, 4096), this translates to portions of (1280, 4096), or at least (1280, -----) then further wrapping from the edge of this portion to the next portion,
if you couldn't find another (4096) portion.

Pain in the ass, however ultimately (pun intended) this would allow for a large streamable custom map probably the size of TerMur + Felucca oceans + Trammel Oceans, really gigantic.
Post automatically merged:

*Note: You must also [set LandAlt -5 to the (Z-axis) of the current water, a map clicking program makes this easier.
//
[And portions of Trammel/Felucca which doesn't have those itty bitty flowers can be erased to further enlarge the ocean areas, example: Deceit iceisland.
Deceit Island: [go 4074, 527

This is actually easier to do than anticipated.
So, example: Just add two keyword teleporters on an admin character. Set the X/Y to cover the entire island area,
then [AreaID 100 and say your keywords. Of course, then you'll have to manually add static water to the whole area and this takes forever.
Otherwise, with personal experience, boats cannot be placed nor tranverse the area.]
//

Would be awesome if I could edit my original post instead of adding further merges into a non-editable post.
 
Last edited:

Beefcake

Well-Known Member
Jul 30, 2015
58
3
29
Just another note:
adjust MapDefinition.cs in the black-circle, changes season from 1-4
13707(winter removes all the ittybitty flowers which UltimaLive does not) this change allows all of trammel & felucca to be wrapped into TerMur, and including Ilshenar/Malas/& Tokuno, equates to total size of X: 20648 Y: 17384 custom TerMur map
 

Beefcake

Well-Known Member
Jul 30, 2015
58
3
29
Just a suggestion:

Maintain Felucca as the permanent-empty 'ocean map', then mirror additional copies, to imitate an expansive ocean. And use maps 1-5 as continents.

I haven't actually tested whether boats will wrap to the mirrored custom map separately, or if they'll end up broken between both maps
 

Beefcake

Well-Known Member
Jul 30, 2015
58
3
29
just leaving a note:
wrapping works, the boats do transfer ocean to ocean on different custom maps
Post automatically merged:

note:
north to south boat travel takes approx. 17 minutes 28 seconds to transverse 7168 X-tiles

this would require 7 custom ocean maps to imitate a day on the in-game time cycle, which is 2 hours.
Post automatically merged:

excuse me, actually this was Y-axis not X.


note:
north to south boat travel takes approx. 17 minutes 28 seconds to transverse 4096 Y-tiles

this would require 7 custom ocean maps to imitate a day on the in-game time cycle, which is 2 hours.
 
Last edited:

Beefcake

Well-Known Member
Jul 30, 2015
58
3
29
Another suggestion:

because only the map/statics are mirrored, technically plain ol' non-static item tiles could be added to the custom maps to simulate 'static land',
buildings, etc, then just change BaseHouse ....and other files... wherever requires LandTiles/StaticTiles to plain itemIDs, to allow placement.

then, the world could be infinitely enlarged... to the maximum 200 maps allowed in UltimaLive.