yeah.. i'll wait until after you've made any changes you want to add too.

i was really hoping to get that interest/investment script going but no one was able/willing to help in the script support section sadly. i thought it was a good idea

just give me the go ahead and i'll update the dropbox.
Post automatically merged:

i'm also adding a "firerabbit" spawn in a massive flowerpatch area. this fire rabbit will drop animal pheromones, something that will help tamers tame (mobs won't get angry on attempting to tame if used).

the firerabbit will be difficult to kill... :D
 
It definitely is a good idea, I'll try to take a look at it some more, I think it's a bit difficult for me to figure out... Like, I understand why certain things produce errors, but I have a hard time understanding how to write that same thing in a way that it does what you intend it to do...

In order to make a NPC a BaseConvo, what would I need to do other than design a keyword set for it? I'm thinking of making PlayerVendor a talker too :)
 
yeah do it!

so just make a convo file, and i can add it to the system, i think i understand it.
copy one of the other vendors' convo file and amend :D

on a side note, the newest release now has labels and ICONS in the world map!! VERY useful! (from a post somewhere in this thread - thank you!!)
 
Thanks a lot! :) Alrighty, will do :)
Post automatically merged:

Here's an updated PlayerVendor which has basic support for pricing spellbooks. Originally I wanted the higher circle spells to cost more, but unfortunately, spellbooks are very diverse and the system of storing spells inside them is quite complicated, so that's a project for another day :) Convo file for PV will come next :)
Post automatically merged:

And here's a basic convo file for the PlayerVendor if you can hook it up :)
 

Attachments

  • PlayerVendor.cs
    83.3 KB · Views: 1
  • playervendor_convo.zip
    1.1 KB · Views: 2
Last edited:
Thanks a lot! :) Alrighty, will do :)
Post automatically merged:

Here's an updated PlayerVendor which has basic support for pricing spellbooks. Originally I wanted the higher circle spells to cost more, but unfortunately, spellbooks are very diverse and the system of storing spells inside them is quite complicated, so that's a project for another day :) Convo file for PV will come next :)
Post automatically merged:

And here's a basic convo file for the PlayerVendor if you can hook it up :)
wow you work fast!!

okay let me see about integrating the playervendor... also here is a worldmap populated with markers (just populated tons this morning)

1588599486083.png
 
okay so you need to edit the keywords.txt file as well and add the new npc "job, followed by relevant keywords you've added

the keywords.txt file is messy, best to open with notepad++

the format goes like this
C#:
sculptor        job, what*do*do, sculpt, carv, statue
servant         job, what*do*do, servant, labor
shepherd        shepherd, job, what*do*do, sheep
shipwright         job, what*do*do, ship, vessel, sail, boat

could you populate it with the new words?
Post automatically merged:

*not just the new words, any words that apply to it
 
There's other changes to get baseconvo working properly.

This fork of RunUO.T2A has added it, and even fixed a bug in the original, you can see some of the changes involved by looking at the commits. There are also region based responses, although with odyssey or whatever this is, you might want to create custom region fragments that better match the places ingame


Last time I played with it, there were also some crashes involving some overlapping keywords, such as news/rumors with towncriers in certain versions of runuo/servuo. I do not remember how I worked around this.
 
There's other changes to get baseconvo working properly.

This fork of RunUO.T2A has added it, and even fixed a bug in the original, you can see some of the changes involved by looking at the commits. There are also region based responses, although with odyssey or whatever this is, you might want to create custom region fragments that better match the places ingame


Last time I played with it, there were also some crashes involving some overlapping keywords, such as news/rumors with towncriers in certain versions of runuo/servuo. I do not remember how I worked around this.

thanks!! i'll certainly have a look at the updated code... since the one we're using is from 1997 :D
 
Oh, awesome, thanks a lot for the heads-up! :)
we have an issue - not sure how to treat the space in player " " vendor.. most of the other jobs have one word only... even weaponsmith

maybe time to rename this NPC type to something else (that has one word)?
 
@Finaltwist: Here's the line for keywords.txt, I believe this should work:

Code:
playervendor    job, work, what*do*do, profession, occupation, explain, how*to*sell, description, free, bag, container, chest, can*not*sell, do*not*sell, does*not*sell, payment, charge, rob, steal, hold up, coin, money, currency, gold, silver, copper, jewel, other*money

Yeah, we can rename him to Merchant, maybe?
 
@Finaltwist: Here's the line for keywords.txt, I believe this should work:

Code:
playervendor    job, work, what*do*do, profession, occupation, explain, how*to*sell, description, free, bag, container, chest, can*not*sell, do*not*sell, does*not*sell, payment, charge, rob, steal, hold up, coin, money, currency, gold, silver, copper, jewel, other*money

