im also expanding on the evil curse taking over the land... in the server the evil is now slowly gaining as players aren't actively pushing it back enough. here's a spoiler of what im adding next:

1594310288061.png

the strength and power of the new mob will be directly related to the curselevel
All his stats, and even his abilities will kick in if the evil is over a certain range. at high evil he will be unbeatable - this will force players to fight the evil together before he can be taken on.

He and his minions will also spawn randomly using the randomencounters engine we have been using to spawn reds/blues once the evil level hits a certain threshold. the all the lands will be affected if the evil is left unchecked.

hopefully this helps create a feeling of dread/evil/excitement that is lacking in "loot-finding" UO nowadays.
 
Last edited:
Hey!

Im sorry to ask but I am super new when it comes to servUO and UO in general. I played the original Odyssey a lot and I was about to try this expansion but for the life of me I just can figure out to install it.

Where could I find instructions on how to install this fork? Theyre super unclear to a noob like me. There are 4 files in the drop box with different dates. Some are server files and some are the client. I guess I need to extract one of the server file and one of the client file?

I was able to install Odyssey without issues but this is not working for me :(

Thanks in advance for the help.

Edit: When I try to load ultima-adventures with RunUO.exe its always giving me errors:


RunUO - [www.runuo.com] Version 2.1, Build 7469.17042
Core: Running on .NET Framework Version 4.0.30319
Core: Optimizing for 8 64-bit processors
Scripts: Compiling C# scripts...done (0 errors, 0 warnings)
Scripts: Skipping VB.NET Scripts...done (use -vb to enable)
Scripts: Verifying...done (7667 items, 1725 mobiles) (0.89 seconds)
Loading convo fragments... Done.
Regions: Loading...Warning: double SpawnEntry ID '4774'
Warning: double SpawnEntry ID '4775'
Warning: double SpawnEntry ID '4774'
Warning: double SpawnEntry ID '4775'
done
World: Loading...tiledata.mul was not found
Make sure your Scripts/Misc/DataPath.cs is properly configured
After pressing return an exception will be thrown and the server will terminate
An error was encountered while loading a saved object
- Type: Server.Mobiles.Townsperson
- Serial: 0x00013D4C
Delete the object? (y/n)

Maybe this can help?
 
Heya - that's because the fork is really something we're building for the online server - I post the server (complete with save) every month or so for people to help with the development. If you don't want to bother with updating and scripting and programming then you should just extract everything to your C drive and run classicuo.bat and join us on the server.

should be C:\Ultima-Adventures

you can also join the discord, ill send you the link privately.
Post automatically merged:

Just added the gravedigger NPC - a summonable npc that will fetch your corpse for you - useful when you died deep in a dungeon and don't want to bother going back... will cost you 30k however so its very pricey!
Post automatically merged:

also just added animal taming bulk orders to the game - still initial implementation however, rewards need to be tweaked
Post automatically merged:

on the server today:

1594665021940.png
 
Last edited:
First off, Finaltwist and Djeryv, thanks for the awesome UO experience. It's really great to be able to play a world that feels like an actually populated UO server, even while on a laptop disconnected from the Internet. Everything has been working great, but I've come across one (minor) issue below.


Version: Offline server, July 3rd archive
Issue: On a new character, when I attempt to join my first NPC guild (I've checked Warrior and Blacksmith) the initial cost is 8000 gold. Is that a change that snuck past the change log or possibly a bug?
 
unsure really... i haven't touched guilds in a long while

i really should get the new version out - tons has already changed since july 3rd - bug fixes, tweaks, etc etc. including the new dungeon too...
ill get to it soon, promise!
Post automatically merged:

we just added the animal taming bods and they work great. forces players to go out and explore!
Post automatically merged:

to your comment: i started editing odyssey a loooong time ago, before i made this fork available at all... might have been one of those changes.
 
I'm going to be updating the offline package soon... there have been some major changes to the game (more than i can list). for one, i just woke up this morning and thought it was ridiculous that all the fame/karma values were static figures just entered in each mobile's script. so i devised a dynamic system that calculates the karma/fame of a creature based on its attributes/skills and anything else i could think of (poison ability, breath damage, etc).

also, the curse system has been tested live now for 2 weeks and has undergone some major math changes... the system is pretty robust now. e.g. when players die the evil was able to defeat a good player, and so the evil increases.

there are many more changes i will list here when i update the offline. everything is live on the server right now.
Post automatically merged:

for anyone interested, here is the code which calculates the karma/fame. it applies diminishing returns to ensure that creatures with massive HP don't get overboard.

C#:
        if ( !(this is BasePerson) && !(this is BaseVendor) && !(this is Townsperson) && !(this is PlayerVendor) && !(this.Blessed) && this.FightMode != FightMode.None && !(this is Citizens) )
            {
                double modifier = 0;
                
                if (this.AI == AIType.AI_Mage || this.AI == AIType.AI_NecroMage)
                    modifier= 1 + (( this.Skills[SkillName.Magery].Value + this.Skills[SkillName.EvalInt].Value ) / 200.0);
                else
                    modifier= 1 + (( this.Skills[SkillName.Wrestling].Value + this.Skills[SkillName.Tactics].Value ) / 200.0);
        
                if (this.CanHeal)
                    modifier += this.Skills[SkillName.Healing].Value / 200.0;
                
                if (this.HasBreath)
                    modifier += (double)this.BreathComputeDamage() / 100.0;
                    
                if (this.HitPoison != null)
                {
                    if (this.HitPoison == Poison.Lethal)
                        modifier += 0.4;
                    else if (this.HitPoison == Poison.Greater)
                        modifier += 0.25;
                    else
                        modifier += 0.10;
                }
                
                if (this.IsParagon)
                    modifier *= 2;
                        
                double resistances = ( ((double)this.PoisonResistSeed + (double)this.PhysicalResistanceSeed + (double)this.FireResistSeed + (double)this.ColdResistSeed + (double)this.EnergyResistSeed) / 350.0 );
                double thisprice =  ( ( ( ( (this.RawStr + this.RawDex + this.RawInt + this.HitsMax) * this.DamageMax) / 10 ) * resistances) * modifier * 1.5 );

                //diminishing returns to prevent -60,000 karma mobs
                double final = 0;

                if (thisprice < 1000)
                    final = thisprice;               
                else
                {   
                    while ( thisprice > 0 )
                    {
                        if (thisprice > 1000)
                        {
                            thisprice -= 1000;
                            final += 1000;
                            thisprice *= 0.95;
                        }
                        else
                        {
                            final += thisprice * .95;
                            thisprice = 0;
                        }
                    }
                }

                if (this.Karma < 0 )
                    this.Karma = -((int)final);
                else
                    this.Karma = (int)final;
                
                this.Fame = (int)final;   

            }
 
Last edited:
changes that a live in the server:
July 21
- Hopefully changed it so tamed animals won't attack their owners with breath area attack (unless the tame is directly attacking the owner)
- changed it so tamed pets won't passively reveal their owners (unless they are attacking the owner)
- big revamp of the curse today - looks like too much credit was given when killing high end enemies. I reduced the rate at which the doomcurse can be decreased (now that our players are more powerful and killing more than skeletons). To balance this, i reduced the rate at which the curse increases. Also, did another pass of the math to ensure things are working as intended
- fixed crash with the serpent pillars
- players dying will now affect the curse - a good player dying will raise the curse (the evil has been able to defeat the forces of good!)
- the fame/karma value of ALL mobs was a static fixed value just arbitrarily placed in every mobile's script. ive changed it so its dynamic now, based on the mobile's attributes. tested skaleton/lichclord/balron/drake/primevaldragon and the fame/karma values seem to work very well. for example, lichlords were -15k karama before.. they are -4k now (they are easy after all)... now the values make much more sense.
- Added what i call spammervendors - npc's that sell unusual items (some buy them) and deal in unusual items. they are meant to simulate the spammers that used to sit in brit bank selling/buying wares.
- I've changed the calculations for pet leveling to make it easier to level them. it will still be a challenge but the way it was before made it nearly impossible to bring a pet to breeding level. e.g. a dragon would have to kill 600 other dragons just to get from level 9 to level 10. Reduced.
- Just implemented Colored equipment names. we've added it to the server. now equipment names will have a hue indicated (very roughly) how many attributes and the quality of the item. note that this system isn't perfect, but should help to sort out the crap from the quality when in a dungeon. https://www.servuo.com/archive/colored-equipment-names.404/
- Breath damage maximum has been increased, so beware!
- Stealing pedestals have been made significantly harder now - damage from flametraps and failing to steal the chests have gone up ksignificantly.
- changed the luck calculation to make getting artifacts a little harder... was common for someone to get 2-3 per dungeon run before...

also working on: achievement system, adding xp orbs to the game - when a mob dies it will have a chance of dropping an orb that when walked over will give a chance of a gain in a random skill.
Post automatically merged:

the overall intent is to make the game gradually harder at higher tier areas. the game was too easy before for a gm character decked with artefacts. we have added new aura effects and other abilitites to the server, and will begin implementing them to the mobs gradually. e.g. a bullrush ability that some animals might have - run towards you and inflict damage.
Post automatically merged:

im also working on a new adaptable mob type - one that will change its AI based on the circumstances - when a player is far with high health, hit with magery, if the player is far with low health, rush in and use melee for example.

I'm not satisfied with the based AIs in the game, we've added a few new AIs to odyssey (necromage, magery2, omniai, magery2) which each give their own styles to the mobs... but i want something that ties them all together into a formidable foe.
 
Last edited:
- Added what i call spammervendors - npc's that sell unusual items (some buy them) and deal in unusual items. they are meant to simulate the spammers that used to sit in brit bank selling/buying wares.
Good, good. :D Looking for offline version.
 
the world is really coming alive now - ill be adding to those vendors items that typical players would sell at a bank, ethys, rares, bod rewards, etc. they will just be VERY pricey.

I want the world to feel like a populated shard, but remain a world that can be played with low population.

If i had the time, id even program the possibility of them scamming you hahaha.
 
been waiting to post the offline package because i wanted the evil system to work as intended. ive been fixing it up until yesterday. the math is stronger each pass, and now it accurately scales with the players activities quite well. we've also added quite a few more things since i last posted here too - and im working on a mega baseclass - red players have our reds, blues have guards, and now evil players will have the cursed - servants of the evil lord that will help negative karma characters, and prove a VERY difficult challenge to anyone who encounters them.

oh and i just changed the bank this morning... i felt like crafters didn't have a common public area (like mages/thiefs, etc). so i added this
1595860724797.png
 
Finaltwist updated Ultima Adventures - Based on Ultima Odyssey with a new update entry:

MASSIVE update, content, features, tweaks... too much to list

Here is the latest server state - with the latest save. Note that if you're not using the save, at least do the spawngen method to get the mobiles. I highly recommend using the save here since there is lots of content that won't be present if you just update the scripts and use spawngen.

DOWNLOAD the AUGUST 3rd version. I highly recommend you get the classicuo launcher

major features:
working DOOM gauntlet
evil/good curse is balanced and re-tweaked (massive update to the algo)
new...

Read the rest of this update entry...
 
Finaltwist updated Ultima Adventures - Based on Ultima Odyssey with a new update entry:

Animation updates, map fixes, and new content

We are in process of populating Darkmoor, a land for evil players (all cities are evil, and mobs are positive karma).
As such, we've done some changes to the client - changed some of the mobile animations (unicorn changed to look better per the version here on servuo, frenzied ostards are back in!, children added, new mobs as well)
We've also added new art (from outland's client), new decor, items, statues, walls, etc.

many o fthese new mobs haven't been implemented yet, this download is...

Read the rest of this update entry...
 
Sorry if this is answered already I have tried searching and various things. I notice there is no thread now for Odyssey which is what I'm using.

I would like to remove or increase the player skill cap and stat cap and I am having an issue with the skills being wiped to 0.

Things I have tried:

- updating data/scripts/system/misc/charactercreation.cs and when I make a new character they have 0 skills (even when choosing a template) I did recompile after making this change even though I assumed I did not need to.

newChar.StatCap = 300; newChar.Skills.Cap = 100000;

- I have used "[global set SkillsCap "skill cap number" where playermobile = where " as the admin on my character and upon save or restart they get reset to 0

- I have used admin properties command to change stat and skills directly and they become wiped to zero.

Any additional trouble shooting steps or places to look would be much appreciated.

Thank You.
 
Sorry if this is answered already I have tried searching and various things. I notice there is no thread now for Odyssey which is what I'm using.
There is a thread for my vanilla Ultima Odyssey, but it sounds like you should try Ultima Adventures instead as there is no skill cap as far as I understand. The original Ultima Odyssey strictly adheres to the stat and skill caps as well as the quests that go along with enhancing them.
 
Guys, could you please tell me how can I install it on the Odyssey? I didn't find any guide :-(
Post automatically merged:

I created UO folder, extracted the atchive there, run RunUO - and get errors.
Post automatically merged:

Error is exactly this:
"
An error was encountered while loading a saved object
- Type: Server.Mobiles.Townsperson
- Serial: 0x00013D4C
Delete the object? (y/n)
"
 
Last edited:
Well, the populating of the new Darkmoor lands is going along well, thanks to some fantastic help from one of the players on the server. This will be a truly unique land geared for evil playstyles. systems are being changed and updated daily now - i decided to add a new system to the game yesterday to make stealing a viable option in player versus monster: the ability to steal from basecreatures, regardless if they have a backpack or not. This means a thief can now stealth through dungeons and steal from the mobs he finds as he progresses along the dungeon. the loot is dependent on the mob's fame level, which is now entirely dynamic.

Standardizing fame/karma calculation on spawning a creature has also allowed me to standardize loot generation - before the loot was determined by a line in the mob's script. theres just no way to go over all the scripts and check to see if they are consistent with the mob's strengths. so now the loot is spawned dynamically, based on the creature's newly assessed fame.

I have also fixed a number of issues in the loot tables, where low level loot could have high end quivers/instruments for example, and a number of other changes that just make the loot more interested. my goal is to reduce the amount of loot a player has to shift through. we did add colored item titles which helps make looting easier, but there was just too much! so now, less crappy loot to shift through. If you see an item on a body, its likely better than it was before, but there is less items.

my player also just found a pair of rare white panthers, glass cannons that deal tons of damage but don't have good resists. will be training them and breeding them :D
panthers.JPG
Post automatically merged:

Guys, could you please tell me how can I install it on the Odyssey? I didn't find any guide :-(
Post automatically merged:

I created UO folder, extracted the atchive there, run RunUO - and get errors.
Post automatically merged:

Error is exactly this:
"
An error was encountered while loading a saved object
- Type: Server.Mobiles.Townsperson
- Serial: 0x00013D4C
Delete the object? (y/n)
"

you are using odyssey (because the folder you are extracting to is c:\UO - adventures extracts to c:\ultima-adventures).
if you are downloading adventures, extract it with the folder found in the archive - should be c:\ultima-adventures.

also, you might just be better off playing on the server my friend, that way you never have to worry about updating :D
 
Last edited:
you are using odyssey (because the folder you are extracting to is c:\UO - adventures extracts to c:\ultima-adventures).
if you are downloading adventures, extract it with the folder found in the archive - should be c:\ultima-adventures.

also, you might just be better off playing on the server my friend, that way you never have to worry about updating :D

Thanks! This evening I'll try both - extracting to proper folder and launching from there, and also playing on your server :) How do I connect to you via the client in your package?
 
Thanks! This evening I'll try both - extracting to proper folder and launching from there, and also playing on your server :) How do I connect to you via the client in your package?

ah great! if you play the server then you should join our discord - you'll have lots of questions and players will be there to help.
I'll message you the discord link privately.

to play the server: download the latest package, extract to c:\
run ultima-adventures\classicuo.exe (it might crash the first time, just close and re-open)
login!

(optional)
download classicuo launcher and use that instead since its much more stable
Post automatically merged:

updated the resource info since it was a little outdated.
 
So i started playing a thief character. I wanted my thief to be 100% thief, not a warror/fighter. problem is, thiefs could get gold from the quests and from coffers, but couldn't get loot. So i created a new mechanism that allows thieves to steal from monsters, and the loot generated is dependent on the mob's fame. this way you can "steal" items from daemons, elder gazers, etc, while you are going for that pedestal. makes the game much more fun.

While i was at it, it always bugged me how the hidden traps were completely unseen - it wasn't possible to avoid them by skill, it all depended on random luck and skill/stat checks. Also, the damage dealt was fixed, meaning it was either underwhelming for advnaced chars, or overpowered for new players. so i did a revamp of that entire system, with the damage now scaling per the player's hitpoints.

Also, i added a new mechanism to the hidden traps which allows players to carefully avoid them if they are careful. at a certain distance, traps will make a noise (e.g. a click). this is the first warning that there is a trap nearby. f the player gets close, and has sufficient detect hidden, theres a chance the trap will emit a light.

this new mechanic makes it so
1. players need to lower light level to avoid them, and pay attention to sounds, increasing immersiveness
2. be able to avoid the traps if they are careful.
3. know when/where (approx) to use detect hidden and disarm trap manually.

a player who runs all the time won't get the clues in time.

to balance this, ive also made them much more deadlier, for ANYONE - high and low end players.
I think those changes made the game much more fun.

Live on the server!
 
Last edited:
Is there some sort of wiki or documentation for this project? I dont want or need a detailed wiki in regards to what drops where but i am curious as to certain skill synergies(if there are any) or somewhere that explains what the difference between the coin types are and other "general" things.


Thank you all who put and are continuing to put time into this project!
Post automatically merged:

Also i tried making the skillgains a little easier, ive done some research on how this can be done and played around with the "gainer" part in the SkillCheck.cs file but it doesnt seeme to work or im just doing it wrong. I have tried increasing and decreasing that number with no noticable effect.

What i dont quite understand is the part where it says

harder = Utility.RandomMinMax( 0, 1 );
if ( harder == 1 )
toGain = 1;
else
toGain = 0;

What does this do/influence

Im by no means versed in programming or altering scripts and have been trying to go by "trial and error" and some research but cant make heads or tails of it
 
Last edited:
line 126
double gainer = 2;
reduce that to make everything easier :D
1.2 or 1.5

adjust lines 134-139 accordingly. lower the easier.

:D
 
line 126
double gainer = 2;
reduce that to make everything easier :D
1.2 or 1.5

adjust lines 134-139 accordingly. lower the easier.

:D


Thank you!

Is it possible to do this on a skill by skill basis? For instance i would like taming to be 1.5 and weapon skills to remain at a 2.
 
you need to change skill.cs in the core and recompile the runuo.exe. theres a table in utilities/runuo2.2/... skills.cs that allows you to adjust all the skills one by one.

like i tell everyone though, if you're gonna play i'd recommend playing on the server - there are lots of new updates coming. I am just adding children to the game now (they will be annoying!), and a completely new land.
Post automatically merged:

just added annoying children to the server this morning!! 1598020182596.png
Post automatically merged:

they beg, follow you around, and do what pesky chldren do :D

1598021699578.png
 
Last edited:
you need to change skill.cs in the core and recompile the runuo.exe. theres a table in utilities/runuo2.2/... skills.cs that allows you to adjust all the skills one by one.

like i tell everyone though, if you're gonna play i'd recommend playing on the server - there are lots of new updates coming. I am just adding children to the game now (they will be annoying!), and a completely new land.
Post automatically merged:

just added annoying children to the server this morning!! View attachment 16474

Tyvm again ill try that.

As to the server, i will come back to that offer but first id like to try and play around and see whats what and get a feel for the game. :)
 
