What I'm trying to do here is take away all of the AOS/SE Templates and replace them with common UOR templates.
Ex: Tamer, Thief, Bard, ETC.
any guidance as to where I should start to make these changes?

V/R

Character Creation.png
 
Last edited:
Character creation.cs I beleive is where you can change the name and skills given. Idk if you would have to modify the Gump at all
 
So this modifies the starting skills, would you happen know how to change the name and images within the gump? I have UOFiddler to get the CliLoc values but I just cant find a file to do that.

C#:
private static Mobile m_Mobile;

        private static void SetSkills( Mobile m, SkillNameValue[] skills, int prof )
        {
            switch ( prof )
            {
                case 1: // Warrior
                {
                    skills = new SkillNameValue[]
                        {
                            new SkillNameValue( SkillName.Anatomy, 30 ),
                            new SkillNameValue( SkillName.Healing, 45 ),
                            new SkillNameValue( SkillName.Swords, 35 ),
                            new SkillNameValue( SkillName.Tactics, 50 )
                        };

                    break;
                }
                case 2: // Magician
                {
                    skills = new SkillNameValue[]
                        {
                            new SkillNameValue( SkillName.EvalInt, 30 ),
                            new SkillNameValue( SkillName.Wrestling, 30 ),
                            new SkillNameValue( SkillName.Magery, 50 ),
                            new SkillNameValue( SkillName.Meditation, 50 )
                        };

                    break;
                }
                case 3: // Blacksmith
                {
                    skills = new SkillNameValue[]
                        {
                            new SkillNameValue( SkillName.Mining, 30 ),
                            new SkillNameValue( SkillName.ArmsLore, 30 ),
                            new SkillNameValue( SkillName.Blacksmith, 50 ),
                            new SkillNameValue( SkillName.Tinkering, 50 )
                        };

                    break;
                }
                case 4: // Necromancer
                {
                    skills = new SkillNameValue[]
                        {
                            new SkillNameValue( SkillName.Necromancy, 50 ),
                            new SkillNameValue( SkillName.Focus, 30 ),
                            new SkillNameValue( SkillName.SpiritSpeak, 30 ),
                            new SkillNameValue( SkillName.Swords, 30 ),
                            new SkillNameValue( SkillName.Tactics, 20 )
                        };

                    break;
                }
                case 5: // Paladin
                {
                    skills = new SkillNameValue[]
                        {
                            new SkillNameValue( SkillName.Chivalry, 51 ),
                            new SkillNameValue( SkillName.Swords, 49 ),
                            new SkillNameValue( SkillName.Focus, 30 ),
                            new SkillNameValue( SkillName.Tactics, 30 )
                        };

                    break;
                }
                case 6:    //Samurai
                {
                    skills = new SkillNameValue[]
                        {
                            new SkillNameValue( SkillName.Bushido, 50 ),
                            new SkillNameValue( SkillName.Swords, 50 ),
                            new SkillNameValue( SkillName.Anatomy, 30 ),
                            new SkillNameValue( SkillName.Healing, 30 )
                    };
                    break;
                }
                case 7:    //Ninja
                {
                    skills = new SkillNameValue[]
                        {
                            new SkillNameValue( SkillName.Ninjitsu, 50 ),
                            new SkillNameValue( SkillName.Hiding, 50 ),
                            new SkillNameValue( SkillName.Fencing, 30 ),
                            new SkillNameValue( SkillName.Stealth, 30 )
                        };
                    break;
                }
                default:
                {
                    if ( !ValidSkills( skills ) )
                        return;

                    break;
                }
            }
 
I'm guessing you would have to change the Gump. I may have seen it when I was going through them on uofiddler bit I dont have any clue how to change them myself. Thats not really something ive gotten into
 
I am going to sound all doom and gloom here, but what you are trying to do is no simple task...or may be impossible. That screen is a client-side screen so you would need to change the gump images to something else and then find the cliloc entries and change that text (HOPING those cliloc numbers are not used elswhere). If you can manage to get that far, then you should be able to change the CharacterCreation.cs to accomodate the buttons.

It is because of these things, that some shards let you go through the bullshit of making a character with the client, but then dump your character into a room where you have to pick everything all over again...except based on that shard's situation/design.
 
Yea I agree with Djeryv there, would be best to auto fill the char slots with empty chars or spoof it to make the client think the slots are filled.
Then you would get into the game and there you can do your full character creation gump however you want.

Changing this on the default character creation? Not sure if that is actually doable without to many side effects.
 
To change the text, It's a simple matter of editing and saving the entries in UOFiddler and then saving the cliloc.xxx file for the langauge(s) your shard uses and distributing them to players.

The Cliloc numbers for the player job choices appear to be 1061176 - 1061181 for my client, the descriptions are 1061225 - 1061231. I don't think you will have much trouble with those being used elsewhere, the texts are quite specific and ordered together.

The gumps will be harder and the same art may have been used in other places ingame, but should be possible as I'm quite sure I've seen it done before.

The location of the cliloc entries and a an example using existing art attached. In this case I changed Warrior to Knight. Will look at the art situation later.
Post automatically merged:

The profession Icons start at 0x15A9, there are many, some may no longer be used, but in any case there exists already graphics that "match" that you can reuse, ie, a lute for bard, a horse for tamer I guess (would have preferred a shepherd's crook but oh well) and coins, which could be used for a thief.

So, there's two for each, one pressed one depressed, you can right click the pair you want to use and save as bmp, then rightclick and replace the one you don't wish to use. Then, save and redistribute the new gumpart.mul and gumpartaidx to client. in this example, I changed samurai and ninja to bard and ranger respectively)

And speaking of, the Clilocs for the SE expansion Start in a different section, at 1062948, names first, then descriptions. Keep in mind if you replace SE or AOS profession Slots and are targetting a lower expansion, you will need to allow those to be created serverside. Somewhere.
 

Attachments

  • jobs1.PNG
    jobs1.PNG
    5.4 KB · Views: 74
  • jobs2.PNG
    jobs2.PNG
    21.1 KB · Views: 97
  • jobs3.png
    jobs3.png
    474.3 KB · Views: 100
  • bard.png
    bard.png
    217.7 KB · Views: 100
  • icons.PNG
    icons.PNG
    109.5 KB · Views: 92
Last edited:
only thing im still confused on is the expansions blocking players from using that pre made template, I changed starting locations of the edited templates but still receiving that AOS/SE message.
Post automatically merged:

Got all the CLilocs and Gumps situated.
Post automatically merged:

 

Attachments

  • Character Creation Finished.png
    Character Creation Finished.png
    311.8 KB · Views: 77
  • AOS-SE.png
    AOS-SE.png
    267.6 KB · Views: 77
Last edited:
What you are looken for is called "expansion packet" i name it a bit in this post. 0xB9


Im away on hollyday and dont have a computer.

-Grim
 
ive been trying different things out all day and have yet to get this to work. ive looked into expansioninfo.cs but cant find anything.
 
ive been trying different things out all day and have yet to get this to work. ive looked into expansioninfo.cs but cant find anything.

I Will not be home until 18th.

The server packet you need to modify is The one sent after the login packet. It controll The festures The client are allowed to use. The packet sent to client is 0xB9.

The change is in core not in The scripts. Just to dubbel check. Have you cellected Aos as expansion? You can try that and compar The packet sent

-Grim
 
Last edited:
librettomafia, I believe he is referring to this part, looks like it breaks out each expansion into clientflags, featureflags, charlistflags and housingflags:

C#:
Table = new[]
            {
                new ExpansionInfo(
                    0,
                    "None",
                    ClientFlags.None,
                    FeatureFlags.ExpansionNone,
                    CharacterListFlags.ExpansionNone,
                    HousingFlags.None),
                new ExpansionInfo(
                    1,
                    "The Second Age",
                    ClientFlags.Felucca,
                    FeatureFlags.ExpansionT2A,
                    CharacterListFlags.ExpansionT2A,
                    HousingFlags.None),
                new ExpansionInfo(
                    2,
                    "Renaissance",
                    ClientFlags.Trammel,
                    FeatureFlags.ExpansionUOR,
                    CharacterListFlags.ExpansionUOR,
                    HousingFlags.None),
                new ExpansionInfo(
                    3,
                    "Third Dawn",
                    ClientFlags.Ilshenar,
                    FeatureFlags.ExpansionUOTD,
                    CharacterListFlags.ExpansionUOTD,
                    HousingFlags.None),
                new ExpansionInfo(
                    4,
                    "Blackthorn's Revenge",
                    ClientFlags.Ilshenar,
                    FeatureFlags.ExpansionLBR,
                    CharacterListFlags.ExpansionLBR,
                    HousingFlags.None),
                new ExpansionInfo(
                    5,
                    "Age of Shadows",
                    ClientFlags.Malas,
                    FeatureFlags.ExpansionAOS,
                    CharacterListFlags.ExpansionAOS,
                    HousingFlags.HousingAOS),
                new ExpansionInfo(
                    6,
                    "Samurai Empire",
                    ClientFlags.Tokuno,
                    FeatureFlags.ExpansionSE,
                    CharacterListFlags.ExpansionSE,
                    HousingFlags.HousingSE),
                new ExpansionInfo(
                    7,
                    "Mondain's Legacy",
                    new ClientVersion("5.0.0a"),
                    FeatureFlags.ExpansionML,
                    CharacterListFlags.ExpansionML,
                    HousingFlags.HousingML),
                new ExpansionInfo(
                    8,
                    "Stygian Abyss",
                    ClientFlags.TerMur,
                    FeatureFlags.ExpansionSA,
                    CharacterListFlags.ExpansionSA,
                    HousingFlags.HousingSA),
                new ExpansionInfo(
                    9,
                    "High Seas",
                    new ClientVersion("7.0.9.0"),
                    FeatureFlags.ExpansionHS,
                    CharacterListFlags.ExpansionHS,
                    HousingFlags.HousingHS),
                new ExpansionInfo(
                    10,
                    "Time of Legends",
                    new ClientVersion("7.0.45.65"),
                    FeatureFlags.ExpansionTOL,
                    CharacterListFlags.ExpansionTOL,
                    HousingFlags.HousingTOL)
            };
        }

