I thought it would be a good idea to start a cMUD repository. Post your cMUD scripts here. If your script can also be used with zMUD, please make a note of it.
#VAR Tree {greenink|greenink|greenink|greenink|greenink}
#VAR Mountain {greenink|blueink|goldink}
#VAR Chameleon {goldink|purpleink|yellowink}
#ALIAS INK($tat,$on,$side,$part,$of,$who) {Cur_Tattoo=$tat;#FORALL %expand(@%expand(@Cur_Tattoo)) {outc %i};#IF ($who) {~INK $tat on $side $part of $who} {~INK $tat on $side of $of}}
I find this cMUD only script to be extremely useful.
First, it'll capture your Icewall, Firewall and Firelash enchantment's (on a ring) simply by viewing MAGICLIST. Once done, you can FIRELASH <dir>, FIREWALL <dir> or ICEWALL <dir> to cast that enchantment in the specified direction. This script also allows you to only be wearing one ring at a time, leaving you space for those signet rings, resistance rings, etc. It'll automatically switch rings for you. Last, I included a nifty little script which captures room exits and tracks which exits currently have an icewall (or not). To completely icewall yourself into a room, which is nifty for leylines and such, simply type ICE. It will then icewall each exit in turn.
OD: Opens a door, moves through, and closes it behind you.
UD Same as above, but also locks and unlocks the door.
#CLASS {Misc|Doors}
#ALIAS OD {#IF (%1=in) {open door in;in;close door out} {#IF (%1=out) {open door out;out;close door in} {open door %1;%1;close door %reversedir(%1)}}}
#ALIAS UD {#IF (%1=in) {unlock door in;od in;lock door out} {#IF (%1=out) {unlock door out;od out;lock door in} {unlock door %1;od %1;lock door %reversedir(%1)}}}
I like to keep an eye on when my guildmates arrive. Some have found this slightly creepy, but whatever. Simply type GUILDWHO once and it'll begin checking every 60 seconds and alert you to newly arrived guildmates. By the way, it'll also gag this, so you wont even see that it's checking.
You can also capture lines to another window through color (I do this to track emotes). Just select "ansi trigger" for trigger type and then paste part of the colored text you want to copy. Then delete the words themselves and replace them with *
I have one problem with it, it doesn't seem to capture the second line of anything anyone says, how do I fix that if you could tell me?
Try setting wrapwidth to 0 so your client does the wrapping instead of server side. Pretty sure that's the fix that worked last time I helped someone with it.
Here's my crit counter with a NEW AND IMPROVED damage tracking and overkill uptime feature! AND COLOR!
Track how many critical hits you get. Make sure to change the trigger for adding to totalhits to match your own attack type! (here it is set to "You strike"). Also set the variable DAMAGESPEED to the balance/eq for your bashing attack (3.25, 4.0, etc). Finally, turn config mobdamage on.
SHOWCRITS to view your current crit readout RESETCRITS to reset crit counter. Do this on first import to set everything to zero.
Type VSET to reset vibe set, then just type VIBE each time you have EQ to lay a new one. If you want to change the priority just shift around the string list (I have it set to what you probably want most for combat). Type VIBELIST to get a quick refresher of what each vibe does and a shortcut alias to spin and embed each one.
Also, so people stop asking me how to do this, here's how you do a varying, random return message.
#al {msgshuffle} {set returnmessage %item( @msgshuffle, %random( 1, %numitems( @msgshuffle)))} #tr {* has just left you message #(%d).} {msgshuffle} #var {msgshuffle} {snazzy return message 1|fun return message 2|you get the picture}
Be sure to put the trigger into your disable-able options class, so it doesn't fire during stuff like behead, etc. That has totally never happened to me. Ahem.
#tr {Cutting open the corpse of} {#temp {You have recovered equil*} {diss}}
#tr {You cannot seem to find that organ anywhere in the body.} {diss}
>_> Hey, it actually ends up working fairly well. I don't advise this if you want certain organs, though. It's more of a "hit it and quit it while you're grabbing a smoke after bashing" thing.
I made a little esteem tracker. If there is anything you'd like added, I can maaaaybe tweak things and make it niftier, so msg me if you have ideas to adjust this.
ESTEEMS # # - similar to readlog, first number is the starting spot, second number is the ending spot (this lets you view smaller chunks). Note that the numbers are based on the PEOPLE who have esteemed you.
eg ESTEEMS 2 4 will bring up esteem for people 2, 3 and 4 (people are listed at the bottom)
ESTEEMS FROM (name) - display all esteems from a specific person
ESTEEMLIST - displays how many people have esteemed you and who they are
#trigger {^(%w) has expressed {his|her} esteem of you for the following reason: (*)} {#if (%iskey( @esteem, %1)) {#addkey esteem {%1} {%db( @esteem, %1)|%2}} {#addkey esteem {%1} {%2}}}
MKL <#> - how many vials of what venom you want to milk. Eg MKL 2 ACONITE. Feel free to type in a whole long list of all the things you want to do MILKCLEAR - clears out your current milking list MILKSHOW - shows your current milking list MILKSTART (cask) - starts the bot. Appending cask will milk into a cask instead of vials MILKSTOP - aborts automated milking
NOTE: You can hold whatever vials you want, but the bot will milk into empties. Pots and cups can sometimes mess this up, so just drop them if you get an error about having nothing to milk into.
Compare your current stock to your patterns for restocking. Lemme know if anyone has any ideas they'd like to see added with the outfits and stuff.
STOCKHELP - quick reminder of syntax PSTK - captures all values of a crafted item, eg PSTK SHIRT CSTK - captures all current items for sale, eg CSTK SHIRT RSTK - compares potential stock to current stock and echoes back what you need to restock GOSTK - automatically creates needed items. NOTE: materials must be in hand!
CRSTK <price> <shelf#> - Sets all unstocked designs to the crafting shelf
---> Tip, you can just do PSTK (item) to pull all items of that type and then run CRSTK to stock all item of your patterns for that type in a crafting shelf, even if you have physical versions available.
PSET - captures all items of a specific type, eg II SHIRT PRI - prices all items of that type the specified price on the designated shelf, eg PRI 250 3. Sends price single item# price# shelf# for all items of that type.
I made a little esteem tracker. If there is anything you'd like added, I can maaaaybe tweak things and make it niftier, so msg me if you have ideas to adjust this.
I had no idea Esteem even existed...wonder what other tidbits I don't know about from my multi-year sleep
Made a little system to let you make and track personal notes. You can just track these as a background thing to call up when you want to view them or you can toggle echo to a window so they can always be there to look at!
NOTEHELP has the syntax when you pop the file in. Enjoy!
DaskalosCredit Whore ExtraordinareRolling amongst piles of credits.
Stolen.
Message #17059 Sent By: Oleis Received On: 1/03/2014/17:24 "If it makes you feel better, just checking your artifact list threatens to crash my mudlet."
Oh, I thought he just meant that he grabbed the code to use. Like, "Haha totally stealing this!" I don't think he means that I copied someone's code? I uhh...I didn't take it from anyone else, I just made it last night...
1
DaskalosCredit Whore ExtraordinareRolling amongst piles of credits.
I just meant I was stealing it to put in my system...
Message #17059 Sent By: Oleis Received On: 1/03/2014/17:24 "If it makes you feel better, just checking your artifact list threatens to crash my mudlet."
<value>#say %ansi( red, high) RECKLESS YOU NEWB RECKLESS!!!!;#say %ansi( red, high) RECKLESS YOU NEWB RECKLESS!!!!;#say %ansi( red, high) RECKLESS YOU NEWB RECKLESS!!!!
</value>
NOTE: You will need to have your prompt read H: currenthealth/maxhealth M: currentmana/maxmana. If you don't use that for your prompt, you will need to adjust the triggers in the reckless folder and set a trigger to capture your maxhealth/maxmana off score.
Edit: I am sure this can be done far easier and fancier with gmcp, but I've not gotten around to touching that yet. Sorry!
DaskalosCredit Whore ExtraordinareRolling amongst piles of credits.
(I tab my windows and have them set to come to the forefront with activity)
Message #17059 Sent By: Oleis Received On: 1/03/2014/17:24 "If it makes you feel better, just checking your artifact list threatens to crash my mudlet."
Currently setup to change dependent on character name. Obviously you can change this variable to whatever you use, use gmcp if you so wish (I'm iffy on gmcp for name)
Currently setup to display 3 announcements at a time, but it's easy enough to edit to add more.
I recommend adding the alias 'pnounce' to the trigger 'Your last login was from:' line that you get when you get in the game, though considering how my own system goes through a -ton- of crap initially when I log in, I have a wait of 3.5 seconds before it fires.
Made a little system to let you make and track personal notes. You can just track these as a background thing to call up when you want to view them or you can toggle echo to a window so they can always be there to look at!
NOTEHELP has the syntax when you pop the file in. Enjoy!
If anyone uses this can you post here? I fixed a bug with it, but am lazy and am not gonna bother upload new code if it's not used, heh. >_>
0
DaskalosCredit Whore ExtraordinareRolling amongst piles of credits.
I do!
Message #17059 Sent By: Oleis Received On: 1/03/2014/17:24 "If it makes you feel better, just checking your artifact list threatens to crash my mudlet."
Comments
Updated to work on CMUD:
Xml: https://sites.google.com/site/jlhealy/code/crit_counter.xml?attredirects=0&d=1
--------
Here's my crit counter with a NEW AND IMPROVED damage tracking and overkill uptime feature! AND COLOR!
Track how many critical hits you get. Make sure to change the trigger for adding to totalhits to match your own attack type! (here it is set to "You strike"). Also set the variable DAMAGESPEED to the balance/eq for your bashing attack (3.25, 4.0, etc). Finally, turn config mobdamage on.
SHOWCRITS to view your current crit readout
RESETCRITS to reset crit counter. Do this on first import to set everything to zero.
#CLASS {critcounter}
#ALIAS showcrits {#math normalhits (@totalhits-@crithits-@staghits-@crushhits-@muthits-@annhits)
totalpercent=100.0
critpercent= %format( 2, %eval( @crithits*100.00/@totalhits))
stagpercent=%format( 2, %eval( @staghits*100.00/@totalhits))
crushpercent=%format( 2, %eval( @crushhits*100.00/@totalhits))
mutpercent= %format( 2, %eval( @muthits*100.00/@totalhits))
annpercent= %format( 2, %eval( @annhits*100.00/@totalhits))
normalpercent= %format( 2, %eval( @normalhits*100.00/@totalhits))
#math totalcrits @totalhits-@normalhits
totalcritpercent= %format( 2, %eval( @totalcrits*100.00/@totalhits))
#var totaldamage {}
#loop 1,%numitems( @damagedone) {#add totaldamage %item( @damagedone, %i)}
#var dps {}
#math damagecalc (@totaldamage/%numitems( @damagedone))
#math dps @damagecalc/@damagespeed
overkilluptime=%format(2, %eval(@overkilled*100/@overkilltotal))
dps=%format( 2, @dps)
#say
#show %ansi( cyan).:*~~*:.%ansi( high, white)C%ansi( cyan).:*~~*:.%ansi( high, white)R%ansi( cyan).:*~~*:.%ansi( high, white)I%ansi( cyan).:*~~*:.%ansi( high, white)T%ansi( cyan).:*~~*:.%ansi( high, white)S%ansi( cyan).:*~~*:.
#show %ansi( cyan).
#show %ansi( cyan)* %ansi( cyan)Hits %ansi( cyan)............................%ansi( cyan)@totalhits @totalpercent%ansi( cyan)% *
#show %ansi( cyan). %ansi( high, white)Normal %ansi( cyan)..........................%ansi( high, white)@normalhits @normalpercent%ansi( cyan)% .
#show %ansi( cyan)* %ansi( high, red)Critical %ansi( cyan)........................%ansi( high, red)@crithits @critpercent%ansi( cyan)% *
#show %ansi( cyan). %ansi( yellow)Staggering %ansi( cyan).......................%ansi( yellow)@staghits @stagpercent%ansi( cyan)% .
#show %ansi( cyan)* %ansi( high, cyan)Crushing %ansi( cyan).........................%ansi( high, cyan)@crushhits @crushpercent%ansi( cyan)% *
#show %ansi( cyan). %ansi( high, blue)Mutilating %ansi( cyan).......................%ansi( high, blue)@muthits @mutpercent%ansi( cyan)% .
#show %ansi( cyan)* %ansi( high, green)Annihilating %ansi( cyan).....................%ansi( high, green)@annhits @annpercent%ansi( cyan)% *
#show %ansi( cyan) .
#show %ansi( cyan)* %ansi( cyan)Total hits: @totalhits
#show %ansi( cyan). %ansi( cyan)Total criticals: @totalcrits
#show %ansi( cyan)* Crit percentage: %ansi( high, white)@totalcritpercent%
#show %ansi( cyan).
#show %ansi( cyan)* %ansi( cyan)Average hit value: @damagecalc
#show %ansi( cyan). %ansi( cyan)Average of %ansi( high, white)@dps %ansi( cyan)damage per second.
#show %ansi( cyan)*
#show %ansi( cyan). %ansi( cyan)Overkills: @overkilled
#show %ansi( cyan)* %ansi( cyan)Wasted overkills: @overkillmissed
#show %ansi( cyan). %ansi( cyan)Overkill uptime: @overkilluptime~%
#show %ansi( cyan)*
#show %ansi( cyan).:*~~*:.%ansi( high, white)_%ansi( cyan).:*~~*:.%ansi( high, white)_%ansi( cyan).:*~~*:.%ansi( high, white)_%ansi( cyan).:*~~*:.%ansi( high, white)_%ansi( cyan).:*~~*:.%ansi( high, white)_%ansi( cyan).:*~~*:.}#ALIAS resetcrits {totalhits=0;normalhits=0;crithits=0;staghits=0;crushhits=0;muthits=0;annhits=0;
#var damagedone {}}
#TRIGGER {^You strike} {#add totalhits 1}
#TRIGGER {^You have scored a CRITICAL hit!} {#add crithits 1}
#TRIGGER {^You have scored a STAGGERING CRITICAL hit!} {#add staghits 1}
#TRIGGER {^You have scored a CRUSHING CRITICAL hit!} {#add crushhits 1}
#TRIGGER {^You have scored a MUTILATING CRITICAL hit!} {#add muthits 1}
#TRIGGER {^You have scored an ANNIHILATING CRITICAL hit!!!} {#add annhits 1}
#TRIGGER {^Damage done: (%d), %w.$} {lastdamage=%1;#var damagedone %additem( %1, @damagedone)}
#TRIGGER {^Damage done: (%d) ~((%d) overkill~), %w.$} {#if @bash=1 {lastdamage=%2+%1;#var damagedone;%additem( @lastdamage, @damagedone); #add overkilled 1}}
#TRIGGER {^The rush of energy fades.$} {#add overkillmissed 1}
#TRIGGER {^A rush of energy fills you as you feel ready to deliver a devastating blow upon your next target.$} {#add overkilltotal 1}
#VARIABLE {cirthits} {0}
#VARIABLE {staghits} {0}
#VARIABLE {crushhits} {0}
#VARIABLE {muthits} {0}
#VARIABLE {annhits} {0}
#VARIABLE {lastdamage} {0}
#VARIABLE {damagedone} {0}
#VARIABLE {dps} {0}
#VARIABLE {damagecalc} {0}
#VARIABLE {damagespeed} {0}
#VARIABLE {overkilltotal} {0}
#VARIABLE {overkilled} {0}
#VARIABLE {overkillmissed} {0}
#CLASS 0
Display:
.:*~*:.C.:*~*:.R.:*~*:.I.:*~*:.T.:*~*:.S.:*~*:.
.
* Hits ............................429 100% *
. Normal ..........................234 54.55% .
* Critical ........................87 20.28% *
. Staggering .......................43 10.02% .
* Crushing .........................25 5.83% *
. Mutilating .......................21 4.90% .
* Annihilating .....................19 4.43% *
.
* Total hits: 429
. Total criticals: 195
* Crit percentage: 45.45%
.
* Average hit value: 4260
. Average of 1217.14 damage per second.
*
. Overkills: 13
* Wasted overkills: 3
. Overkill uptime: 81.00%
*
.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:.
#tr {* has just left you message #(%d).} {msgshuffle}
#var {msgshuffle} {snazzy return message 1|fun return message 2|you get the picture}
Be sure to put the trigger into your disable-able options class, so it doesn't fire during stuff like behead, etc. That has totally never happened to me. Ahem.
Venom Milking Bot!
If any errors pop up, lemme know!
XML: https://sites.google.com/site/jlhealy/code/milkbot.xml?attredirects=0&d=1
Text: https://sites.google.com/site/jlhealy/code/milkbot.txt?attredirects=0&d=1
PG-13-rated add-on for Kiyo: https://sites.google.com/site/jlhealy/code/kiyomilk.TXT?attredirects=0&d=1
Syntax:
MKL <#> - how many vials of what venom you want to milk. Eg MKL 2 ACONITE. Feel free to type in a whole long list of all the things you want to do
MILKCLEAR - clears out your current milking list
MILKSHOW - shows your current milking list
MILKSTART (cask) - starts the bot. Appending cask will milk into a cask instead of vials
MILKSTOP - aborts automated milking
NOTE: You can hold whatever vials you want, but the bot will milk into empties. Pots and cups can sometimes mess this up, so just drop them if you get an error about having nothing to milk into.
#CLASS {milking}
#ALIAS milkstop {#t- milkbot;milkstatus=0}
#ALIAS mv {#t+ milkbot;milkstatus=1;milk=%2;milkvenom=%2;milks=6;milknumber=%1;milkvial=%2;secrete %2;milk venom into empty;purge}
#TRIGGER {The syntax to use is MILK} {purge;milkstop;#say MILKBOT ABORTED!}
#ALIAS milkclear {#var milklist {};#var milklistnumbers {}} "moireansettings"
#ALIAS milkshow {#say;#say *** Milking Order ***;#say ---------------------;#if @milkstatus=1 {#say @milknumber @milkvenom;#if {%numitems( @milklist)>1} {#loo 2,%numitems( @milklist) {#say %item( @milklistnumbers, %i) %item( @milklist, %i)}} {}} {#loo 1,%numitems( @milklist) {#say %item( @milklistnumbers, %i) %item( @milklist, %i)}}} "moireansettings"
#ALIAS milkstart {#t+ milkbot;milkstatus=1;milksource=%1;#var milk %item( @milklist, 1);milkvenom=%item( @milklist, 1);milks=6;milknumber=%item( @milklistnumbers, 1);milkvial=%item( @milklist, 1);secrete %item( @milklist, 1);#if @milksource=cask {milk venom into cask} {milk venom into empty};purge} "moireansettings"
#ALIAS mkl {#var milklistnumbers %additem( %1, @milklistnumbers);#var milklist %additem( %2, @milklist);milkshow}
#CLASS 0
#CLASS {milking|milkbot}
#VAR milk {}
#TRIGGER {You have recovered balance on all limbs.} {#if (@milknumber>1) {#if @milksource=cask {secrete @milk;milk venom into cask;#math milknumber @milknumber-1;purge} {secrete @milk;milk venom into empty;#math milknumber @milknumber-1;purge}} {#if (%numitems( @milklist)>0) {#delnitem milklist 1;#delnitem milklistnumbers 1;mv %item( @milklistnumbers, 1) %item( @milklist, 1);milkshow;milkstart} {#t- milkbot;#say MILKING DONE!}}}
#TRIGGER {That vial can't hold that much venom.} {purge;#math milknumber @milknumber-1;drop @milkvial;#if {@milknumber>0} {milks=5;secrete @milk;milk venom into empty;milkshow} {#if (%numitems( @milklist)>0) {#delnitem milklist 1;#delnitem milklistnumbers 1;mv %item( @milklistnumbers, 1) %item( @milklist, 1);milkshow} {#t- milkbot;#say MILKING DONE!}}}
#CLASS 0
Some shop setting stuff!
XML: https://sites.google.com/site/jlhealy/code/shopstuff.xml?attredirects=0&d=1
Compare your current stock to your patterns for restocking. Lemme know if anyone has any ideas they'd like to see added with the outfits and stuff.
STOCKHELP - quick reminder of syntax
PSTK - captures all values of a crafted item, eg PSTK SHIRT
CSTK - captures all current items for sale, eg CSTK SHIRT
RSTK - compares potential stock to current stock and echoes back what you need to restock
GOSTK - automatically creates needed items. NOTE: materials must be in hand!
CRSTK <price> <shelf#> - Sets all unstocked designs to the crafting shelf
---> Tip, you can just do PSTK (item) to pull all items of that type and then run CRSTK to stock all item of your patterns for that type in a crafting shelf, even if you have physical versions available.
STOCKSTOP - Stop the automated restocking
Example of display :
---------------------------------------------------------------------
Updating DRESS patterns you need to restock...
---------------------------------------------------------------------
NEED TO MAKE anelegantazuresilk - 14866
NEED TO MAKE asapphirevelvetdre - 15253
NEED TO MAKE anelegantivorywedd - 15265
------------------
Lazy quick item pricing.
Syntax:
PSET - captures all items of a specific type, eg II SHIRT
PRI - prices all items of that type the specified price on the designated shelf, eg PRI 250 3 for pricing the shirts at 250 gold on shelf 3.
alias {pset} {#var stocklist {};#t+ priceset;ii %1;#alarm +3 {#t- priceset}}
#class priceset
#trigger {~"(%w)(%d)~"} {#additem stocklist %1%2}
#class 0
#alias {pri} {#forall @stocklist {price %i %1 shelf %2};#var stocklist {}}
--------------
Syntax:
PSET - captures all items of a specific type, eg II SHIRT
PRI - prices all items of that type the specified price on the designated shelf, eg PRI 250 3. Sends price single item# price# shelf# for all items of that type.
#alias {pset} {#var stocklist {};#t+ priceset;ii %1;#alarm +3 {#t- priceset}}
#class priceset
#trigger {~"(%w)(%d)~"} {#additem stocklist %1%2}
#class 0
#alias {pri} {#forall @stocklist {price single %i %1 shelf %2};#var stocklist {}}
----------
Message #17059 Sent By: Oleis Received On: 1/03/2014/17:24
"If it makes you feel better, just checking your artifact list threatens to crash my mudlet."
Message #17059 Sent By: Oleis Received On: 1/03/2014/17:24
"If it makes you feel better, just checking your artifact list threatens to crash my mudlet."
Though my creation is a bit different. Dear god I have enough Windows as it is. DASK HOW DO YOU HAVE ROOM FOR MORE.
Anyway, because I've been wanting in-game PHELP (like ghelp, but personal help) and got tired of waiting. I coded my own.
Enjoy.
https://docs.google.com/file/d/0B6cFzUF23FxweDVVRHJHSWVKZXc/edit?usp=sharing
PHELP is both the base command, and the help file.
Colorcheck is in a different part of my system...soo.. Here's that.
(Just make an alias for it, I call mine colorcheck...I'm terribly clever.)
[spoiler]
#echo %cr
#echo %ansi( 1)a 1
#echo %ansi( 2)a 2
#echo %ansi( 3)a 3
#echo %ansi( 4)a 4
#echo %ansi( 5)a 5
#echo %ansi( 6)a 6
#echo %ansi( 7)a 7
#echo %ansi( 8)a 8
#echo %ansi( 9)a 9
#echo %ansi( 10)a 10
#echo %ansi( 11)a 11
#echo %ansi( 12)a 12
#echo %ansi( 13)a 13
#echo %ansi( 14)a 14
#echo %ansi( 15)a 15
#echo %ansi( 16)a 16
#echo %ansi( 17)a 17
#echo %ansi( 18)a 18
#echo %ansi( 19)a 19
#echo %ansi( 20)a 20
#echo %ansi( 21)a 21
#echo %ansi( 22)a 22
#echo %ansi( 23)a 23
#echo %ansi( 24)a 24
#echo %ansi( 25)a 25
#echo %ansi( 26)a 26
#echo %ansi( 27)a 27
#echo %ansi( 28)a 28
#echo %ansi( 29)a 29
#echo %ansi( 30)a 30
#echo %ansi( 31)a 31
#echo %ansi( 32)a 32
#echo %ansi( 33)a 33
#echo %ansi( 34)a 34
#echo %ansi( 35)a 35
#echo %ansi( 36)a 36
#echo %ansi( 37)a 37
#echo %ansi( 38)a 38
#echo %ansi( 39)a 39
#echo %ansi( 40)a 40
[/spoiler]
Message #17059 Sent By: Oleis Received On: 1/03/2014/17:24
"If it makes you feel better, just checking your artifact list threatens to crash my mudlet."
PNOUNCEMENTS! (Personal announcements)
Currently setup to change dependent on character name. Obviously you can change this variable to whatever you use, use gmcp if you so wish (I'm iffy on gmcp for name)
Currently setup to display 3 announcements at a time, but it's easy enough to edit to add more.
https://docs.google.com/file/d/0B6cFzUF23FxwTWprZTh4UHduUEU/edit?usp=sharing
I recommend adding the alias 'pnounce' to the trigger 'Your last login was from:' line that you get when you get in the game, though considering how my own system goes through a -ton- of crap initially when I log in, I have a wait of 3.5 seconds before it fires.
Message #17059 Sent By: Oleis Received On: 1/03/2014/17:24
"If it makes you feel better, just checking your artifact list threatens to crash my mudlet."