Changes that are live in the server:

1598128370631.png

August 22
- Added two new abilities for the shadow knight in doom - bullrush and echo strike these should prove

challenging
- Added the Widow's Morphing Armor! Now dropped from the Widow under the keep. This very rare armor morphs

you into the widow and grants you powers over the dead - when using it, anyhting you kill will rise again and

help you destroy your foes.
- we apparently have our very first paragon pet on the server (much earlier than i had expected!!). as such,

paragons used to be 2x control slots (from 3 to 6). since that might be tricky to play with, ive made it so

paragon pets are controlslots + 2 instead of *2
- using an npc to repair your items will now cost more and will degrade the max HP of the item by 7-10 points

to help encourage using player smiths
- Investment bags are now of two sorts: (good) and (evil) good benefits if curse goes down, evil benefits if

curse goes up. Evil can now also invest and bet on the system
- New client to download, august 7th (uploading now). includes new anims and new art as well
- adding dynamic loot generation based on the dynamic fame/karma calculation. all loot will now be calculated

based on the creature's difficulty instead of being arbitrarily taken from whatever the person put in the

script
- Architect now sells display cases, thanks garth
- Changed Login screen
- added new art so that brazies that are "off" will no longer show as nodraw tiles.
- i added a chance that any mobs that spawns has a chance to be "cursed", meaning it was sent to kill you

