|
|
(22 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| Realms Of Despair tintin++ package by Dyrdex.
| | This has all changed significantly. I'm now building a new version and will have documentation and a download coming soon. maybe. |
| *I have no idea what I'm doing, this is my first foray into programming of any sort. Please forgive my terrible terrible coding!
| |
| *My e-mail is dyrdex@gmail.com. I am glad to answer questions or help you use and modify this stuff. It all makes sense to me, but it's probably a giant knot of confusing inter-connectedness to you, feel free to ask questions, make suggestions, etc.
| |
| *I would also be curious to hear from someone who actually knows wtf they're doing, to see how they would set things up more properly.
| |
|
| |
|
| =Get the files=
| | -mike |
| Download the entire tinrod folder available here:
| |
| | |
| http://dyrdex.com/tinrod/
| |
| | |
| =Setup=
| |
| ==Quick==
| |
| 1. Edit tinrod/main.tin
| |
|
| |
| *Check line 26: path to the tinrod directory on your system, relative to where you are when you launch tt++
| |
| #VARIABLE {script_dir} {tinrod}
| |
|
| |
| For me, the dir is at ~dyrdex/tinrod. If you have it buried, update {/path/to/tinrod} above.
| |
|
| |
| *Edit line 32 with your password where it says PASSWORD_HERE
| |
| #ALIAS {go %0} {#ses %0 realmsofdespair.com 4000;%0;PASSWORD_HERE;&& \x0D && #cr}
| |
|
| |
| NOTE: Yes, all your chars must share the same password.
| |
| | |
| 2. Run tintin++ along with the main.tin file, you'll probably want to set a shell alias for this:
| |
| /path/to/tt++ /path/to/tinrod/main.tin
| |
| | |
| 3. Connect to the mud using the alias 'go CHARACTER'
| |
| go dyrdex
| |
| | |
| 4. Use the 'menu' alias to view the Main Menu. Set these minimum options (try to set more)
| |
| menu
| |
| pset FOOO - Options are mana nomn blood or lowbie
| |
| clearinv - Sets your inventory values to 0's
| |
| recalls FOOO - Options are: scroll rune or spell
| |
| minhealth ### - where ### is the minimum hp you would drop to before you start healing)
| |
| hitis HITNAME - set's your hit variable, ex: hitis swat or hitis {c 'magic missile'} in brackets like that.
| |
| manaoff - disables automatic mana potion quaffing for now.
| |
| | |
| 5. Setup your weapon full name and corresponding keyword for use in Disarm trigger:
| |
| eqset a rusty machete
| |
| keyis machete
| |
| | |
| 6. Set your potion and item container variables, and your inventory counts.
| |
| If you're AV: Use [[#Supported_Items]]
| |
| If you're a lowbie, go to dh[] and do 'gojim' and buy a chest.
| |
| --Buy/Put a recall of some sort in your 'item container'
| |
| --Buy/Put a heal potion (violet or ds), in your 'potion container'
| |
| setinv
| |
| setinv (yes, run it twice the first time, after that just once will update counts if things get off)
| |
| | |
| Note that you CAN use the same container for both potions and items.
| |
| | |
| 7. Save this configuration (this autosaves frequently anyways, but I like to explicitly save it the first time)
| |
| saveconf
| |
| | |
| 8. (Optional) Set up whatever other 'menu' option you want. Run 'menu' to view.
| |
| | |
| 9. Once connected and in-game, you must go 'config -gag' for everything to work.
| |
| | |
| You are now good to go. See below for further features.
| |
| | |
| ==Full==
| |
| | |
| To Do and/or unnecessary.
| |
| | |
| =Features=
| |
| I would suggest familiarizing yourself with the system in the following order:
| |
| | |
| ===Quick Connect===
| |
| Alias: go %0
| |
|
| |
| This is how you connect. Type 'go dyrdex' for example.
| |
| All your chars need to share the same password (which is hardcoded into main.tin line 32)
| |
| | |
| Please note you can run this once already connected, to multi. See the Multi-Config section.
| |
| Also Note: The 'Go FOO' alias logs new chars, the similar 'goFOO' alias is speedwalk to 'foo'.
| |
| | |
| Alias: quit
| |
|
| |
| The word 'quit' is aliased to write out all your configs before actually quitting the mud.
| |
| This writes: character, class, affiliation, and mobs list to the appropriate configs upon quit.
| |
| | |
| Alias: saveconf
| |
|
| |
| This does the same thing as 'quit' but without quitting.
| |
| | |
| ==The Main Menu==
| |
| This lets you set up basic character settings for preferred gameplay options.
| |
| You should ideally set up all the available options.
| |
| Alias: menu
| |
|
| |
| Displays config options for your char.
| |
| | |
| All of the options for each settings are also shown, so for example:
| |
| Prompt: nomana pset <mana|nomn|blood|lowbie>
| |
| | |
| Means that you can set your prompt with the 'pset' alias followed by any of those 4 options (i.e. pset mana)
| |
| | |
| ===Player Config===
| |
| Shows where the configs for this guy are loaded from. You can set Affiliation/Prompt/Bot Type here:
| |
| | |
| '''Affliation:'''
| |
| Only ds is really setup right now. ALWAYS do 'reload' if you set/change this option.
| |
|
| |
| '''Prompt:'''
| |
| Currently, you've got mana, no-mana, blood, and lowbie.
| |
| NOTE: the prompts also 'do' some important stuff as far as setting variables. So be careful mucking around in those scripts.
| |
| | |
| '''Bot Type'''
| |
| Currently 4 options: mage, cleric, immob, tank, and 'none'
| |
| Bot Status: Use the boton or botoff aliases to enable/disable botting of whatever type you have specified
| |
|
| |
| *The mage/cleric bots are spell bots. Will have to write documentation for those.
| |
| *The immob bot will just keep immo'ing whatever you hit with immob once.
| |
| *The tank bot will, if you ALSO enable autofighting, only heal, and never hit. (so do both: boton;fighton)
| |
| | |
| ===Item Config===
| |
| Sets up which items you prefer to use for recalls/springs/dispels/fly
| |
| | |
| ===Fight Config===
| |
| See FightAssist section below. Setup your fight preferences.
| |
|
| |
| Note that Sanctuary on/off is now obsolete because autofighting enforces sanc to be ON while fighting.
| |
|
| |
| Truesight however is still up to you, so set 'trueon' if you want that.
| |
| | |
| ===Restock Config===
| |
| Only works with 'affiliation ds' characters at the moment.
| |
| *Set your stock quotas for the listed items.
| |
| | |
| == Speedwalk ==
| |
| | |
| There's a ton of places already aliased for speedwalking, and a way to search for those too.
| |
| /tinrod/scripts/dirslist.tin
| |
| | |
| All speedwalking directions start from dh[]
| |
| | |
| All my speedwalk aliases are like goHERE
| |
| NOTE: Notice the difference between these two similar, but different aliases:
| |
| go HERE (attempts to connect to the mud as character name 'HERE')
| |
| gohere (attempts to speedwalk to 'HERE')
| |
| | |
| All the place names are shorthanded to my own liking. How would you know what I've setup? I'm glad you asked:
| |
| Alias: finddir bla
| |
|
| |
| Searchs dirs list for 'bla' to find the the shorthand code for the place you wanna go:
| |
| | |
| finddir tree
| |
|
| |
| #NOP Tree of Life = tol
| |
| #ALIAS {gotol} {#50 w;#5 s;#3 w};
| |
| | |
| You then know the shorthand for Tree of Life is 'tol' and can do 'gotol' or even consult the actual dirs if you're walking already
| |
| | |
| I do not have Darkhaven gate unlocking built in yet, so you may run into the closed gate and get all fucked up.
| |
| | |
| == Gameplay Automation ==
| |
| Contained in /tinrod/main.tin
| |
| | |
| This section contains a ton of misc stuff to auto-do-stuff in the game.
| |
| | |
| * Auto-style/search/dig/fly/track/re-quaff-drops, etc.
| |
| If you do any of those, you will auto-retry literally forever.
| |
| Anti-Idle (auto-save every 500 seconds)
| |
| Anti-Spam (auto-enters a generic command anytime you receive the warning for same command 20 times.)
| |
| | |
| Aliases......Results:
| |
| supcor stand, supplicate corpse, get all cor, wear all, (get/wear several times actually)
| |
| trackgo %0 track mob named %0 and automatically continue to track/move/track/move
| |
| stoptrack stop tracking
| |
| heal quaff 1 heal
| |
| heal4 quaff 4 heals
| |
| heale quaff 8 heals
| |
| blue quaff a ds orchid mana potion
| |
| blueup quaff orchids until mana is full
| |
| qtank quaff a tankset
| |
| drotank drop a tankset
| |
| shockstick use shockshield stick
| |
| cameo use iceshield cameo
| |
| firestick use fireshield staff
| |
| goneut use a pillow to get align back within +/- 80 of 0. (Must have a pillow in your Item Container)
| |
|
| |
| Also various 'target setting' aliases, but this is pretty much taken care of automatically now by the mob tracking system.
| |
| But, in case you just wanna manually set your target variable, check out this section of main.tin for options, there's a lot.
| |
|
| |
| Also Dh potion buying, if you have a potion buyer, just park him at dh shop and put a small birch chest on him, give him 1m.
| |
| | |
| | |
| === Aliases ===
| |
| Contained in /tinrod/main.tin
| |
| | |
| These are a bunch of things you might want to turn on/off here and there for whatever purposes.
| |
| | |
| Alias: teston / testoff
| |
|
| |
| This is for developing new stuff quickly. It reads in (or kills) whatever you have written in /tinrod/scripts/test_script.tin
| |
| | |
| Alias: trueon / trueoff
| |
|
| |
| For true-sight auto-quaff upon expiration.
| |
| | |
| Alias: sancon / sancoff
| |
|
| |
| For sanctuary auto-quaff upon expiration.
| |
| (Unnecessary if you're using autofight cuz its built in there now.)
| |
| | |
| Alias: eqon / eqoff
| |
|
| |
| Toggles the equipment tracking systems input triggers. eqon -> id object, enter keyword -> eqoff.
| |
| See Equipment Damage Tracking section.
| |
| | |
| Alias: glasson / glassoff
| |
|
| |
| For Fathomer glasseye skill, redo upon expiration.
| |
| | |
| Alias: shieldson / shields off
| |
|
| |
| Upon expiration, request fresh e-shields from your mage bot. Adjust this for your own chars and bot aliases.
| |
| | |
| Alias: celeston / celestoff
| |
|
| |
| For cleric celestial might... I never use this, but did once for about 5 minutes so its setup.
| |
| | |
| == Inventory Tracking ==
| |
| | |
| Script Location: /tinrod/scripts/inv_vars.tin
| |
| | |
| I use a potion container var and an item container var. They CAN be identical.
| |
| | |
| I track a select group of potions/items inside those containers and display quantity on-hand in my prompts.
| |
| Item counts are automatically adjusted per usage or restocking.
| |
| | |
| ===Aliases===
| |
| '''Alias: clearinv'''
| |
| Clears inventory tracking values to 0.
| |
| | |
| '''Alias: setinv''' (also invset, because I can never remember which way it goes, so just setup both!)
| |
|
| |
| This uses 'finditem' to find a heal and a recall, and sets your container variables accordingly.
| |
| Then, it examines those containers to get counts on the things it tracks upon the sight of them.
| |
| Then the 'at sight' triggers are disabled so further examinations don't adjust levels anymore.
| |
|
| |
| The setinv/invset alias will only work with the supported things listed below.
| |
| If you are using a non-supported container, there are also manual controls to set these variables, listed below:
| |
| | |
| '''Alias: potcon CONTAINER'''
| |
| Manually set your potions container to %0 (use the keyword for the object, also wise to use my.KEYWORD)
| |
| | |
| '''Alias: itemcon CONTAINER'''
| |
| Manually set your item container to %0 (use the keyword for the object, also wise to use my.KEYWORD)
| |
| | |
| ===Supported Items===
| |
| You must be using a Supported Container, and I only track certain Potions/Items.
| |
| | |
| Supported Containers:
| |
| Dragonslayer container
| |
| Gnomish crafted metal potion container
| |
| a pouch of purple cloth
| |
| Kahl's Green Dragonhide Pouch
| |
| a laundry basket
| |
| a hardened metal case
| |
| an extradimensional portal
| |
| a small birch chest
| |
| an old decaying basket
| |
| | |
| Supported Potions/Items:
| |
| Dragonslayer heals
| |
| Dragonslayer manas
| |
| Dragonslayer recall scrolls
| |
| a glowing violet potion
| |
| a tribal rune
| |
| a recall scroll
| |
| a create spring potion
| |
| a true sight potion
| |
| a sanctuary potion
| |
| a cure blindness potion
| |
| | |
| <pre>
| |
| In the 'ds' affiliation script, there is a 'restock' alias that functions based on these counts.
| |
| Set your preferred restock levels via the 'menu' alias options.
| |
| </pre>
| |
| | |
| == Equipment Damage Tracking ==
| |
| If you identify all your equipment, it captures current and max AC, and you can set a keyword for each piece.
| |
| | |
| Script is currently configured to auto-remove any piece that gets down to 4ac.
| |
| | |
| '''YOU MUST''' at LEAST set up your weapon keyword in this system. AC not necessary. Keyword is used for DISARM triggering.
| |
| | |
| '''To Enter Data:'''
| |
| 1. eqon
| |
| 2. Identify a piece of gear
| |
| 3. keyis KEYWORD
| |
| 4. Repeat ident/keyis for all items.
| |
| 4. eqoff
| |
| | |
| ===Aliases===
| |
| | |
| '''To Enable/Disable auto-entry'''
| |
| eqon/eqoff
| |
| | |
| '''To View Data:'''
| |
| eqstat
| |
| | |
| '''To Remove Item:'''
| |
| remeq a Weapon of striking (use the full name of the object, case sensative)
| |
| | |
| '''To Reset Values:''' (i.e. do this when you repair)
| |
| acset
| |
| | |
| '''To Query Data:'''
| |
| itemfind TERM (case insensitive)
| |
| | |
| '''To Manually Enter:'''
| |
| *Necessary on Barbs (unless you wanna hack other characters eqlist vars apart and write it that way)
| |
| eqset a name of a Weapon (use the full name of the object, case sensative)
| |
| item ac ##
| |
| keyis KEYWORD
| |
| | |
| '''Lights & Weapons'''
| |
| *These don't show an AC when identified. The itemac alias is used:
| |
| itemac ##
| |
| set 12 for weapons, and 20 for lights.
| |
| | |
| itemac alias will always modify the piece of eq which was 'last scannned' with identify or eqset manually.
| |
| | |
| ===Notes===
| |
| | |
| *If you want to adjust that minimum AC value of 4, its inside main.tin
| |
| #1083 #ELSEIF {$eqlist[%0][ac] < 4} {remove $eqlist[%0][key]}
| |
| | |
| *There's currently no way to distinguish between 2 identically named pieces, like necks/bracers/etc.
| |
| Gotta get a rename or don't wear pairs of things.
| |
|
| |
| (Generally I don't mind having 2 identical pieces tracked as a single piece in this system. It's actually over-cautious to do that - The system thinks ONE piece of eq with ac X is down to 4, but you got TWO pieces dividing up all those hits, so, neither can be near to scrapping. If anything, you're def safe to re-wear them a few times - they'll just get removed EVERY further hit they take, and you can keep re-wearing as long as you want to test your luck). If you're super unlucky, one of your pieces actually did receive ALL the damage and your other piece is 100% fine...but that seems unlikely to me.)
| |
| | |
| ==TinTin Config Options==
| |
| In /tinrod/main.tin
| |
| | |
| Your basic tintin config options found in main.tin, Set as desired.
| |
| | |
| ===Multi-Session Config===
| |
| In /tinrod/main.tin
| |
| | |
| Multiple sessions can be opened with the 'go CHARACTER' alias. Once connected as one char, just 'go CHARACTER2'.
| |
| | |
| To control the ones in the 'background', you can use several prefixes
| |
| 1. Numeric Session Names
| |
| * Sessions are automatically numbered, so '#session1 say hi' or '#session2 say hello' can send commands to those sessions.
| |
| * I have shorthanded those down to '#ses1 say hi' and #ses2 etc so its even quicker
| |
| | |
| 2. Character Session Names
| |
| *You can also use the actual session name instead of its number. For us, session names are our character names.
| |
| (The 'go character' quick connect alias also establishes the session as the character name as well)
| |
| #dyrdex say hi
| |
| #notdyr slap dyrd
| |
| #otherguy say nyuk nyuk nyuk
| |
| | |
| 3. Shorthand Session Names
| |
| *I have hardcoded abbreviated shorthands for the above character session names, so for me, I just do:
| |
| dyr say hi
| |
| notdyr slap dyrd
| |
| guy3 say nyuk nyuk nyuk
| |
|
| |
| Probably best to just look at this section of main.tin to understand this better
| |
| You'll want to setup a shorthand for each character. When you make a new guy, add it in.
| |
| | |
| So, for example, setting this up;
| |
| #Alias {dym} {#dymrex}
| |
| | |
| Allows me to control Dymrex, when he is 'backgrounded', by doing:
| |
| dym say hello
| |
| | |
| If you want to foreground Dymrex, just do:
| |
| dym
| |
| | |
| You can also setup quick connect aliases here to log groups/armies, etc.
| |
| | |
| I've setup a few grouping aliases, but it's not very much more built out yet.
| |
| | |
| '''Alias:''' groupall %0
| |
|
| |
| Allows you to have all your sessions follow %0 and has %0 group them.
| |
| | |
| '''Alias:''' regroup
| |
|
| |
| Does the same as groupall, but does it again.
| |
| | |
| === Speech Logging ===
| |
| | |
| Log: ~tinrod/speech_logging.tin
| |
| | |
| This needs work, but for now it just grabs certain channels/socials and logs them.
| |
| Open a second terminal and tail -f /path/to/tinrod/speech_logging.tin
| |
| | |
| Alias: savelog %0
| |
|
| |
| Will write out your entire buffer to a log file named %0.
| |
| NOTE: writes to your current working directory, not within the tinrod directory.
| |
| | |
| === MSDP Support ===
| |
| | |
| This *should* 'just work' automatically upon login at this point. If it doesn't, use this alias to 'start' it:
| |
| Alias: msdp_report
| |
| | |
| ====MSDP Usage====
| |
| | |
| For use in your own scripting, call msdp stuff as follows:
| |
| All variable names: $msdp_info[]
| |
| All variables + their values: $msdp_info
| |
| One thing: $msdp_info[THING] (note all caps is required)
| |
|
| |
| For all affects: $msdp_info[AFFECTS]
| |
| For ONE affect: $msdp_info[AFFECTS][sanctuary]
| |
|
| |
| If you're unsure, play around with #showme $msdp_info[THING] and whatnot till you find what you need, or email me.
| |
|
| |
| '''Examples:'''
| |
| *'''All vars with their values:'''
| |
| #showme $msdp_info
| |
| {AC}{-146}{AFFECTS}{{aqua breath}{1004}{dragon wit}{788}{elven beauty}{791}{inne
| |
| r warmth}{702}{nimbus of light}{14}{nooracht}{12}{ogre might}{789}{resilience}{6
| |
| 96}{sagacity}{787}{sanctuary}{151}{scry}{697}{shield}{748}{slink}{792}{trollish
| |
| vigor}{790}{valiance}{700}}{ALIGNMENT}{1000}{AREA_NAME}{Coral Depths}{BLOOD}{29}
| |
| {CHA}{14}{CHARACTER_NAME}{Ardryx}{CHA_PERM}{13}{CLASS}{Mage}{CON}{20}{CON_PERM}{
| |
| 9}{DAMROLL}{11}{DEX}{17}{DEX_PERM}{15}{FAVOR}{N/A}{HEALTH}{155}{HEALTH_MAX}{253}
| |
| {HITROLL}{16}{INT}{25}{INT_PERM}{17}{LCK}{13}{LCK_PERM}{11}{LEVEL}{19}{MANA}{32}
| |
| {MANA_MAX}{248}{MONEY}{11,228,304}{MOVEMENT}{290}{MOVEMENT_MAX}{290}{RACE}{Pixie
| |
| }{ROOM_NAME}{Before a guarded door}{SERVER_ID}{Realms of Despair}{STR}{18}{STR_P
| |
| ERM}{14}{WEIGHT}{121}{WIMPY}{0}{WIS}{22}{WIS_PERM}{16}{WORLD_TIME}{21}
| |
| | |
| *'''A specific value, in this case, its a sub-list:'''
| |
| #showme $msdp_info[AFFECTS]
| |
| {aqua breath}{988}{dragon wit}{772}{elven beauty}{775}{inner warmth}{686}{ogre
| |
| might}{773}{resilience}{680}{sagacity}{771}{sanctuary}{151}{scry}{681}{shield}{7
| |
| 32}{slink}{776}{trollish vigor}{774}{valiance}{684}
| |
| | |
| *'''One variable's value:'''
| |
| #showme $msdp_info[CLASS]
| |
| Mage
| |
| | |
| #showme $msdp_info[AFFECTS][sanctuary]
| |
| 151
| |
| | |
| == Run Scripting ==
| |
| | |
| These are each kinda their own beast. For when general autofighting doesn't work well.
| |
| | |
| I would just suggest reading each one. They're not great yet, just all kinda 'in the works'.
| |
| <pre>
| |
| Bishop/Krakov/Viktor just enable autofight using edible herbs from dpass.
| |
| Collosus is very unfinished, it's a flee/heal script.
| |
| Edo Dragon heads are useful for having your ranger snipe heads from above to aggro them.
| |
| Mithril Hall isn't totally automated, just some time saving stuff in there.
| |
| Seth sets up some stuff to track who is tanking and when he chills, but not anything else (like hitting).
| |
| </pre>
| |
| | |
| == FightAssist ==
| |
| | |
| This works really well for leveling, and that was my intention initially.
| |
| *It doesn't work for lowbies until they can use actual 'heal' (100hp) potions. I don't have the lesser ones coded yet.
| |
| | |
| I've built it out pretty well now to account for many different conditions, BUT:
| |
| | |
| It DOES require manual oversight, it pauses itself sometimes, and runs into issues, so, until you're good at knowing what it checks and really prep correctly, you may have frequent issues that require your attention.
| |
| | |
| I would NOT suggest trying to run it on a difficult run unless you are very confident in the run.
| |
| *Most of the time, you'll want to do a specific run script anyways.
| |
| | |
| It works well for AV mobs like:
| |
| *Justice (it was developed/tested against Justice)
| |
| *IMM Quest mobs
| |
| *Grandmaster
| |
| *Brunhilde
| |
| *Most mobs that would have basic entry-level AV gear.
| |
| *Basically: Things that have a 'normal' type fight pattern, and not too many progs.
| |
| | |
| Generally speaking, it works, but if its having trouble keeping you healed up, go manual.
| |
| *You can always manually send additional 'heal' commands while this runs if it's not healing fast enough.
| |
| *I need to add in a thing to have it eat some apples if hp drops extremely fast.
| |
| | |
| DO NOT think you can run this and go afk, you WILL very likely come back to find yourself dead.
| |
| | |
| === Setup ===
| |
| | |
| For FULL functionality, you must have all of the following:
| |
| 1. The necessary variables defined (see below)
| |
| 2. heal potions (100hp)
| |
| 3. sanctuary potions
| |
| 4. create spring potions
| |
| 5. cure blindness potions
| |
| 6. truesight potions
| |
| 7. mana potions (if your attack uses mana)
| |
| | |
| Run these aliases to set up the necessary variables:
| |
| hitis HITNAME -- for spells use: hitis {c 'spell name'} in curly brackets like that.
| |
| minhealth ##### -- For an AV I suggest a value about 400 hp below your max.
| |
| manaoff or manaon -- If your attack uses mana, manaon. If not, manaoff. This MUST be set.
| |
|
| |
| You also must have your container variables setup.
| |
| *See Inventory Tracking system above, or use these aliases:
| |
| setinv (will attempt to auto-detect your containers) If it fails, to manually set them:
| |
| potcon CONTAINER_NAME
| |
| itemcon CONTAINER_NAME
| |
| | |
| ===Usage===
| |
| | |
| Enabled via the fighton/fightoff aliases, current status shown in 'menu'
| |
| | |
| Uses a 'minimum health' variable, under which you will heal up. Above which you will hit.
| |
| | |
| Without going into 'how it works' let's just get to 'how to use'
| |
|
| |
| Run these aliases to control on/off/pause/resume
| |
| fighton / fightoff -- enable/disable autofighting.
| |
| pause -- to totally pause this system
| |
| resume -- to restart
| |
| | |
| You should know about these:
| |
| tset -- target set (Used to re-scan msdp mob name variable, if target ever gets 'off')
| |
| potclear -- to restart in the case of false-positive 'No Spring' enforced pause.
| |
| trueon/trueoff -- to enforce truesight re-quaff or not.
| |
| *Actually, trueon/trueoff is outside the fight script, and will keep going after the fight, so turn it off manually.
| |
| | |
| The script watches hp, mana, stomach fullness, sanctuary, blindness, blood points, and if all that's good - you hit.
| |
| | |
| === Logic ===
| |
| When fighting the following should happen:
| |
|
| |
| 1. The 'Autofight' label prints to the screen. This is actually a gagged/substituted 'version' command.
| |
| *This is itself the trigger for the hit/heal assessment and action.
| |
| | |
| 2. System see's in the mob name via msdp data, queries mob keyword database for its key.
| |
| *If found, sends the hit command to the mud. You'll see:
| |
| Now Fighting: the crab guard
| |
| Found Keyword: crab
| |
| . . . . . . . . . . Target Set . . . . . . . . . .
| |
| Outcome: Hit: (c 'spectral furor' crab)
| |
| | |
| *If no mob keyword found, prompts for data entry with 'mobkey KEYWORD'. You'll see:
| |
| Now Fighting: a turtle
| |
| NO KEYWORD For Mob. **Data entry required** Run: 'mobkey KEYWORD'
| |
| | |
| | |
| *NOTE: AutoFight will NOT start until you enter that key. 'mobkey KEYWORD' then starts fight.
| |
| | |
| 3. If you do not have Sanc, it will try to find and quaff one from your $pot_con.
| |
| *If it can't sanc you, it will simply echo a warning then proceed without sanc.
| |
| | |
| There are other similar checks as well, see Notes below for full details on what is tracked.
| |
| | |
| 4. While HP is above minhealth ### value, sends $hit $target to the mud.
| |
| *When you've drank 8 potions, it will attempt to drink spring.
| |
| *If there's no spring, you will create one. If you can't create. System pause.
| |
| *Use 'potclear' to clear that variable and resume fight assist.
| |
|
| |
| 5. If you have 'manaon' enabled, when mana is less than 200, you start quaffing 4 with each hit.
| |
| *I've found it wiser to keep hitting WHILE mana healing, then delaying hitting for hp heal AND mana heal.
| |
|
| |
| 6. When HP drops below minhealth ### value: stop hitting and heal up as follows:
| |
| *1. Calculates full number of heals required to quaff back to full hp.
| |
| *2. Checks against how many potions are already in your stomach
| |
| *3. Quaffs (if necessary) up to a 'full stomachs' worth of potions, then knows to drink.
| |
| *4. Sets the remainder of heals still needed to be quaffed.
| |
| *4. Drinks spring to clear stomach.
| |
| *5. Quaffs the remainder of the initial calculation. Rechecks.
| |
| *6. If the remainder after-drink exceeds 8, don't project past that, just quaff 8, drink and recheck anew.
| |
|
| |
| | |
| The fuller logic in the giant ifcheck block goes as such:
| |
| | |
| If you have not already triggered this check, and
| |
| If the check has not failed for some reason already (meaning it would continue to fail infinitely), and
| |
| If the autofight system is not purposefully paused, and
| |
| If you aren't at 8 potions in the stomach, and
| |
| If you won't be blind once truesight expires, and
| |
| If you don't have a remainder of heals to quaff from a previous healup run, and
| |
| If you have the sanctuary spell (or sacral divinity, or holy sanctity), and
| |
| If your health is above the minhealth value you setup in your menu, and
| |
| If you are not configured as a tank (who doesn't hit), and
| |
| If you are not a vampire in need of blood, and
| |
| If you are not a mana user
| |
| Then Hit the Target, and re-run this check.
| |
| (If you ARE a mana user, and mana is under 200, then Hit the Target and sip 4 mana pots until within 200 of full mana.)
| |
| | |
| | |
| If any of those fail, rectify them, and re-check.
| |
| | |
| ===Notes===
| |
| The following things are tracked by the hit/heal script:
| |
| | |
| '''Sanctuary'''
| |
| *Sanc is tracked and re-quaffed by the fight script.
| |
| *IF sanc quaff fails, the 'sanc override' is set, and you echo an alert but continue to fight without sanc.
| |
| CAUTION: You definitely CAN and WILL scrap equipment fighting without sanc.
| |
| | |
| '''Blindness'''
| |
| *If you are EVER blinded in a fight:
| |
| The system is paused, you 'say blind' and upon that blindness expiring you will automatically quaff truesight and turn 'trueon'. Have your run mates make triggers to cure you if you 'say blind'.
| |
| | |
| *If you WILL be blind when true-sight expires (ex: true: 5 blindness: 10)
| |
| The system will detect this and try to quaff a cure blindness potion from your potion container asap.
| |
| So, have cure blind pots on you.
| |
| | |
| '''Stomach'''
| |
| *If you have quaffed 8 potions - you WILL try to drink, and create a spring if necessary.
| |
| You will NOT proceed autofighting (i.e. healing) until you drink.
| |
| Use the 'potclear' alias to clear the var back to 0. This happens a lot while leveling.
| |
| | |
| '''Vampires'''
| |
| *Blood Points are taken care of. When Blood is less than 20bp, you will automatically feed (once), recheck.
| |
| | |
| '''Tank Bots'''
| |
| *If you're specifically tanking and JUST want to heal, not alpha attack. Do:
| |
| bot tank
| |
| boton
| |
| fighton
| |
| | |
| You will never hit, you only assess if you need to heal or whatever, and if everything is cool, wait 2 seconds, recheck. Never hit.
| |
| | |
| === Hit Support ===
| |
| | |
| The whole thing works based on your hit message triggering the recursion. So, ALLLL hit messages have to trigger that.
| |
| | |
| So far I have a lot, but not all setup. See the bottom of the tinrod/scripts/autofighting.tin file, it should be obvious what I mean.
| |
| | |
| If your autofight isn't working, or it only seems to fire 'once' make sure your hit message is setup in that file like all the others.
| |
| | |
| === Target Support ===
| |
| | |
| *The script always hits a specific target.
| |
| *This data is pulled from the mob tracking system, and you MAY have to enter the mob keyword.
| |
| *See the Mob Tracking section below for more info on targetting
| |
| | |
| === Disruptions ===
| |
| The system is NOT fully self sufficient. It's intended for leveling mostly, and even then, it's more of a fight-ASSIST than anything.
| |
| | |
| MANY things will pause or otherwise disrupt this system, it WILL very likely require your attention to manage and run.
| |
| | |
| The solution to nearly everything is 'resume' or 'potclear'.
| |
| | |
| '''Shutdowns'''
| |
| The fight system will shut itself down under certain conditions, to prevent crashing tintin itself.
| |
| | |
| * If values are impossible to attain:
| |
| Case 1: you set a minhealth of 1000. However, you remove a piece of eq that was too damaged, and now, max HP is 999.
| |
| The scripting would heal infinitely, so instead, it shuts itself down. fightoff.
| |
| | |
| Case 2: If, due to some mis-configuration of variables:
| |
| The fightcheck alias thinks that you should heal via the healup alias
| |
| The healup alias thinks that you're healed, and should re-run fightcheck.
| |
| That's a loop. fightoff (or tintin crash).
| |
| | |
| In nearly all cases, the solution is to check your mininmum values, namely minhealth in 'menu' and make sure it's attainable.
| |
| | |
| '''Pauses'''
| |
| The system automatically pauses itself when:
| |
| | |
| *No mob keyword found, manual entry required.
| |
| Run 'mobkey KEYWORD' to enter the key data and initiate the fight.
| |
| | |
| *No spring can be created.
| |
| If, after 8 potions, you attempt drink and no spring is found, you will attempt to create one.
| |
| If you cannot create one, a warning is echo'd and autofight is PAUSED.
| |
| This has killed me many times and I should not do that probably, because for now I do....
| |
| potclear to clear that variable and resume autofight.
| |
| | |
| *Blind (or inevitably blind)
| |
| Blindness is granted priority, the hit/heal check pauses while we try to resolve blind.
| |
| If blindness is cured, truesight is automatically found, quaffed, and 'trueon' enabled.
| |
| | |
| *If stomach is actually 'too full'
| |
| System pause, and all attention is given to trying to obtain a spring/drink asap.
| |
| If someone/something creates a spring you AUTOMATICALLY drink from it and resume autofight.
| |
| | |
| '''Stallouts'''
| |
| | |
| *MSDP Missing
| |
| Sometimes at the start of a fight, msdp data will be late and still report there is no mob name variable.
| |
| Autofight will not kick in.
| |
| You need to recheck the msdp vars by doing 'resume' or 'tset'
| |
| | |
| *Single Fire*
| |
| The whole thing loops based on sight of your hit message. If it's running ONCE, issuing one hit, and then stalling:
| |
| Make sure your hit message is in the bottom of /tinrod/scripts/autofight.tin or add it in if its not present.
| |
| fightoff/fighton afterwards to reload that config.
| |
| | |
| === Debugging ===
| |
| | |
| Currently there are debugging echo's built into the check which say what its doing, with some numeric step numbers. This helps make it obvious at what point in the autofight.tin script problems are occurring.
| |
| | |
| == Mob Database ==
| |
| | |
| Everytime you fight anything, you can capture the mob data from msdp and set a mob keyword.
| |
| *Mob Full Name
| |
| *Mob keyword
| |
| *Mob Area
| |
| *Mob Level
| |
| | |
| These are kept in a huge list so that we can automatically see who we're fighting and what keyword we need to use to attack them automatically. It's also handy if you want to look for other mobs of a specific level for leveling purposes or something. I just recently added Area's and Levels, so not all mobs in my 'current' listing have that data (i'll have to refight/rescan them all over time)
| |
| | |
| | |
| '''Targetting'''
| |
| | |
| This really only comes into play with aggressive mobs, or when fighting a sucession of mobs.
| |
| | |
| When attacking a non-agg mob, the kill or hit attack itself sets the target variable at that time.
| |
| *For example: kil MOB (kil with 1 'L') actually sets the $target variable to MOB at that time, then sends 'kill $target' to the mud.
| |
| | |
| However, when an agg mob attacks you, we watch msdp data for the mob name, and then automatically check if we've fought it before.
| |
| *The mob db is queried to see if we can find the mob name and corresponding keyword.
| |
| *IF the mob is in the db already, the target is automatically set to its keyword from the db.
| |
| *IF the mob is NOT in the db already, you are prompted to enter it with the 'mobkey' alias, see below.
| |
| | |
| '''alias: tset'''
| |
| | |
| (Target Set)
| |
| This is the alias to run the target setting actions, query the db, set the target variable.
| |
| *This run automatically (upon sight of the fprompt when FightAssist is enabled)
| |
| *Running this manually is sometimes necessary in lieu of the following bug:
| |
| | |
| * BUG: At times, msdp data is slow to arrive, and when we run this check the msdp mob name variable hasn't arrived yet.
| |
| If the system doesn't see the msdp mob name var, the whole FightAssist system won't engage.
| |
| So, run tset to re-scan for msdp mob name var and it should then see it, grab the target, and proceed.
| |
| | |
| | |
| '''alias: mobkey KEYWORD''' (i.e. mobkey demon)
| |
| | |
| If a new mob is detected which is not already in the mob db, you will be prompted to enter its keyword:
| |
| <pre>
| |
| Now Fighting: an octopus
| |
| Cannot Locate Mob Data: Capturing...
| |
| * * * * * Enter Mob Key: mobkey KEYWORD * * * * *
| |
| </pre>
| |
| | |
| You would then do 'mobkey octo' to enter the key, once entered, the FightAssist system engages and takes control of the fight.
| |
|
| |
| *IMPORTANT: Autofight will NOT proceed until you enter the mob's keyword with this alias.
| |
| | |
| Note: upon entering the mobkey, autofighting IS automatically restarted and you WILL hit the target.
| |
| NOTE: DO NOT TYPE MOBKEY BEFORRREEE YOU (or your group) are ready to start the fight: Cuz you WILL $hit $target and start it.
| |
| | |
| '''alias: mobstat'''
| |
| | |
| Display the entire mob database: mob full name, mob level, mob keyword.
| |
|
| |
| Note: I would like to start saving lots of other mob data well, seems like it could be useful for future purposes.
| |
| I now track level as well.
| |
| | |
| '''alias: findmob TERM'''
| |
| | |
| This is a general search function to query the mob database.
| |
| *Can query by any term in the mob's full name, or by numeric level.
| |
| *Case insensitive. Partial matching accepted.
| |
| | |
| Examples:
| |
| findmob hound
| |
| the denizen hound: Level 39 key hound
| |
|
| |
| findmob Dragon
| |
| Talinka, the Red Dragon: Level 50 key tali
| |
| the Ancient Green Dragon: Level 32 key drag
| |
|
| |
| findmob 34
| |
| Asema, the disturbed spirit: Level 34 key asem
| |
| Life: Level 34 key life
| |
| The first horseman, Famine: Level 34 key horse
| |
| the amazon: Level 34 key ama
| |
| | |
| == Affiliation Config ==
| |
| | |
| I've only setup 'ds' so far, but you could do the same for guilds or barbs or pk.
| |
| | |
| Just sets up things relevant to headquarters, and our potion names. Mainly: restocking.
| |
| | |
| Use the 'menu' to set your stock values. Then go into donation room and do 'restock'. Done.
| |
| | |
| Also tracks recalls and auto-buys more when you are down to 1.
| |
| | |
| Also automatically says 'town' in the portal to town.
| |
| | |
| = Bugs =
| |
| | |
| *Improper line splitting
| |
| Sometimes when you log in the curser is way up in the text field. Type 'line' to fix it.
| |
| | |
| Configuration Overwrite
| |
| Configs are loaded upon login, and written out upon quit.
| |
| If you log in/out too quickly, then you may 'quit' before anything was loaded.
| |
| Thus, you will write out empty config files. Most frequently happens with the affiliation config for some reason.
| |
| --OR--
| |
| After initially setting up a character. If you set the affiliation to ds, you MUST 'reload' to read in the current file.
| |
| Otherwise, when you quit, you try to write that class to that file, and, you write nothing cuz nothing was ever loaded.
| |
| Thus, you've wiped out the /affiliation/ds config.
| |
|
| |
| Short Version: Avoid very fast quit/log/quit. Wait for the echo showing file loads before quitting.
| |
| | |
| Autofight Failover
| |
| There can become a conflict between the 'fightcheck' and 'healup' aliases, since they each call the other.
| |
| If 'fightcheck' thinks it's time to heal, and 'healup' thinks its time to fight -- infinite loop, big problem.
| |
| This is failsafed to just alert and disable autofight, otherwise it crashes tintin completely.
| |
|
| |
| Why: Most likely the issue is that your minhealth value cannot be achieved.
| |
| (mostly: You removed eq and max hp is now lower than your minhealth value.)
| |
|
| |
| Solution: Always set minhealth to at LEAST 101 hp below your max hp. Also try to account for removed eq.
| |
| My suggested minhealth is -400 from max hp. Thats 4 quaffs, 1 round, half-stomach, works out well in testing.
| |
| | |
| Auto-Cure-Blind problem
| |
| For some reason right now this is broken for mana-characters. It works perfect for vamps for some reason... gotta debug more.
| |
| | |
| =Backup & Restore=
| |
| '''BACKUP YOUR DATA:'''
| |
| I make a copy of a few of the folders fairly regularly:
| |
| cp -r /tinrod/characters /tinrod/characters.bak
| |
| | |
| (Writing a cron job to do this every 2 days is a pretty good idea)
| |
| | |
| | |
| '''File Restoration'''
| |
| If you accidentally wipe out a config somehow (it happens), just copy the backup into place and 'reload':
| |
| cp /tinrod/characters.bak/Dyrdex.tin /tinrod/characters/
| |
| If still connected to the mud do:
| |
| reload
| |
| Then you're safe to quit the mud.
| |
|
| |
| Or of course you can always exit tintin fully, move the files into place, start tt++ back up.
| |
| | |
| =Contact=
| |
| | |
| If anybody ever uses this, feel free to contact me at dyrdex@gmail.com about it.
| |