So if you are using Expansion.T2A in your currentexpansion.cs,

you can try changing the T2A section to look like this:

C#:
new ExpansionInfo(
                    1,
                    "The Second Age",
                    ClientFlags.Felucca,
                    FeatureFlags.ExpansionSE,
                    CharacterListFlags.ExpansionSE,
                    HousingFlags.None),

To enable the features. I tried just changing the Charlist Flags but still got the error message that I needed AOS/SE to use those profession slots. So I changed both charlistflags and featureflags, and was able to create a character with those additional profession slots, but am at work so have limited abilities to test things at the moment. I did chose SE as the expansion, so I still have 7 "top level" profession slots but fortunately it does still prevent elves/gargs on character create. What worries me now is whether this enables other features from later expansions that I don't want once ingame.

Grim, I realize you are on vacation, but from your recollection, will this enable other later expansion features or have any other undesired effects that you know of? Is there a different/better way?
 
this is my current line for ExpansionInfo.cs im still getting that error about AOS/SE Expansion...im just not understanding this. ill post my CharacterCreation.cs along with ExpansionInfo.cs

I really appreciate you taking time out to help me out.

C#:
                new ExpansionInfo(
                    2,
                    "Renaissance",
                    ClientFlags.Trammel,
                    FeatureFlags.ExpansionSE,
                    CharacterListFlags.ExpansionSE,
                    HousingFlags.None),