directly by the evil lord. these mobs will be regular mobs, with enhanced stats and quick speed. the odds of

them appearing is directly linked to the evil curse level. more curse, more odds of them appearing in the

lands. the evil lord (who still needs a name BTW) can now directly affect all the lands in the server
- taming contract book now has a different font color (readable now) and should hold more contracts too
- now that we have frenzied ostards back, in order to make them interesting i've dramatically widened the

range of possible stats/resistances. its now completely random how strong your ostard is, could be super

weak, or a real badass killing machine. pray to the rng gods!
- fixed a few issues with dynamic loot generation, completely redid the lootpack tables - there will be less

items now but higher chance of having good intensities. the idea is the reduce the amount of crap we have to

sift through when we adventure. if you get an item now, it has a higher chance of being better than before.

also, there were many inconsistencies with the loot tables (instruments spawning with 5 attributes at a max of

100 intensity for a skeleton, but with only 10% max intensity for a primeval dragon)
- Added certain items back into carpentry crafting which were removed (crates, tables, etc).
- Fixed error in the code where bowcraft with new types of wood was not working
- fixed error in the code where wood oils were not being applied properly
- fixed issue where certain relics were spawning as items instead of deeds (nodraw error)
- im revamping stealing to make it more relevant. When a stealthed player targets a creature with stealing,

