Mud Client Ideas

From Dyrdex.com
Jump to navigation Jump to search

So you think you're some kinda Power User huh? More like Power Loser amiright?!?!?!?!

This page is meant to give new players an idea of the scope of what people are actually doing client-side.

I have a buddy who says 'So that game sucks and before you can play it you first have to play the game of 'how do I code my client to make this actually playable'. He's kinda not wrong.


Quick Prep

Code your own spell bot script and bring your bots with you on runs.

Have an alias to quaff a tank set.

Have an alias to apply any class-specific skills/spells you get.

When its time to prep for a run, get all spells from your bots, quaff a tankset, apply anything else, and then log off. Your guy should be 100% ready to rock and offline.

Have an alias to do all this for you:

prep - an alias to trigger your spell bots, quaff all tank pots, apply all skills.

Quick Reset

A full reset alias is helpful, that can be broken down into this component aliases you can fire individually if necessary as well:

repair  - an alias to run you to your preferred repair mob, remove all, repair all, wear all, recall.
refavor - an alias to run to a'enari/vl'aresch to refavor back to praised, and recall. 
restock - an alias to buy you heals/manas and restock tank pots from a donation shelf. 

If you've done a kill on something and people say 'reset', its realllll nice to just type 'recall... reset' and then go get a drink while that all happens.

The restocking alias is the one that takes the most scripting. You'll need to establish a variable that keeps your desired stock levels of stuff, then, also set up a trigger that can be enabled when you examine your containers that will catch all the potion names and record how many you have into a 'current stock' variable. Then, the restock alias just uses some math to compare your desired levels to your actual current levels and gets the difference from your potion shelf.


General Gameplay Stuff

If there are tasks you do frequently, you should set them up as aliases/triggers.

Here's just some things that I set up to make my life easier:

  • Aliases to set a character's preferred method of recalling/create springs/dispelling magic/flying (spell/scroll/potion/item).
  • Aliases to actually do those tasks 'dispel' 'recall' 'spring' 'fly' so I don't type the whole full commands.
  • Auto re-style, re-search, re-dig, track+follow. Anything that frequently fails, set up auto re-do.
  • Dump a tank set, get a tankset, quaff a tankset. Use elemental staves, other staves/items.
  • Auto re-cast failed spells. Also an alias to toggle this functionality on/off.
  • Auto re-quaff/cast spells as they expire. Like to redo sanctuary or true sight as they expire.

Start a file of general conveniences that make your life easier, build it out over time.

Speedwalks

You should have speedwalk aliases set up. Doing Copy/Paste from rodpedia sucks. Just start making a file with all those dirs in them and aliases to run em from dh[].


Logging

You should log everything.

When you die you can actually go read exactly what happened and learn and make changes.


Repop Tracking

Sick of sitting around wondering when repop will be?

Find every repop message, create a trigger on them all to take the current timestamp. Set up a trigger or alias to compare current timestamp to the repop timestamp.

Can get fancy and calculate averages, and make a trigger that you and your friends can use:

Someguy wonders 'repop?'
Dyrdex says "New Darkhaven - 12 minutes since Repop. Area average 15 minutes. Expected Repop 7:35 PM EST"

MSDP

Use a modern client that can receive MSDP variables from the mud. You will automatically have variables for your hp, room names, stats, everything. It makes it very easy to script stuff based on all those values.

I use tintin++ and have a MSDP script for that here: MSDP Script

Autofight

You'll want to set up aliases, macros, or a trigger to make fighting easier. The basis of this should be a function that decides whether to hit the mob, or heal up to full.

There are many ways to automate this. The degree to which you want to just use aliases or macros, vs a fully automated script is up to you.

In any case, SOME level of fight assistance is going to be basically required. You'll want it to try to handle a bunch of conditions, such as:

  • Healing (set a threshold at which to begin healing)
  • Stomach fullness and spring drinking (also usage of spells like salinate, or custom spring names)
  • truesight/blindness/cure-blindness
  • poison/cure-poison
  • mana potion quaffing
  • blood feeding
  • specific mob progs/reactions
  • anything else you can think of