Post automatically merged:

ive been thinking maybe this line has a bit to do with it. this is AFTER making changes trying to solve.

C#:
switch ( args.Profession )
            {
                case 4: //Tailor
                {
                    if ( (flags & ClientFlags.Felucca) != 0 )
                    {
                        return new CityInfo( "Britain", "Sweet Dreams Inn", 3503, 2574, 14, Map.Felucca );
                    }
                    else
                    {
                        useHaven = true;

                        new BadStartMessage( m, 1062205 );
                        /*
                         * Unfortunately you are playing on a *NON-Age-Of-Shadows* game
                         * installation and cannot be transported to Malas. 
                         * You will not be able to take your new player quest in Malas
                         * without an AOS client.  You are now being taken to the city of
                         * Haven on the Trammel facet.
                         * */
                    }

                    break;
                }
                case 5:    //Animal Tamer
                {
                    return m_NewHavenInfo;
                }
                case 6:    //Bard
                {
                    if ( (flags & ClientFlags.Felucca) != 0 )
                    {
                        return new CityInfo( "Britain", "Sweet Dreams Inn", 3503, 2574, 14, Map.Felucca );
                    }
                    else
                    {
                        useHaven = false;

                        new BadStartMessage( m, 1063487 );
                        /*
                         * Unfortunately you are playing on a *NON-Samurai-Empire* game
                         * installation and cannot be transported to Tokuno.
                         * You will not be able to take your new player quest in Tokuno
                         * without an SE client. You are now being taken to the city of
                         * Haven on the Trammel facet.
                         * */
                    }

                    break;
                }
                case 7:    //Archer
                {
                    if ( (flags & ClientFlags.Felucca) != 0 )
                    {
                        return new CityInfo( "Britain", "Sweet Dreams Inn", 3503, 2574, 14, Map.Felucca );
                    }
                    else
                    {
                        useHaven = false;

                        new BadStartMessage( m, 1063487 );
                        /*
                         * Unfortunately you are playing on a *NON-Samurai-Empire* game
                         * installation and cannot be transported to Tokuno.
                         * You will not be able to take your new player quest in Tokuno
                         * without an SE client. You are now being taken to the city of
                         * Haven on the Trammel facet.
                         * */
                    }

                    break;
                }
            }

            if( useHaven )
                return m_NewHavenInfo;
            else
                return args.City;
        }
 