he will have a chance to receive random loot, including (rarely) artefacts and the like. It will be possible

now to stealth into dungeons and steal from creatures. don't get caught! item value will be dependant on

creature's fame. This now makes a pure 100% thief doable, without having to kill anything.
- added a new system where players stay in the world when they logout - (invulnerable). This will help make

the server look a bit more populated - don't worry your toon will be completely safe while you are logged out,

but others will be able to see you, and you will be able to see others
- Decorated lamut with the new MAssive (and beautiful trees) taken from the outlands client. They are a big

improvement over the stock trees.
- Added some sayings for guards when someone is stealthing nearby ("I hear something....")
- Fixed an issue where admins were placing deeds and crashing server (should be fine now to do so)
- fixed an issue where townspersons were healing mobs and creatures and turning grey
- Added a cooldown for snooping skill -where someone could just snoop the same container from 0 - gm in an

hour or two before, now each failure has a 10% chance of requiring a cooldown. the mob cna't be snooped again

for about on hour.
- Fixed a bug with beehives using stacks of potions
- boosted the reward for stealing contracts from the thieves guild... 1k to go to the last level of a dungeon

far away doesn't seem like a fair reward. its now based on the thieve's skill too, where before it was only

based on the map of the quest higher skill, more reward from those. Also added a feature where the more