Making macros for hit, heal, drink spring is really a huge help itself, punching 3 keys as you watch the fight makes things a lot less hectic.

Setting up a trigger on something like your hit message would also work of course, if you are (like me) too lazy to even punch buttons.

GUI

Build out an extremely helpful visual display in your client. The more you can 'see' the better.

Have alerts to show when you are disarmed/blinded/etc or when you are doing certain actions like hitting/healing or anything important happens. Have a way to see your current spells and ticks remaining, and potion counts.

Equipment Damage Tracking

To prevent equipment from scrapping in a fight, you'll want to set up triggers to track hits to your gear and auto-remove gear that is down to 2 or 3 hits remaining.

This can be done in a number of ways. Be aware of the game's 'survey' command to review your equipment conditions. You can scrape data from that rather easily and store it in a local client-side var that is hella useful.

Then, have a trigger on the 'gets damaged' message can be used to regex whatever got hit against your locally stored information and adjust the AC variable. Include an #IF check to consult that AC value and if < 3 remove the item. Alternatively, trigger a 'survey' and have some code look for the worst condition names, and remove gear if it sees those.

Here's an example snippet of my 'eqlist' variable that includes all wear slots, here is what one individual wear slot looks like:

#var eqlist {
    {waist}
    {
        {ac} {10}
        {acMax} {10}
        {dam} {0}
        {key} {Girth}
        {name} {the Ice Girth}
        {survey} {superb}
    }
}

So then a trigger for {* get's damaged!!} does something like: foreach item in the 'eqlist' var, regex that item name against the * that got hit, upon match, reduce the items AC by 1, and if AC is now < 3 remove the item by its key word.

Map

The far and away most helpful thing you can ever do with your life. Figure out how to map in your client. They are all finnicky and it is not super easy given the many odd and non-linear room structures in the game, but you can do it. Mapping the game client-side enables your client to simply auto-walk you to ANY room name, from any starting point in the game. That's hugely powerful.

You will know EVERY room name, every room description, in every area. You can search for rooms by name or any text or hints. If someone wants a list of all rooms to mention the word "despair" I can find that list in 2 seconds, and run to any of those rooms immediately.

If you can do 'where X' to get the room name a mob/player is in, then you can auto-run to that room. This is beast mode for questing.

The auto-run functionality aside, mapping the game will teach you loads about the game and its areas, the world layout, etc. It's hugely interesting and revealing to actually be able to 'see' where you are going and how things connect. There are tons of neat connections you don't really get a sense of when you are just running from dh[] to each area. So many things are interconnected and you can walk some really unexpected paths between places and learn a lot about the world once you have a map going.

Mob Tracking

MSDP sends you ever mob name and level, along with room name and room area, so its super easy to just start saving those into a huge searchable var that's basically a database.

Every time I fight something I save that data, and also a mob keyword. Its then easy to write an alias that searches those lists, so you can easily find mobs by name, level, etc. Useful for finding mobs to try to level off, or for quests regarding certain mobs (find all dragons, etc). Also useful for any fight automation you might have so it can find the target keyword for a mob you're fighting.

Small example of a search of my mob db:

findmob boy
AREA NAME                 SPAWN ROOM                            KEYWORD  LEVEL MOB NAME
Southern Mountain Range   The Shelter At The End Of The Alley   rat      38    Ratboy
Abattoir Asylum           Abattoir Pit                          boy      35    The whipping boy
The Warehouse             Inside a Filthy Bathroom              boy      4     an obnoxious boy

Given that the map function can auto-run us to any room name, you can also create an alias to run to a mob with this. For example 'run Ratboy' would run my char right to his room, from anywhere in the game.


Conclusion

When you reach the level where you have all this set up, congratulations, you truly live in a realm of despair! You should go outside.