Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - TrailMyx

Pages: [1] 2 3 ... 25
Off Topic / My new retrocomputer project
« on: December 14, 2021, 08:01:58 AM »
So even before I was into the whole UO thing, I was heavily into retrocomputers (really back then they weren't even "retro" lol).  In recent years that has kinda turned into my full-time hobby.  I noticed that I was doing a bunch of things that other people might benefit from my findings and experiences.  So I created a new website/forum that talks about anything retrocomputer-related.

I don't really mean to duplicated the great works of places like atariage, since this is really going to be a repository for my own work.  But as I found with, people appreciated that and added to the whole experience.  So I figured, "what the hell."

Yes, SMF because easy.  I didn't want to have to think too much about it.  There's better forum software out there, but with those come additional annoyances.  So I'll stick with what I know.

So if you have any love for the old computer, come stop by and say "HI".


Misc. Scripts / TrailMyx's Chat Monitor (for Alexandria)
« on: July 24, 2020, 03:21:27 PM »
Here's a script I wrote some time ago when I played on RebirthUO.  It's a script that organizes the incoming chat sources (Party, Guild, Alliance and Public).  It's probably easily tweakable to run on non-RunUO shards like OSI.  However the only shard I've tried it on is RebirthUO and I tweaked it to run on Alexandria.  The only section you'd have to modify is the very first where the chat commands are delineated. 

The checkmark in the upper right designates there is a new chat in a tab that's not in focus.  The sound check mark will "beep" when there's a new incoming chat.
Other functions:
Roll - rolls a d100 and posts the value in chat
Share Info - presents you with a target to select an item.  The items properties are then posted to the chat channel.

When typing in the chat text bar, it's not necessary to precede the chat text with the channel chat command, the script automatically appends the appropriate chat command based on the selected chat tab (party, guild, alliance or public)

Code: easyuo
  1. set %public_chat_command 'c
  2. set %party_chat_command / , #SPC
  3. set %guild_chat_command \ , #SPC
  4. set %alliance_chat_command | , #SPC

If you do figure out what these need to be in  order to run on OSI, please post those for the rest to use.  I find this script useful because it keeps track of the incoming chats in one place and filters out all other information like damage, seen objects and npcs and other spam.

Just one of my useful scripts lurking in my dusty script library that I feel some might find useful.


Made it easier for OSI, now default for RunUO:

If you want to run it on RunUO shards like Alexandria, just change:

Code: easyuo
  1. set %shard_type OSI ; RunUO or OSI

to this (at the beginning of the script)

Code: easyuo
  1. set %shard_type RunUO ; RunUO or OSI

Script development tools / TrailMyx's Fun with Timers
« on: April 25, 2020, 07:27:38 AM »
I've been going through my vast collection of unfinished tools, and one that popped out that bugged me that wasn't finished (and probably won't ever be) is my automated timer subs.  Anyone who has played with timers and state machines will know how useful they can be.  I'm attaching a group of subs plus a little tidbit of sample code that shows what's going on.  These subs use the global namespace TM_TIMERS so timer status can be seen through other scripting instances.  You can expand on these subs; I just made what I had started work correctly.

For the example script (found at the beginning of the subs) there's alot going on.  Try and follow along with it:

Code: easyuo
  1. gosub TM_ResetTimers
  2. gosub TM_RegisterTimer Timer1 auto 10 second Callback1
  3. gosub TM_RegisterTimer Timer2 5 1 second
  5. set %timer1 0
  6. set %timer2 0
  7. repeat
  8.   gosub TM_ProcessTimers
  9.   if Timer1 in #RESULT
  10.   {
  11.     set %timer1 %timer1 + 1
  12.     if %timer1 % 2 = 1
  13.       gosub TM_RestartTimer Timer2
  14.   }
  15.   if Timer2 in #RESULT
  16.     set %timer2 %timer2 + 1
  17. until #FALSE
  18. stop

In this snippet:
  • Timer1 runs forever (auto) and fires every 10 seconds.  Also when the timer fires, the callback function "Callback1" is called
  • Timer2 runs only 5 times, and fires every 1 second.
  • Timer1 is used to rearm Timer2 when the Timer1 is first run and every ODD firing of Timer1 (watch %timer1 and %timer2 variables)
  • #RESULT of TM_ProcessTimers shows a list of expired timers.  If a callback is attached, it will already have run

I have a bunch of subs like this, and perhaps I'll slowly finish them as time goes on.

Code: easyuo
  1. gosub TM_ResetTimers
  2. gosub TM_RegisterTimer Timer1 auto 10 second Callback1
  3. gosub TM_RegisterTimer Timer2 5 1 second
  5. set %timer1 0
  6. set %timer2 0
  7. repeat
  8.   gosub TM_ProcessTimers
  9.   if Timer1 in #RESULT
  10.   {
  11.     set %timer1 %timer1 + 1
  12.     if %timer1 % 2 = 1
  13.       gosub TM_RestartTimer Timer2
  14.   }
  15.   if Timer2 in #RESULT
  16.     set %timer2 %timer2 + 1
  17. until #FALSE
  18. stop
  20. ; --------------------------------------------------------
  22. sub Callback1
  23.   display ok Callback 1 called!
  24. return
  26. ; --------------------------------------------------------
  28. sub TM_ResetTimers
  29.   namespace push
  30.   namespace global TM_TIMER
  31.   namespace clear
  32.   namespace pop
  33. return
  35. ; --------------------------------------------------------
  37. sub TM_RegisterTimer
  38.   namespace push
  39.   namespace global TM_TIMER
  41.   if !num = N/A
  42.     set !num -1
  43.   if %0 < 4
  44.   {
  45.     display ok 4 arguments required for TM_RegisterTimer - stopping
  46.     stop  
  47.   }
  48.   set !num !num + 1
  49.   set !var %1
  50.   set !function %2 ; auto, number
  51.   set !time_length %3
  52.   set !time_unit %4 ; millisecond, second, minute, hour
  53.   if %0 = 5
  54.     set !callback %5
  55.   else
  56.     set !callback N/A
  57.   set ! . timer , !num !var ; save the name to a list for automatic time updating
  58.   set ! . !var , function !function
  59.   set ! . !var , trigger_max !function
  60.   set ! . !var , time_length !time_length
  61.   set ! . !var , time_unit !time_unit
  62.   set ! . !var , callback !callback
  63.   set ! . !var , enabled #TRUE
  65.   if !time_unit notin _millisecond_second_minute_hour_
  66.   {
  67.     display ok time unit not equal to millisecond, second, minute, hour - stopping
  68.     stop
  69.   }
  70.   if !time_unit = millisecond
  71.     set ! . !var , time_unit !time_length
  72.   if !time_unit = second
  73.     set ! . !var , time_unit ( !time_length * 20 )
  74.   if !time_unit = minute
  75.     set ! . !var , time_unit ( !time_length * 20 * 60 )
  76.   if !time_unit = hour
  77.     set ! . !var , time_unit ( !time_length * 20 * 60 * 60 )
  79.   set !time_unit !var , time_unit
  80.   set ! . !var , timer ( #SCNT2 + ( ! . !time_unit ) )  ; set the actual end time
  81.   namespace pop
  82. return
  84. ; --------------------------------------------------------
  86. sub TM_ProcessTimers
  87.   namespace push
  88.   namespace global TM_TIMER
  89.   set !lpc #LPC
  90.   set #LPC 200
  92.   set !RESULT
  93.   for !i 0 !num
  94.   {
  95.     set !current_name ! . timer . !i
  96.     set !enabled !current_name , enabled
  97.     set !timer !current_name , timer
  98.     set !time_unit !current_name , time_unit
  99.     set !function !current_name , function
  100.     set !callback !current_name , callback
  102.     set !test1 #SCNT2 , _ , ! . !timer
  103.     if ( ( ! . !enabled = #TRUE ) && ( #SCNT2 > ( ! . !timer ) ) )
  104.     {
  105.       set !function !current_name , function
  106.       if ( ( ( ! . !function ) = auto ) || ( ! . !function <> 0 ) )
  107.       {
  108.         set !RESULT !RESULT , _ , !current_name ; add expired timer name to present list
  109.         set ! . !timer ( #SCNT2 + ( ! . !time_unit ) )  ; set the actual end time, resetting timer
  110.         if ! . !function <> auto
  111.           set ! . !function ( ( ! . !function ) - 1 )
  112.         if ! . !callback <> N/A
  113.           gosub ! . !callback
  114.       }
  115.     }
  116.   }
  117.   set #RESULT !RESULT
  118.   set #LPC !lpc
  119.   namespace pop
  120. return #RESULT
  122. ; --------------------------------------------------------
  124. sub TM_RestartTimer
  125.   namespace push
  126.   namespace global TM_TIMER
  127.   set !name %1
  129.   set !function !name , function
  130.   set !trigger_max !name , trigger_max
  131.   set !enabled !name , enabled
  132.   set !timer !name , timer
  133.   set !time_unit !name , time_unit
  135.   set ! . !function ! . !trigger_max
  136.   set ! . !enable #TRUE
  138.   set ! . !timer ( #SCNT2 + ( ! . !time_unit ) )  ; set the actual end time
  139.   namespace pop
  140. return
  142. ; --------------------------------------------------------
  144. sub TM_StopTimer
  145.   namespace push
  146.   namespace global TM_TIMER
  147.   set !name %1
  148.   set !enabled !name , enabled
  149.   set ! . !enabled #FALSE
  150.   namespace pop
  151. return

Site News / The end is a new beginning.
« on: October 21, 2017, 09:32:03 AM »
After the announced closure of ScriptUO, I was amazed by the outpouring of concern and support in PMs.  Many people offered either monetary help or just to plain take over the responsibilities of running this site.  I've got some pretty high standards for how to run a public site (as bitched about by the people failing the intro test).  That goes further from the administrative perspective making sure the site runs with relatively clean error logs and hand-modification of mods until they work just right.

After contemplating the potential of transferring ownership to a new person, I decided that'd be an acceptable option if the right person stepped forward. 

I've known and worked with Tidus for years and years now.  He's proven to know his way around network administration and has the available LAMP infrastructure to host this site and administer it going forward.  So in the next few days and weeks, he'll take over the full day-to-day hosting and administration of this site.  He's promised to maintain it, so hopefully what you see now will be what you'll see in a few years.  I always hate seeing site radicallly change their look because a site kinda becomes "homey" after a while and users feel a sense of loss when the site look/feel undergo changes.  ScriptUO only changed once (forced to) in its entire existence.  So hopefully he'll be able to keep that tradition alive.  (hopefully no conversions to VBulletin or that gawd-aweful Xenforo)

I'll stick around through the transition process and once the site is up and running smoothly at its new home (switching servers) then I'll depart these shores.

So help me in thanking and welcoming your new Admin, Tidus!  Gimlet has also enthusiastically re-volunteered to continue on as your Greeter-in-chief GMOD. 

So good news for you and hopefully this will infuse a bit of enthusiasm in the community as a whole.  (Har, he said a-hole).

All my best,

Site News / So long, and thanks for all the fish!
« on: October 17, 2017, 11:49:25 AM »
So I've been out of the scripting business for quite a while now.  I've also been pretty much out of the UO business for even longer.  I think it's time for me to hang up everything for good.

So with that, at the end of the month I'm going to put the site into maintenance mode so that it can be used as a reference, but all new content and development will end.

Now if someone would like to step forward and take things over, we can talk about doing a transfer so that the site can proceed forward.  I've got some pretty high standards in that regard, so if it's not transferred to the right person(s) then I'd rather see it just go dormant.  This community has been through too much with losing content, so I don't want to see that happen and I won't let that happen.

So with that, it's been fun.  But as they say, "All good things do come to and end".

And yes, it's not April 1st.  heh

General UO Chat / Champ spawns in 2017
« on: August 16, 2017, 09:59:25 AM »
So, in surfing the web, it seems there's a bit of information out there about champ spawns, but nothing very new.  SO:

I'm looking to see what people think about:
1) Their favorite spawn and why?
2) Is it soloable (or multicliented)?
3) Favorite character template and items to use

I know there might be some duplicate threads around, but nothing that really brings them all together.

So let's hear your ideas!

General UO Chat / Your favorite castle placement locations
« on: August 07, 2017, 07:41:27 PM »
So I'm in the process of looking for another location to place a castle.  I'm bursting the seams of my present one, so I need to put another down. 

In your past, what's been the best locations you've ever had or can recall seeing one?

General UO Chat / A Chaga Mushroom spawn
« on: July 19, 2017, 10:23:13 PM »
So do these just spawn laying around on the ground?  I see they spawn in different places on uoguide, but I'm unsure of their frequency or number.  Anyone have an idea?  Coordinates would be helpful; I'm trying to get them to spawn correctly on Rebirth, but I just don't know the basics of when and where.  heh

General UO Chat / New OSI Animal training discussion
« on: May 08, 2017, 08:39:18 AM »
I was looking at the training system over at and thought it would be good to discuss it.

I see there are stat caps, but I don't see that these caps are applied to any specific creature.  Can you train a chicken to be strength of 700 and have hit points of 1100?  That's just a "for example".  heh

I'm interested in how people are using this and the basics of how it works.  I'd like to modify my creature evaluator to help this system, but at the moment I have limited understanding of the new system.


RebirthUO / Easter Invasion countdown
« on: April 24, 2017, 07:18:46 AM »

Scripting Chat / A personal favor
« on: April 14, 2017, 06:52:05 PM »
So most of you have seen that Cheffe is working on what could be some interesting changes for EasyUO.  Some eggs were broken at the beginning, but it looks like he's sorting out the issues. 

I've had a request from EasyUO for help in testing the new version and subsequent versions with Cheffe's new additions.  So I'd appreciate if you'd choose your favorite set of scripts, grab the latest version of EasyUO from HERE and give them a try to make sure they still work as you would expect.  Use scripts that you are VERY used to seeing work every day so you'll know right away if something is amiss.  Also try scripts that are older and more obscure.

Finally, if you find an issue, please go over to EasyUO and post CONSTRUCTIVE feedback to help Cheffe work through the issue.  Please actively help where you can.

I won't be publishing updates to EasyUO like I normally do because we should focus on helping him get the code ready for release, and we can't do that when there's more than one fork in the codebase.


As promised, here's a list of motherboards and systems I've built over the years.  These are systems that I used starting from around 1989 till present.

1/2 way through the stack of motherboard manuals.  Presently at 21 systems.

Computer Rigs / My new Ryzen build
« on: April 01, 2017, 05:00:27 PM »
Tidus asked what my new build entails, so here it is:

AMD Ryzen 1700X 8/16(core/thread) 3.4/3.8GHZ CPU, $399
Gigabyte AB350-Gaming 3 Motherboard, $109
SanDisk SD8NAT123G1002 M.2 128GB Mkey (boot) $free (from old build)
SanDisk Ultra II 480GB SATA FLASH (Programs) $free (from old build)
Seagate  ST4000DM005 4TB drive (Users) , $119
Corsair 16GB DDR4 2133MHz (CMV8GX4M1A2133C15) (2x8GB), $114
NVIDIA GTX1070SC Video card, $398 (open-box.  not including $40 rebate)
Corsair CX750 750W power supply, $80
Roswill ATX gaming tower, $60
ThermalTake Contac Silent CPU fan, $25

Corsair Vengeance (9CMK16GXm2A2400C16) does not work!!!!

I originally started out with an ASUS Prime X370-Pro motherboard, but I couldn't get it to POST.  I then turned in that board for this one (Gigabyte) and also no POST.  Finally I got an ASUS PRIME B350M-A motherboard and no POST.  I exchanged the CPU and still no POST, so I changed from 2400MHz memory to 2133MHz memory and like magic everything started to work.

So I've got around $1300 bucks into this new rig (not including the 2 "free" drives)

Pages: [1] 2 3 ... 25