consecutive thief missions you do, the higher the reward will go - an additional incentive to continue doing

them.
- hopefully fixed the studybook bug where it kept giving you study gains even when logout time was low.
- ive made it so hidden traps are visible now via a faint glow. those will full lights or alternative lights

won't see them, but those who like to play with a bit more atmosphere will. this gives players an opportunity

to detect them and perhaps even untrap them. Also, the traps' damage were fixed before. Now, ive made it so

the damage is based on the curse level and the players health. meaning lower level players wont be one hit

killed and the damage should scale to whoever the player is
- removed a AI glitch where mages would get "stuck" on a corner when trying to keep distance to the player
- darkfather was a long and boring grind before, with 30k hits. he has now been changed to a BaseCursed (my

new AI algo), and hits lowered to 7500. keep in mind that he is MUCH harder than before now, even with less

hits.
- have an initial implementation for traps: at 4 tiles you have a chance to hear a sound, at 2 tiles, on

successful check, the trap might start emitting a low light so it pays to walk slowly in the dungeons...

listen for subtle sounds tha twould indicate a trap, like a tick. This makes dungeoneering much more dynamic

and fun.
- Major changes to death system - ankhs anywhere now will NOT require gold, but will drain you from 20% of

your fame/karma. ankhs are so few and far between, but it might be worth seeking them out. death penalty has