Yeah, we can rename him to Merchant, maybe?
yeah... wouldn't merchant be better?
more immersive too... can you make the change to the playervendor.cs?
Post automatically merged:

adding the keywords now
 
thanks!! i'll certainly have a look at the updated code... since the one we're using is from 1997 :D
The code isn't from 1997 lol, the fragments are. They were part of the EA single player UO emulator/Demo that shipped with the T2A demo disc. Other people decompiled it and this is how a lot of the internals of the game were learned. Rebirth later used the fragments and wrote BaseConvo.cs, and it was again used on Divinity. The responses are also kind of incomplete, you can see in the comments from Raph Koster and others regarding planned additions, things to be removed (the UDIC responses are kinda funny) All of this stuff was eventually moved to Clilocs, I tested around Samurai Empire timeframe and they were still working on EA shards then. No idea if they do now, if someone with an EA account could find out, would satisfy a curiosity.
 
The code isn't from 1997 lol, the fragments are. They were part of the EA single player UO emulator/Demo that shipped with the T2A demo disc. Other people decompiled it and this is how a lot of the internals of the game were learned. Rebirth later used the fragments and wrote BaseConvo.cs, and it was again used on Divinity. The responses are also kind of incomplete, you can see in the comments from Raph Koster and others regarding planned additions, things to be removed (the UDIC responses are kinda funny) All of this stuff was eventually moved to Clilocs, I tested around Samurai Empire timeframe and they were still working on EA shards then. No idea if they do now, if someone with an EA account could find out, would satisfy a curiosity.
interesting!

i feels amazing adding something (the convo files) from 1997 in any event, adds a tons of flair. it's also a great way to add new npcs and explain what they do, simply by talking to them (instead of a gump). thanks for the info, i'll compare the t2a server you posted and the baseconvo in mine to see differences.
Post automatically merged:

@Finaltwist: Here's the line for keywords.txt, I believe this should work:

Code:
playervendor    job, work, what*do*do, profession, occupation, explain, how*to*sell, description, free, bag, container, chest, can*not*sell, do*not*sell, does*not*sell, payment, charge, rob, steal, hold up, coin, money, currency, gold, silver, copper, jewel, other*money

Yeah, we can rename him to Merchant, maybe?

maybe we should also remove the restriciton that a player merchant can only be placed in a home... that way you can place merchants in a city... much more thematic right?
 
What kind of change would be needed in PlayerVendor? I don't see any line in there that identifies him as a "player vendor" specifically, he's just spawned with a name and no title... No idea how to add a title to him, to be honest :/
Also, the idea with placing a player merchant in a home is rather interesting, yeah, I'm not sure off the top of my head what would need to be changed to allow for that, especially since most of the PV code is built around homes (e.g. the PV would "jump" out of the house and talk to a player if a player requests his services from outside the house, then jump back to the house), it might be a bit of a major rewrite to do that, not sure yet.
 
the required change would be in the contractofemployment item that the banker sells. ondouble click i think..

i'm still trying to integrate your playervendor to baseconvo... problem is that playervendors aren't "basecreature" - they are simply "mobile"
ive changed that to "baseconvo" to see what happens.
 
Yeah, they're indeed quite a bit different from standard NPCs internally. I'll see if I can figure out a way to make the necessary changes, but not sure if my skill level would allow for this kind of change at the moment :/ I'll let you know if I come up with anything workable :)
 
we have to make playervendors "baseconvo" and also have them being constructed with

Job = JobFragment.merchant;
Karma = Utility.RandomMinMax( 13, -45 );
Post automatically merged:

they are a mobile... so let's work on that... getting errors when replacing "Mobile" to "BaseConvo"
Post automatically merged:

update - so im stripping the basehouse crap from playervendor. also deleting vendorrentalcontract.cs from the world, and going to make it so contractofemployments are placable anywhere.
Post automatically merged:

ooookay... so removing the "house" from player vendors is a real pain. :D

not gonna do it just now.

I'll go back to moving playervendors to baseconvo...
Post automatically merged:

Just a tought - why don't we add an "onspeech" to playervendor, and just point it to the baseconvo onspeech routines?
Post automatically merged:

I've updated the dropbox with latest version, if you want to include the map markers, see the attached archive below - it's a client-side addition. extract all to classicuo/data/client
 

Attachments

  • Client.rar
    881.1 KB · Views: 6
Last edited:
Awesome, I'll update tomorrow and play a bit with the updated version of the game :) Also, the idea sounds interesting regarding OnSpeech - it might actually work! Will try to find some time for experiments soon :)
 