Attachments

  • ExpansionInfo.cs
    8.8 KB · Views: 3
  • CharacterCreation.cs
    43 KB · Views: 2
Did you also change the numerical range in verify profession? That's the only other change I made. But I'm also using servuo, will have to retest everything on runuo when I get home
 
are you talking about these?

C#:
        public static bool VerifyProfession( int profession )
        {
            if ( profession < 0 )
                return false;
            else if ( profession < 4   )
                return true;
            else if ( Core.AOS && profession < 6 )
                return true;
            else if ( Core.SE && profession < 8 )
                return true;
            else
                return false;
        }
 
this is what mine looks like, keeping in mind I am using ServUO, but looks very similar in RunUO

C#:
     public static bool VerifyProfession(int profession)
                {
                        if ( profession < 0 )
                                return false;
                        else if ( profession < 8 )
                                return true;
                        else
                                return false;
                }
 
that is exactly how mine looks but for whatever reason im still not able to use those templates..it would be a huge setback to change to servuo but damn.

C#:
        public static bool VerifyProfession( int profession )
        {
            if ( profession < 0 )
                return false;
            else if ( profession < 8 )
                return true;
            else
                return false;
        }
Post automatically merged:

would this have any effect on why its not working?

C#:
            ClientFlags flags = args.State == null ? ClientFlags.None : args.State.Flags;
            Mobile m = args.Mobile;

            switch ( args.Profession )
            {
                case 4: //Tailor
                {
                    if ( (flags & ClientFlags.Malas) != 0 )
                    {
                        return new CityInfo( "Britain", "Sweet Dreams Inn", 3503, 2574, 14, Map.Felucca );
                    }
                    else
                    {
                        useHaven = true;

                        new BadStartMessage( m, 1062205 );
                        /*
                         * Unfortunately you are playing on a *NON-Age-Of-Shadows* game
                         * installation and cannot be transported to Malas. 
                         * You will not be able to take your new player quest in Malas
                         * without an AOS client.  You are now being taken to the city of
                         * Haven on the Trammel facet.
                         * */
                    }

                    break;
                }
 
that is exactly how mine looks but for whatever reason im still not able to use those templates..it would be a huge setback to change to servuo but damn.

C#:
        public static bool VerifyProfession( int profession )
        {
            if ( profession < 0 )
                return false;
            else if ( profession < 8 )
                return true;
            else
                return false;
        }
Post automatically merged:

would this have any effect on why its not working?

C#:
            ClientFlags flags = args.State == null ? ClientFlags.None : args.State.Flags;
            Mobile m = args.Mobile;

            switch ( args.Profession )
            {
                case 4: //Tailor
                {
                    if ( (flags & ClientFlags.Malas) != 0 )
                    {
                        return new CityInfo( "Britain", "Sweet Dreams Inn", 3503, 2574, 14, Map.Felucca );
                    }
                    else
                    {
                        useHaven = true;

                        new BadStartMessage( m, 1062205 );
                        /*
                         * Unfortunately you are playing on a *NON-Age-Of-Shadows* game
                         * installation and cannot be transported to Malas.
                         * You will not be able to take your new player quest in Malas
                         * without an AOS client.  You are now being taken to the city of
                         * Haven on the Trammel facet.
                         * */
                    }

                    break;
                }
I'm not sure. I don't have that code. But according to the text (and corresponding cliloc) it looks like it would still allow you to make the character, just sends you to haven. There must be a way to do it without changing softwares.
 
whatever it is its far beyond what I know lol ive been at this for a few days now
Post automatically merged:

Only way I've figured it to work is if my CurrentExpansion.cs is changed, which I'm avoiding doing because I want the classic UOR feel.

C#:
using System;

using Server.Accounting;
using Server.Network;

namespace Server
{
    public class CurrentExpansion
    {
        private static readonly Expansion Expansion = Expansion.UOR;

        public static void Configure()
        {
            Core.Expansion = Expansion.SE;

            AccountGold.Enabled = Core.UOR;
            AccountGold.ConvertOnBank = true;
            AccountGold.ConvertOnTrade = false;
            VirtualCheck.UseEditGump = true;

            bool Enabled = Core.UOR;

            Mobile.InsuranceEnabled = Enabled;
            ObjectPropertyList.Enabled = Enabled;
            Mobile.VisibleDamageType = Enabled ? VisibleDamageType.Related : VisibleDamageType.None;
            Mobile.GuildClickMessage = !Enabled;
            Mobile.AsciiClickMessage = !Enabled;

            if ( Enabled )
            {
                AOS.DisableStatInfluences();

                if ( ObjectPropertyList.Enabled )
                    PacketHandlers.SingleClickProps = false; // single click for everything is overriden to check object property list

                Mobile.ActionDelay = 1000;
                Mobile.AOSStatusHandler = new AOSStatusHandler( AOS.GetStatus );
            }
        }
    }
}
 
Last edited:
Mine is set to Pre AOS and still working.

Really dumb question, but you did recompile your core after making the change to expansioninfo, right?
 
rename your server.exe to server.bak.

copy and paste this to a file named compile.bat in the same folder

C#:
del server.exe
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc /optimize /unsafe /t:exe /out:RunUO.exe /win32icon:Server\runuo.ico /d:NEWTIMERS /d:NEWPARENT /recurse:Server\*.cs

and run it. you should get a new server.exe with todays date on it and the expansion info changes included./
 
librettomafia, I believe he is referring to this part, looks like it breaks out each expansion into clientflags, featureflags, charlistflags and housingflags:

C#:
Table = new[]
            {
                new ExpansionInfo(
                    0,
                    "None",
                    ClientFlags.None,
                    FeatureFlags.ExpansionNone,
                    CharacterListFlags.ExpansionNone,
                    HousingFlags.None),
                new ExpansionInfo(
                    1,
                    "The Second Age",
                    ClientFlags.Felucca,
                    FeatureFlags.ExpansionT2A,
                    CharacterListFlags.ExpansionT2A,
                    HousingFlags.None),
                new ExpansionInfo(
                    2,
                    "Renaissance",
                    ClientFlags.Trammel,
                    FeatureFlags.ExpansionUOR,
                    CharacterListFlags.ExpansionUOR,
                    HousingFlags.None),
                new ExpansionInfo(
                    3,
                    "Third Dawn",
                    ClientFlags.Ilshenar,
                    FeatureFlags.ExpansionUOTD,
                    CharacterListFlags.ExpansionUOTD,
                    HousingFlags.None),
                new ExpansionInfo(
                    4,
                    "Blackthorn's Revenge",
                    ClientFlags.Ilshenar,
                    FeatureFlags.ExpansionLBR,
                    CharacterListFlags.ExpansionLBR,
                    HousingFlags.None),
                new ExpansionInfo(
                    5,
                    "Age of Shadows",
                    ClientFlags.Malas,
                    FeatureFlags.ExpansionAOS,
                    CharacterListFlags.ExpansionAOS,
                    HousingFlags.HousingAOS),
                new ExpansionInfo(
                    6,
                    "Samurai Empire",
                    ClientFlags.Tokuno,
                    FeatureFlags.ExpansionSE,
                    CharacterListFlags.ExpansionSE,
                    HousingFlags.HousingSE),
                new ExpansionInfo(
                    7,
                    "Mondain's Legacy",
                    new ClientVersion("5.0.0a"),
                    FeatureFlags.ExpansionML,
                    CharacterListFlags.ExpansionML,
                    HousingFlags.HousingML),
                new ExpansionInfo(
                    8,
                    "Stygian Abyss",
                    ClientFlags.TerMur,
                    FeatureFlags.ExpansionSA,
                    CharacterListFlags.ExpansionSA,
                    HousingFlags.HousingSA),
                new ExpansionInfo(
                    9,
                    "High Seas",
                    new ClientVersion("7.0.9.0"),
                    FeatureFlags.ExpansionHS,
                    CharacterListFlags.ExpansionHS,
                    HousingFlags.HousingHS),
                new ExpansionInfo(
                    10,
                    "Time of Legends",
                    new ClientVersion("7.0.45.65"),
                    FeatureFlags.ExpansionTOL,
                    CharacterListFlags.ExpansionTOL,
                    HousingFlags.HousingTOL)
            };
        }

So if you are using Expansion.T2A in your currentexpansion.cs,

you can try changing the T2A section to look like this:

C#:
new ExpansionInfo(
                    1,
                    "The Second Age",
                    ClientFlags.Felucca,
                    FeatureFlags.ExpansionSE,
                    CharacterListFlags.ExpansionSE,
                    HousingFlags.None),

To enable the features. I tried just changing the Charlist Flags but still got the error message that I needed AOS/SE to use those profession slots. So I changed both charlistflags and featureflags, and was able to create a character with those additional profession slots, but am at work so have limited abilities to test things at the moment. I did chose SE as the expansion, so I still have 7 "top level" profession slots but fortunately it does still prevent elves/gargs on character create. What worries me now is whether this enables other features from later expansions that I don't want once ingame.

Grim, I realize you are on vacation, but from your recollection, will this enable other later expansion features or have any other undesired effects that you know of? Is there a different/better way?

Yes and No. The client festures will be activating things like new professions, races and sounds. Moongate location lists and soft features like crafting is checked at the server and can be changed.

This packet was added from T2A and future and is used to control how the hardcoded things in the client will work basen on what you have paid for at a OSI server. What expansion and extra festures like extra characrer slots or If you joint a SP like server with only one characer for each account.

Client.exe is same for all classic clients. GOLD. AOS2D and so on. Only the "vanilla" client is different. They changed the update approch from T2A to get out of heavy costs to keep different clients alive.
The feature flag + filestructure is what client.exe are using. T2A dont get MP3 filen at the release of UOR you had to "reinstall" client. But in reallity, If you copy mp3 files from UOR and add feature flag for UOR you would get mp3 throw the T2A installation.

-Grim
 
Last edited:
Okay,

After some testing, I have a figure that you need to change both 0xB9 and 0xA9 to make it work. The downside is that this turns the client into that expansion. So with SE, you will get all features like the special moves book on the right side in your paperdoll and skills will also be added to the list sins the client has that information hardcoded into it.

In this case, you will be needing to send a new profession file to your players so the best solution would be to distribute a patched Exe file at the same time.

I did reverse-engineer the client to figure out where the check was made. You can kill the check by hexedit your client.exe and change (NOP) the following bytes.

0F845A0100006A40 => 9090909090906A40
0F84E500000083FE => 90909090909083FE

This solution will work on any classic client with version 4.0.4t to 6.0.6.1 from gold and up.

-Grim
 
Last edited:
Or you could, like I mentioned befor ;) do the character creation ingame while you join into the world with a blank slate itself.