also been adjusted (will put more weight on skills/stats instead of karma/fame)
- The [rares] spammer vendor now sells random scrolls of transcendence and alacrity
- Changed item damage to make items need repair from 4% to 6%
- We now have children in game! I'll be spawning them randomly in cities. they are annoying - good luck!
- player's bodies/bones are now fully movable and will not decay, marking your death permanently in the world.
 
Ever wondered why ALL doors in dungeons are completely unlocked?? I've wondered the same thing! It doesn't make any thematic sense for all doors to be unlocked (unless they have some quest purpose). With this in mind, ive implemented a new mechanic by which dungeon doors will be randomly locked/unlocked every 4 hours or so. the system works like this: 80% of all doors will be unlocked per normal. 20% of the doors will be locked. Of those, 65% will be easier locks, and 35% will be harder locks. Skeleton keys can be used for easier locks, master skeleton keys can be used for harder locks. magic unlock has a chance to unlock easier locks only.

this will make adventuring in dungeons a lot more interactive

live on the server
 
I was able to add an interesting new mechanic to the game today.

Ever wonder why you are able to see all the enemies in a dungeon, even if they are behind a closed door or in a hallway that isn't even connected to where you are?
I found this to be incredibly immersion-breaking. Not only could you see everything even if you shouldn't be able to, but it took a lot out of the "mystery" of exploring a dungeon.