Awesome, I'll update tomorrow and play a bit with the updated version of the game :) Also, the idea sounds interesting regarding OnSpeech - it might actually work! Will try to find some time for experiments soon :)

had my server run a while, and crashed multiple times due to playervendor:

C#:
System.NullReferenceException: Object reference not set to an instance of an object.
   at Server.Mobiles.PlayerVendor.RandomAdTimer.OnTick()
   at Server.Timer.Slice()
   at Server.Core.Main(String[] args)
 
Out of curiosity, did you guys yank my client and then make it your own...or begin making it your own. It will help with your map changes and such.
 
Out of curiosity, did you guys yank my client and then make it your own...or begin making it your own. It will help with your map changes and such.


Hi Djeryv, i've totally made changes to the map in the original odyssey. new destinations, castles, and roads. the download link here includes the modified mul files in the client file. I haven't changed anything else to the client - so full credits to you on everything else.

1588627848891.png
Post automatically merged:

we are busy now implementing the original ultima online conversational NPCs from the original UO demo that was released.
Youc an ask them questions now instead of having a big gump of text.

once populated, the convo files will allow the npcs to explain everything...
e.g. Tristan, what is a copper coin?
 
Last edited:
@ FinalTwist: Regarding the crash - hmm, been playing with a PV since January and haven't had a single crash (even in stress test mode when the PV ticks, like, every 10 seconds to see how it works quickly). What are the contents of the PV's bag before it crashed? Also, is it my version of the PV or a modified one? If it's modified, can you post the version you're using when it crashes? I'll take a look today at what might be up.

Also, as a simple test, can you try changing the test at the very beginning of OnTick in RandomAdTimer to the following one and seeing if it still crashes the game for you? I can't see anything in there yet that could be "null" except for Backpack in some corner case, possibly, so not sure what else can crash in it unless there are some modifications (though I'll inspect it some more later):

C#:
            if (m_Vendor == null || m_Vendor.Backpack == null || !EnableRandomAds || !Utility.RandomBool())
                return;
 
i am using your stock playervendor as you posted here - i haven't seen the crash lately, but i did see it repeatedly in a series for a while yesterday.. happened 5 times in a row at random times... i haven't seen it since so i'll let you know if it happens again. oddly enough, i only have one vendor placed (for testing) in greenacres. since its the randomaddtimer method the is encountering the null, could it be something to do with the name of the items? that's the only thing you've changed right? and it's only happened since the latest update.

i'll have a look at the items in the vendor's backpack to get more info
Post automatically merged:

update:

Sosaria now has savings accounts!
I was able to get my interestbag system up and running, and now its possible to put money aside and have it earn regular interest. the gold/check gets convreted to something else so you can't use it while its earning interest, and the timer is using djeryv's central timer so as to not add any load to the server.

:D
 

Attachments

  • PlayerVendor (4).cs
    83.3 KB · Views: 2
Yeah, try making that little change I suggested above, see if it crashes again for you - if it does, PM me the save file so that I can take a look at the contents and see if I can reproduce it. In the meantime, I'll look a little bit more carefully at what could be calling the null issue :)
 
the method has a lot going in it... my guess is it's in the item/item attributes/names, add time (get), or something like that. The best way to see what it might be would be to compare with an earlier version (which never crashed). i might be able to do that for you.

**Edit - nothing appears different in that method.. odd. forget about it and i'll see if it happens again.
Post automatically merged:

everytime i'm going to make a change to the game, i'm going to edit some of the text npc's can say.. in the case of the interest bag, the banker can now speak to how it works

1588681068661.png
 
Last edited:
While looking for the potential source of a problem, found a bug with the way items were considered and sold inside containers. It couldn't have crashed the game, I think, but it could have made it possible to sell gold for more gold in certain specific scenarios, lol. Anyway, I fixed that, and I added some more NPE prevention measures in a couple places where a null pointer exception could have triggered and crashed, potentially. Not sure if this was the source of your issue, but I recommend that you try this version and see if it behaves well. If it crashes at a certain point, please post your saved game before the crash (both the Saves folder and the "Crashed" folder, the latest one right after the crash), and we'll take a more educated look at it :) Item attributes are not a part of RandomAdTimer (that's the one that crashes), and item name method (GetItemName) doesn't even get called judging by the error you posted, so... most likely those are not the culprits.
Post automatically merged:

Oh, in those convo fragments, you may want to use $m'lord/m'lady$ (or whatever the syntax is - you can look it up) to make sure the speech corresponds to the player's gender :)

P.S. Whoops, reuploading the version of PlayerVendor, another little issue got in while I was fixing one of the problems ;) Please redownload.
Post automatically merged:

And here's one more minor fix, also for the same loophole :)
 

Attachments

  • PlayerVendor (5).cs
    83.4 KB · Views: 1
  • PlayerVendor (6).cs
    83.6 KB · Views: 0
Last edited:
No, I guess I just merged it against the wrong file, just copy that part over from the previous file.

Version 7 has the MyServerSettings thing back :)
 

Attachments

  • PlayerVendor (7).cs
    83.7 KB · Views: 0
You guys work on the same files right? Why not make your own git? With GUI tools it is rather easy
 
yeah... well i like working on a version of the server that is on my computer as I have 3-5 scripts open at any time. and i forget which scripts i change an hour after making a change, so i wouldn't be the type to commit a change at a time... :\
Post automatically merged:

my next project is to merge the baseconvo from the t2A shard someone posted above... see if the scripts have updated any.

We also need to find out how to make playervendors speak using routines in baseconvo - but since playervendors aren't basecreatures, we can't just make that switch...
 
I also still think having a git repo set up would have been beneficial, hehe, but either way is fine with me :)

I'm not sure if hooking up PlayerVendor to BaseConvo would be doable without a major rewrite, but I can at least extend the PV in a way similar to how I hooked up the report line to it, to make it listen to more keywords and make it be able to explain how he works :)
 
I also still think having a git repo set up would have been beneficial, hehe, but either way is fine with me :)

I'm not sure if hooking up PlayerVendor to BaseConvo would be doable without a major rewrite, but I can at least extend the PV in a way similar to how I hooked up the report line to it, to make it listen to more keywords and make it be able to explain how he works :)
how about creating a new NPC vendor? the only real differenciator for playervendor is that 1. needs to be placed in a house (which we don't care about) and 2. ability to put things in pack for sale and 3. is owned/controlled by a player.

If you started with an npc vendor, like a banker, called it "merchant" and added the routines for 1. adding stuff in pack and 2. random sales... then you'd have a plyermerchant you could place anywhere... shouldn't be hard to create a "merchantcontract" deed that when double clicked creates a merchant that is owned by the player...? and they would be baseconvo too
Post automatically merged:

I also still think having a git repo set up would have been beneficial, hehe, but either way is fine with me :)

I'm not sure if hooking up PlayerVendor to BaseConvo would be doable without a major rewrite, but I can at least extend the PV in a way similar to how I hooked up the report line to it, to make it listen to more keywords and make it be able to explain how he works :)
okay your method is better... instead of linking to baseconvo, you can just add to the lines and words he uses. that way he would speak like any other npc, just not be part of baseconvo. that's a better idea actually.
 
Yeah, I think for a smaller project the second approach is better (and at least easier), I'll work on that soon :) And a separate merchant can be made later if I'm in the mood for a full rewrite :D
 
okay... server ran for 4 hours, no crashes. we're in the clear.

looking forward to your new talking playervendor!

The dropbox has been updated to the latest version, which includes the map markers (client) and interest system.
 
Nice! And here's the initial implementation of the BaseConvo-like conversations, the player vendor will now respond to certain keywords and talk to the user. It's not perfect yet, the NPC needs to be named explicitly (called by name) in each phrase, and certain phrases work strange (e.g. "silver" for some reason makes the NPC show its goods, I couldn't figure out yet why), but otherwise this seems to work pretty well.
 

Attachments

  • PlayerVendor (8).cs
    88.9 KB · Views: 2
magnificent my friend... might i recommend you post this as a RUNuo resource? Its your brainchild, you should get credit for it all :D
Post automatically merged:

what are we going to work on next??? :D

I'm thinking i'm gonna play for a bit and riase my tamer (and make lots of money with the animal broker).

I might also train a pair of slimes and breed them... :D
 
Nice! :) And yeah, I might make a more generic pure RunUO-compatible version (since this one is pretty much Odyssey exclusive) and post it as a RunUO resource in the upcoming days ;) Hehe, sounds like a good idea, good luck!
 
I hear there is a titan quest that adds to the skillcap. If someone could point me to the .cs file that defines the reward i'll edit it to add statcap, or a very rare item instead. as far as I know that's the only issue in unlimited skillcap from the original odyssey.
Well, it is subjective to say that is the "only" issue. It already raises the statcap to 300, but look in ApproachObsidian.cs. That should be the only file you need to edit...oh...and ObeliskTip.cs. That file tells the player what they get for a reward so you need to say something different there. If you end up putting stat scrolls in your game, you will have to fix more things with this.
 
Back