Then you can do whatever your heart desires and you wouldnt need to distribute hacked up files.
 
Do you refer to something like a glorified skill ball? The issue is that you cant auto to pass the character creation. Well, you could fill the account with "unused" character but if the player deletes one what then? I think that not allowing delete from the character list would make it really strange for "new" players to that shard. Then that would also require an in-game menus system for handling characters.

A client modification like this is still optional. There would not be an impact if a player decides to use a standard (non-patched) client. The player could simply not be able to select the four highest standard professions (ninja/paladin) and the login would work as normal.

But a profession ball that is locked (with a 3-day delete timer) located in the bag of a new character is not a bad idea.

-Grim
 
Hmm no I mean that it would fill empty slots with empty playermobile objects basically, when you join the world you would be unable to move, get a gump you can close and then create your character there. If you would go and delete the char? Then you would basically reset the char to being blank including the name.

Do you wouldnt need a skillball for that ^^
 
hehe no worries, I just feel like it is a cleaner way than to even hack up the client.exe and trust me I looked into hacking the client.exe up to allow more visible skill slots with only minimal success :p
 
I did reverse-engineer the client to figure out where the check was made. You can kill the check by hexedit your client.exe and change (NOP) the following bytes.

0F845A0100006A40 => 9090909090906A40
0F84E500000083FE => 90909090909083FE