So - ive coded a change today that makes it so mobs are "hidden" from the players if the players aren't in the line of sight of the monster. for example, here this player can't see what lies behind the door

1598800385571.png

When he opens the door, the monsters inside are revealed (and attack the player!)

1598800430333.png


This makes dungeoneering MUCH MORE FUN, dynamic and mysterious.
you can't magically see what lies on the other side of a door anymore.

I will eventually tie this in with tracking - to allow players to see mobs they shouldn't if they have high tracking (thus giving a purpose for the skill)

what do you think?
 
tweaked the system a bit to account for a few bugs, and added the tracking bonus as well. will improve as the players *cough*ginea*pigs*cough* experiement with the system on the server.
 
I am gonna chime in here. The concern with the "server load" (you mentioned in another thread) shouldn't really be a concern for this game. Because it is marketed as a single/multi player adventure game...anyone running it would be surprised to even have 20 players on it. I have many systems in this game and I don't think they would survive a 1,000 player base and the server would quickly crumble if that occurred...but again...that isn't the target audience for this particular game. We either play it alone or with 5 or so friends. So your move to the OnThink portion shouldn't be a hit of any consequence.

What you are trying to do here is what Odyssey does on the high seas already. Many sea creatures remain hidden until a player comes nearby and then it hops on board your ship or the shore (demons do this in the land with the open portals and such to simulate demons appearing from hell). That is all in the OnThink section for when they reveal and when they hide. Also, many mobiles are player range sensitive...meaning they don't do their OnThink unless a player character is nearby...so that should seal the deal on the needless worry for what you are doing. If you perfect it, I think Ultima Adventures will still function fine without any repercussions. An example of where you see this is when a unicorn and demon are near each other. They don't really attack each other until a player is nearby...which has the nice outcome of a player witnessing the fight instead of them happening off-screen.