This solution will work on any classic client with version 4.0.4t to 6.0.6.1 from gold and up.

-Grim
Thank you, Grim. You wouldn't happen to know how to disable the "You must have three unique skills chosen!" prompt after clicking a category for nested professions? I found the message text in the .exe, but have no idea how to suppress the message from being shown, if that is even possible. (Essence UCS was supposed to be able to do this, but I've never been able to obtain it) It's not a big deal, as it doesn't break anything and still allows you to continue creating your character afterwards, but it is confusing as it makes it seem like the advanced button was clicked.
 
I did reverse-engineer the client to figure out where the check was made. You can kill the check by hexedit your client.exe and change (NOP) the following bytes.

0F845A0100006A40 => 9090909090906A40
0F84E500000083FE => 90909090909083FE

This solution will work on any classic client with version 4.0.4t to 6.0.6.1 from gold and up.

Hey Grim,

Any chance that you know what the fix would be for Client 7.0.15.1?

I was able to get everything open in HxD but couldnt find 0F845A0100006A40 or 0F845A0100006A40. I'm also not sure how to properly change these values as you've explained before. Any help would be greatly appreciated. Its such a small detail, but it makes a big difference during character creation.
 
Okay, There are four things to patch. each skill circle on the menu. I have only tested it in 7.0.15.1 but the same byte sequence exists in 7.0.23.1.

7.0.23.1 is the last client that uses the RTP patch file format and I will not reverse any newer than that.

0F84CD00000083F8 => 90909090909083F8
0f84c40000006A40 => 9090909090906A40

83F8067463 => 83F8069090
83F807745E => 83F8079090

Edit:
For Animation, just remove anim2 to anim5 and leave the def files. def is the fallback and if the client doesn't find IDX/MUL it will use them instead.
It is not possible to manipulate ART.MUL in that way. I think the fall back is used only if the client can't find an image for an item. You could use one from an older client.

I have done an ART move from a T2A client into 5.0.9.1 as an example but that takes time. (a lot of it)

-Grim
 
Last edited:
Back