For the sea creatures, I did some code to allow those tracking to "track" them without any calculations for hiding...because tracking comes in handy much more on the high seas and you are looking for pirates and such...or you get a quest to kill a particular sea monster.
 
thanks for that djeryv - i can confirm that the system works really well for dungeons, and im happy to hear about the server load not being an issue!

I'm also happy (as always) to share the code i have in place now for you to review. I didn't base it on the high seas/demons (which i did notice was in there).

As an aside, we have added onetime to the server - and ive been using it for most of my complex scripts now, its a really nice addition to the server - sort of like the central timers you have running at the brit castle but in a format that is easily pluggable into scripts.
 
Using the command "[changecharacter" when account have only one character, the server will crash.

Solution:
Code:
Scripts\Server Functions\Commands\ChangeCharacter\commandChangeCharacter.cs

find:
public static void ChangeCharacter_OnCommand(CommandEventArgs e)
        {
            Mobile from = e.Mobile;
            NetState ns = from.NetState;

add:
if (ns.Account.Count == 1)
            {
                from.SendMessage("You are unable to change characters when you have only one character.");
                return;
            }
 
Last edited:
great spot!! Thanks for sharing that!

Many bug/crash fixes have been applied to the server since the last update here.

We're about to go live with darkmoor, a new land where cities are full of evil people and hunting grounds are full of good mobiles - a land for evil players. I just finished the quest to enter darkmoor and will be testing this in the next few days.
 
i got an error saying that i need to delete an object and when i do that i gives errors...
nvm i had to put to C:
Post automatically merged:

i changed mysettings.cs like this
public static int statcap() // This server can accomodate unlimited statcap. What should a NEW CHARACTER's statcap be?
{
return 350;
}

public static int PlayerLevelMod( int value, Mobile m )
{
// THIS MULTIPLIES AGAINST THE RAW STAT TO GIVE THE RETURNING HIT POINTS, MANA, OR STAMINA
// SO SETTING THIS TO 2.0 WOULD GIVE THE CHARACTER HITS POINTS EQUAL TO THEIR STRENGTH x 2
// THIS ALSO AFFECTS BENEFICIAL SPELLS AND POTIONS THAT RESTORE HEALTH, STAMINA, AND MANA

double mod = 1.0;
if ( m is PlayerMobile ){ mod = 2.00; } // ONLY CHANGE THIS VALUE

value = (int)( value * mod );
if ( value < 0 ){ value = 1; }

return 1000;
}

and statcap is still 250 and hitpoint stays same did i do something wrong here?
 
can't run the game now
getting this..
There was an exception while attempting to load '[CliLoc]':
System.TypeInitializationException: The type initializer for 'Ultima.Files' threw an exception. ---> System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
at Ultima.Files.LoadDirectory()
at Ultima.Files..cctor()
--- End of inner exception stack trace ---
at Ultima.Files.GetFilePath(String file)
at Assistant.Language.LoadCliLoc()
 
If i were you i'd play online and never have to worry about this :D

I really can't support the offline players - everyone installs the game differently, run different clients, etc etc. I recommend you get the classicuo launcher and use that as its more up to date. Also, if you play offline you will likely have to overwrite the save file at next update if you want the new content.
 
yea that happened to me too while testing something. Came right after the ClassicUO Update
 
Back