Compare commits

...

11 Commits

16 changed files with 1598 additions and 1035 deletions

1
.gitignore vendored
View File

@ -10,3 +10,4 @@ src/constants.tin
src/timer.tin src/timer.tin
src/testing.tin src/testing.tin
src/gems.tin src/gems.tin
bin/watcher

View File

@ -1,66 +1,26 @@
cd ~/documents/MUD/Discworld # Change to the 'discworld-tintin' directory and remove the input history file
cd "$( dirname -- "$( readlink -f -- "$0"; )"; )"
rm logs/history.log rm logs/history.log
# Set hotkeys to switch in/out of "mobile" mode
tmux bind C-f resize-pane -x 80%
tmux bind C-g resize-pane -x 100%
# No existing discworld session? Then create one # No existing discworld session? Then create one
if [[ ! $(tmux ls -F '#S') =~ discworld ]]; then if [[ ! $(tmux ls -F '#S') =~ discworld ]]; then
# Flag that we've just created a session # Flag that we've just created a session
DISC_SESSION_CREATE=1 DISC_SESSION_CREATE=1
# Zero out log files to keep size down # Zero out log files to keep size down
# rm logs/minimap.log && touch logs/minimap.log rm logs/chat.log && touch logs/chat.log
# rm logs/mapdoortext.log && touch logs/mapdoortext.log
# rm logs/chat.log && touch logs/chat.log
# Start a new tmux session named "discworld" # Start a new tmux session named "discworld" with our tmuxp setup
tmux new-session -d -A -D -s discworld tmuxp load -s discworld ./discworld2.yaml
fi
# If we're in TMUX, or we just created a new session, make a layout
if [ -n "$TMUX" ] || [ "$DISC_SESSION_CREATE" = "1" ]; then
# Kill any existing panes but the one we're "starting" in if in tmux already
if [ -n "$TMUX" ]; then
tmux kill-pane -a -t discworld:0.0
fi
# Create the chat monitor window on top
echo "Making chat monitor window"
#tmux split-window -v -b -l 4
tmux split-window -v -b -l 4
tmux send-keys 'clear && tail -fs .5 logs/chat.log' 'C-m'
# Did we ask for the full layout?
if [[ $1 == "full" || $1 != "full" ]]; then
# Horizontal split and load spottimers
echo "Making death timer window"
tmux select-pane -t discworld:0.1
tmux split-window -h -l 28
tmux send-keys './bin/dt' 'C-m'
# Splice a section for group shield monitor
echo "Making group shield window"
tmux split-window -v -p 50
tmux send-keys './bin/grp' 'C-m'
# Place the ASCII map at the bottom
echo "Making map window"
tmux split-window -v -p 50
tmux send-keys './bin/map' 'C-m'
fi
# Cut back to main window, vertical split for mapdoortext
echo "Making MDT window"
tmux select-pane -t discworld:0.0
#tmux split-window -v -b -l 5
tmux split-window -v -l 1
tmux send-keys './bin/mdt' 'C-m'
# Select main pane again and load TinTin++ with our config
tmux select-pane -t discworld:0.1
tmux send-keys 'clear && tt++ -G config.tin' 'C-m'
fi fi
# If there is already a session, just attach
if [ -z "$TMUX" ]; then if [ -z "$TMUX" ]; then
#tmux send-keys 'clear && tt++ -G config.tin' 'C-m'
echo "Not already in TMUX, so let's attach" echo "Not already in TMUX, so let's attach"
# If we aren't already inside of TMUX, then attach to our session # If we aren't already inside of TMUX, then attach to our session
tmux -2 attach-session -t discworld -d tmux -2 attach-session -t discworld -d

996
README.md

File diff suppressed because it is too large Load Diff

View File

@ -67,4 +67,10 @@
#line {log} {$chat_file}; #line {log} {$chat_file};
}; };
#EVENT {SHORT-CLICKED MOUSE BUTTON ONE -1}
{
#cursor position %1
}
#FORMAT {start_time} {%T}; #FORMAT {start_time} {%T};

16
discworld.yaml Normal file
View File

@ -0,0 +1,16 @@
---
session_name: discworld
windows:
- focus: 'true'
layout: 459d,144x79,0,0[144x8,0,0,289,144x10,0,9,290,144x59,0,20{116x59,0,20,291,27x59,117,20[27x38,117,20,292,27x10,117,59,293,27x9,117,70,294]}]
options: {}
panes:
- tail
- sh
- focus: 'true'
shell_command: tt++
- bash
- sh
- bash
start_directory: "$(dirname '$0')"
window_name: DiscworldMUD

View File

@ -77,7 +77,7 @@
#HIGHLIGHT {the {green|aqua|cyan|blue|yellow|red|orange|beige|brown|grey|black|violet|mauve|pink|purple} ball} {Cyan}; #HIGHLIGHT {the {green|aqua|cyan|blue|yellow|red|orange|beige|brown|grey|black|violet|mauve|pink|purple} ball} {Cyan};
#ACTION {^The %1 duellist has yielded to you, if this satisfies you then enter "accept surrender from duellist" to accept} { #ACTION {^The %1 duellist has yielded to you, if this satisfies you then enter "accept surrender from duellist" to accept} {
#showme {\a}; #showme {\a};
} };
#HIGHLIGHT {blackbird} {violet}; #HIGHLIGHT {blackbird} {violet};
#HIGHLIGHT {old {men|man|women|woman|shopper|shoppers|beggar|beggars}} {magenta}; #HIGHLIGHT {old {men|man|women|woman|shopper|shoppers|beggar|beggars}} {magenta};
#ACTION {^One of the truffle pigs unearths a truffle from the ground.$} { #ACTION {^One of the truffle pigs unearths a truffle from the ground.$} {
@ -104,19 +104,6 @@
#HIGHLIGHT {^%1 giant spiders climb up from below!} {Violet}; #HIGHLIGHT {^%1 giant spiders climb up from below!} {Violet};
#HIGHLIGHT {^%1 spiders scuttle up from below and join the fight!} {Violet}; #HIGHLIGHT {^%1 spiders scuttle up from below and join the fight!} {Violet};
#NOP ==[Horses]==
#HIGHLIGHT {brindle horse} orange;
#NOP ==[Magic Items]==;
#SUB {^You feel you have regained enough strength to invoke a flame weapon again.$} {You feel you have regained enough strength to <fff>invoke<900> a <fcb>flame<900> weapon again.};
#ACTION {^You feel you have regained enough strength to invoke a flame weapon again.$} { #showme {\a}; };
#SUB {^You zap your balsa wand at %1.$} {You <ffb>zap<900> your <bfe>balsa wand<900> at <fff>%1<900>.};
#SUB {^A pulse of light leaves the balsa wand and envelops %1.$} {A <ffb>pulse of light<900> leaves the <bfe>balsa wand<900> and envelops <fff>%1<900>.};
#SUB {^A pulse of pure night leaves the balsa wand and envelops you.$} {A <ffb>pulse<900> of <bbd>pure night<900> leaves <bfe>the balsa wand<900> and envelops <fff>you<900>.};
#SUB {^A pulse of pure night leaves the balsa wand and envelops you, while %1 fizzles slightly and dims.$} {A <ffb>pulse<900> of <bbd>pure night<900> leaves <bfe>the balsa wand<900> and envelops <fff>you<900>, while the <fff>black diamond nostril stud<900> fizzles slightly and <bbd>dims<900>.};
#HIGHLIGHT {^You feel your skin start to ripple uncomfortably...$} {<bbf>};
#NOP ==[Tab Completions]== #NOP ==[Tab Completions]==
#ACTION {^[%1 has gained the %2 achievement %3]$} { #ACTION {^[%1 has gained the %2 achievement %3]$} {
#tab {%1}; #tab {%1};

View File

@ -60,7 +60,7 @@
#send {skills %1}; #send {skills %1};
#send {cols 999}; #send {cols 999};
}; };
#ALIAS {^{speak|language}$} { #ALIAS {^{speak|language|languages}$} {
#send {cols 60}; #send {cols 60};
#send {speak}; #send {speak};
#send {cols 999}; #send {cols 999};

View File

@ -7,7 +7,7 @@
#ACTION {^%1 {tells|asks|exclaims to} %*you{|(?: in \w+)?}: %4} {#return @log_line_to_chat{};}; #ACTION {^%1 {tells|asks|exclaims to} %*you{|(?: in \w+)?}: %4} {#return @log_line_to_chat{};};
#nop Capture group chat best we can, but ignore any of our client-side [x] messages at least; #nop Capture group chat best we can, but ignore any of our client-side [x] messages at least;
#ACTION {^[{(?!(talker|spottimers|missions|speedwalk|sail|quota|mdt|group)).+}] %2{: | }%4} { #ACTION {^[{(?!(talker|spottimers|missions|speedwalk|sail|quota|mdt|group|eff|snatch)).+}] %2{: | }%4} {
#nop %1 is group name, %3 is player name, %6 is message; #nop %1 is group name, %3 is player name, %6 is message;
#tab {%3}; #tab {%3};
#return @log_line_to_chat{}; #return @log_line_to_chat{};
@ -15,6 +15,7 @@
#ACTION {^(They Might Be Alts) } {#return @log_line_to_chat{};}; #ACTION {^(They Might Be Alts) } {#return @log_line_to_chat{};};
#ACTION {^(The Unsinkables) } {#return @log_line_to_chat{};}; #ACTION {^(The Unsinkables) } {#return @log_line_to_chat{};};
#ACTION {^(Faculty) } {#return @log_line_to_chat{};};
#ACTION {^(newbiehelpers)} {#return @log_line_to_chat{};}; #ACTION {^(newbiehelpers)} {#return @log_line_to_chat{};};
#ACTION {^You newbiehelpers-tell:%1} {#return @log_line_to_chat{};}; #ACTION {^You newbiehelpers-tell:%1} {#return @log_line_to_chat{};};

View File

@ -550,8 +550,6 @@
#class {dbsync} {open}; #class {dbsync} {open};
#var {bookmark_sync} {$db_bookmark_list}; #var {bookmark_sync} {$db_bookmark_list};
#class {dbsync} {close}; #class {dbsync} {close};
#system {touch $dbbookmark_file};
#class {dbsync} {write} {$dbbookmark_file}; #class {dbsync} {write} {$dbbookmark_file};
}; };
#nop *** END BOOKMARK SYSTEM IMPLEMENTATION ***; #nop *** END BOOKMARK SYSTEM IMPLEMENTATION ***;

View File

@ -68,5 +68,14 @@
#HIGHLIGHT {^You are unconscious. You can't do anything.$} {<afc>}; #HIGHLIGHT {^You are unconscious. You can't do anything.$} {<afc>};
#HIGHLIGHT {^You emerge from your trance.$} {<caf>}; #HIGHLIGHT {^You emerge from your trance.$} {<caf>};
#NOP ==[Magic Items]==;
#SUB {^You feel you have regained enough strength to invoke a flame weapon again.$} {You feel you have regained enough strength to <fff>invoke<900> a <fcb>flame<900> weapon again.};
#ACTION {^You feel you have regained enough strength to invoke a flame weapon again.$} { #showme {\a}; };
#SUB {^You zap your balsa wand at %1.$} {You <ffb>zap<900> your <bfe>balsa wand<900> at <fff>%1<900>.};
#SUB {^A pulse of light leaves the balsa wand and envelops %1.$} {A <ffb>pulse of light<900> leaves the <bfe>balsa wand<900> and envelops <fff>%1<900>.};
#SUB {^A pulse of pure night leaves the balsa wand and envelops you.$} {A <ffb>pulse<900> of <bbd>pure night<900> leaves <bfe>the balsa wand<900> and envelops <fff>you<900>.};
#SUB {^A pulse of pure night leaves the balsa wand and envelops you, while %1 fizzles slightly and dims.$} {A <ffb>pulse<900> of <bbd>pure night<900> leaves <bfe>the balsa wand<900> and envelops <fff>you<900>, while the <fff>black diamond nostril stud<900> fizzles slightly and <bbd>dims<900>.};
#HIGHLIGHT {^You feel your skin start to ripple uncomfortably...$} {<bbf>};
#CLASS {magic} {close}; #CLASS {magic} {close};

View File

@ -8,6 +8,8 @@
#read {src/mindspace/spelldata.tin}; #read {src/mindspace/spelldata.tin};
#read {src/mindspace/spellbook.tin}; #read {src/mindspace/spellbook.tin};
#read {src/mindspace/skillscapture.tin};
#read {src/mindspace/spellcheck.tin};
#nop --- Data: list of spell names currently memorized (filled by triggers in later steps) --- ; #nop --- Data: list of spell names currently memorized (filled by triggers in later steps) --- ;
#list {mindspace_spells} {create}; #list {mindspace_spells} {create};
@ -36,16 +38,54 @@
#nop --- Alias: capture max mindspace from "skills ma.sp.sp raw" (special bonus + 30). --- ; #nop --- Alias: capture max mindspace from "skills ma.sp.sp raw" (special bonus + 30). --- ;
#alias {^mindspace skills$} { #alias {^mindspace skills$} {
#var {mindspace_waiting_skills} {1}; #var {mindspace_waiting_skills} {1};
#var {mindspace_skills_done} {0};
#send {cols 60}; #send {cols 60};
#send {skills ma.sp.sp raw}; #send {skills ma.sp.sp raw};
#send {skills $mindspace_skills_paths};
#send {cols 999}; #send {cols 999};
}; };
#nop --- Alias: mindspace help -> show help text. --- ;
#alias {^mindspace help$} {
#showme {};
#showme {<fca>Mindspace & Spellcheck Help<099>};
#showme {};
#showme {<acf>Command: "<aac>mindspace help<acf>"<099>};
#showme { This help information};
#showme {};
#showme {<acf>Command: "<aac>spells<acf>"<099>};
#showme { Show remembered spells with mindspace used/free and gained/lost since last run};
#showme {};
#showme {<acf>Command: "<aac>mindspace skills<acf>"<099>};
#showme { Record your skill bonuses. Run after large skill or stat changes for accurate spellchecks};
#showme {};
#showme {<acf>Command: "<aac>mindspace <acronym><acf>"<099>};
#showme { Lookup spell details, GP cost, mindspace, components, and full spellcheck data (e.g. mindspace tpa)};
#showme {};
#showme {<acf>Clickable links<099>};
#showme { Book titles in spell output and spell acronyms in book listings are clickable.};
#showme { Click a book title to list all spells in that book; click an acronym to show that spell.};
#showme {};
};
#nop --- Alias: mindspace <acronym> -> show spell. (?!skills$|help$) so skills and help are not caught. ---
#alias {^mindspace {?!skills$|help$}{.*}$} {
#if {"%1" == ""} { #return };
#format {mindspace_acr} {%l} {%1};
#var {mindspace_full} {$acronym_to_spell[$mindspace_acr]};
#if {"$mindspace_full" == ""} {
#showme {<118>No spell found for '%1'.<099>};
#return;
};
#var {mindspace_show_spell_name} {$mindspace_full};
/mindspace_show_spell;
};
#nop --- Action: parse magic.spells.special. Table format (configurable MUD output). %1 = bonus. --- ; #nop --- Action: parse magic.spells.special. Table format (configurable MUD output). %1 = bonus. --- ;
#action {^| | special......... %+1..4d %+1..4d$} { #action {^| | special......... %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #if {"$mindspace_waiting_skills" == "1"} {
#math {mindspace_data[$GMCP[charinfo][capname]][max]} {%2 + 30}; #math {mindspace_data[$GMCP[charinfo][capname]][max]} {%2 + 30};
#var {mindspace_waiting_skills} {0};
/writemindspacetofile; /writemindspacetofile;
#delay {1} {#showme {<aee>Mindspace max set to <fff>$mindspace_data[$GMCP[charinfo][capname]][max]<aee> (raw bonus + 30).<099>}}; #delay {1} {#showme {<aee>Mindspace max set to <fff>$mindspace_data[$GMCP[charinfo][capname]][max]<aee> (raw bonus + 30).<099>}};
}; };
@ -55,7 +95,6 @@
#action {^magic\.spells\.special %+1..4d %+1..4d$} { #action {^magic\.spells\.special %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #if {"$mindspace_waiting_skills" == "1"} {
#math {mindspace_data[$GMCP[charinfo][capname]][max]} {%2 + 30}; #math {mindspace_data[$GMCP[charinfo][capname]][max]} {%2 + 30};
#var {mindspace_waiting_skills} {0};
/writemindspacetofile; /writemindspacetofile;
#delay {1} {#showme {<aee>Mindspace max set to <fff>$mindspace_data[$GMCP[charinfo][capname]][max]<aee> (raw bonus + 30).<099>}}; #delay {1} {#showme {<aee>Mindspace max set to <fff>$mindspace_data[$GMCP[charinfo][capname]][max]<aee> (raw bonus + 30).<099>}};
}; };
@ -127,11 +166,10 @@
#nop --- Alias to write out mindspace data to file so we can recall it later --- ; #nop --- Alias to write out mindspace data to file so we can recall it later --- ;
#alias {^/writemindspacetofile$} { #alias {^/writemindspacetofile$} {
#class {mindsync} {clear}; #class {mindsync} {kill};
#class {mindsync} {open}; #class {mindsync} {open};
#var {mindspace_sync} {$mindspace_data}; #var {mindspace_sync} {$mindspace_data};
#class {mindsync} {close}; #class {mindsync} {close};
#class {mindsync} {write} {$mindspace_file}; #class {mindsync} {write} {$mindspace_file};
}; };

View File

@ -0,0 +1,248 @@
#class {mindspace_skills} {kill};
#class {mindspace_skills} {open};
#nop ============================================================================= ;
#nop skillscapture.tin - Per-skill actions to capture bonuses (Phase 2 Step 1). ;
#nop Two actions per skill: table (branched) and raw path. Read after spelldata so skill_tree exists. ;
#nop ============================================================================= ;
#nop --- Comma-separated paths to request in one "skills" command (all skill_tree paths). --- ;
#var {mindspace_skills_paths} {ma.me.el.air,ma.me.el.earth,ma.me.el.fire,ma.me.el.water,ma.me.me.animating,ma.me.me.channeling,ma.me.me.charming,ma.me.me.convoking,ma.me.me.cursing,ma.me.ph.binding,ma.me.ph.brewing,ma.me.ph.chanting,ma.me.ph.dancing,ma.me.ph.enchanting,ma.me.ph.evoking,ma.me.ph.healing,ma.me.ph.scrying,ma.me.sp.abjuring,ma.me.sp.banishing,ma.me.sp.conjuring,ma.me.sp.divining,ma.me.sp.summoning,ma.it.he.wand,ma.it.he.rod,ma.it.he.staff,ma.it.wo.amulet,ma.it.wo.ring,ma.it.talisman,cr.sm.gold,cr.sm.silver,cr.ca.turning,cr.ca.whittling,cr.hus.pl.herbal,cr.pot.fo.shaping,cr.ma.weaving};
#nop --- Number of skills we expect (for "all received" check). --- ;
#var {mindspace_skills_needed} {35};
#nop --- Shared handler: store bonus for current char, increment done, finish when all received. --- ;
#alias {/mindspace_skill_captured} {
#var {mindspace_skill_old} {$mindspace_data[$GMCP[charinfo][capname]][skills][%1]};
#var {mindspace_data[$GMCP[charinfo][capname]][skills][%1]} {%2};
#if {"$mindspace_skill_old" == ""} {
#math {mindspace_skills_done} {$mindspace_skills_done + 1};
};
#if {$mindspace_skills_done >= $mindspace_skills_needed} {
/mindspace_skills_finish;
};
};
#nop --- Called when all skills captured: clear flag, persist, notify. --- ;
#alias {/mindspace_skills_finish} {
#var {mindspace_waiting_skills} {0};
/writemindspacetofile;
#delay {1} {#showme {<aee>Skills and mindspace recorded. Check <fff>$mindspace_data[$GMCP[charinfo][capname]][skills]<aee> for bonuses.<099>}};
};
#nop --- Two actions per skill: table (branched | | name.... level bonus) and raw (path level bonus). --- ;
#nop Table depth: | | | = 3, | | = 2, | | | | = 4. %1=level %2=bonus in both. --- ;
#action {^| | | air{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured air $mindspace_tmp_bonus };
};
#action {^ma.me.el.air%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured air $mindspace_tmp_bonus };
};
#action {^| | | earth{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured earth $mindspace_tmp_bonus };
};
#action {^ma.me.el.earth%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured earth $mindspace_tmp_bonus };
};
#action {^| | | fire{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured fire $mindspace_tmp_bonus };
};
#action {^ma.me.el.fire%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured fire $mindspace_tmp_bonus };
};
#action {^| | | water{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured water $mindspace_tmp_bonus };
};
#action {^ma.me.el.water%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured water $mindspace_tmp_bonus };
};
#action {^| | | animating{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured animating $mindspace_tmp_bonus };
};
#action {^ma.me.me.animating%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured animating $mindspace_tmp_bonus };
};
#action {^| | | channeling{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured channeling $mindspace_tmp_bonus };
};
#action {^ma.me.me.channeling%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured channeling $mindspace_tmp_bonus };
};
#action {^| | | charming{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured charming $mindspace_tmp_bonus };
};
#action {^ma.me.me.charming%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured charming $mindspace_tmp_bonus };
};
#action {^| | | convoking{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured convoking $mindspace_tmp_bonus };
};
#action {^ma.me.me.convoking%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured convoking $mindspace_tmp_bonus };
};
#action {^| | | cursing{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured cursing $mindspace_tmp_bonus };
};
#action {^ma.me.me.cursing%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured cursing $mindspace_tmp_bonus };
};
#action {^| | | binding{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured binding $mindspace_tmp_bonus };
};
#action {^ma.me.ph.binding%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured binding $mindspace_tmp_bonus };
};
#action {^| | | brewing{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured brewing $mindspace_tmp_bonus };
};
#action {^ma.me.ph.brewing%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured brewing $mindspace_tmp_bonus };
};
#action {^| | | chanting{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured chanting $mindspace_tmp_bonus };
};
#action {^ma.me.ph.chanting%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured chanting $mindspace_tmp_bonus };
};
#action {^| | | dancing{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured dancing $mindspace_tmp_bonus };
};
#action {^ma.me.ph.dancing%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured dancing $mindspace_tmp_bonus };
};
#action {^| | | enchanting{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured enchanting $mindspace_tmp_bonus };
};
#action {^ma.me.ph.enchanting%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured enchanting $mindspace_tmp_bonus };
};
#action {^| | | evoking{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured evoking $mindspace_tmp_bonus };
};
#action {^ma.me.ph.evoking%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured evoking $mindspace_tmp_bonus };
};
#action {^| | | healing{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured healing $mindspace_tmp_bonus };
};
#action {^ma.me.ph.healing%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured healing $mindspace_tmp_bonus };
};
#action {^| | | scrying{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured scrying $mindspace_tmp_bonus };
};
#action {^ma.me.ph.scrying%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured scrying $mindspace_tmp_bonus };
};
#action {^| | | abjuring{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured abjuring $mindspace_tmp_bonus };
};
#action {^ma.me.sp.abjuring%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured abjuring $mindspace_tmp_bonus };
};
#action {^| | | banishing{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured banishing $mindspace_tmp_bonus };
};
#action {^ma.me.sp.banishing%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured banishing $mindspace_tmp_bonus };
};
#action {^| | | conjuring{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured conjuring $mindspace_tmp_bonus };
};
#action {^ma.me.sp.conjuring%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured conjuring $mindspace_tmp_bonus };
};
#action {^| | | divining{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured divining $mindspace_tmp_bonus };
};
#action {^ma.me.sp.divining%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured divining $mindspace_tmp_bonus };
};
#action {^| | | summoning{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured summoning $mindspace_tmp_bonus };
};
#action {^ma.me.sp.summoning%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured summoning $mindspace_tmp_bonus };
};
#action {^| | | wand{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured wand $mindspace_tmp_bonus };
};
#action {^ma.it.he.wand%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured wand $mindspace_tmp_bonus };
};
#action {^| | | rod{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured rod $mindspace_tmp_bonus };
};
#action {^ma.it.he.rod%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured rod $mindspace_tmp_bonus };
};
#action {^| | | staff{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured staff $mindspace_tmp_bonus };
};
#action {^ma.it.he.staff%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured staff $mindspace_tmp_bonus };
};
#action {^| | | amulet{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured amulet $mindspace_tmp_bonus };
};
#action {^ma.it.wo.amulet%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured amulet $mindspace_tmp_bonus };
};
#action {^| | | ring{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured ring $mindspace_tmp_bonus };
};
#action {^ma.it.wo.ring%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured ring $mindspace_tmp_bonus };
};
#action {^| | talisman{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured talisman $mindspace_tmp_bonus };
};
#action {^ma.it.talisman%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured talisman $mindspace_tmp_bonus };
};
#action {^| | | gold{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured gold $mindspace_tmp_bonus };
};
#action {^cr.sm.gold%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured gold $mindspace_tmp_bonus };
};
#action {^| | | silver{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured silver $mindspace_tmp_bonus };
};
#action {^cr.sm.silver%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured silver $mindspace_tmp_bonus };
};
#action {^| | | turning{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured turning $mindspace_tmp_bonus };
};
#action {^cr.ca.turning%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured turning $mindspace_tmp_bonus };
};
#action {^| | | whittling{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured whittling $mindspace_tmp_bonus };
};
#action {^cr.ca.whittling%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured whittling $mindspace_tmp_bonus };
};
#action {^| | | | herbal{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured herbal $mindspace_tmp_bonus };
};
#action {^cr.hus.pl.herbal%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured herbal $mindspace_tmp_bonus };
};
#action {^| | | | shaping{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured shaping $mindspace_tmp_bonus };
};
#action {^cr.pot.fo.shaping%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured shaping $mindspace_tmp_bonus };
};
#action {^| | | weaving{.+} %+1..4d %+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured weaving $mindspace_tmp_bonus };
};
#action {^cr.ma.weaving%s%+1..4d%s%+1..4d$} {
#if {"$mindspace_waiting_skills" == "1"} { #var {mindspace_tmp_bonus} {%2}; /mindspace_skill_captured weaving $mindspace_tmp_bonus };
};
#class {mindspace_skills} {close};

View File

@ -0,0 +1,265 @@
#class {spellcheck} {kill};
#class {spellcheck} {open};
#nop =============================================================================
#nop spellcheck.tin - Show spell details + spellcheck table. Read by mindspace.tin.
#nop Expects: mindspace_show_spell_name (set by mindspace before /mindspace_show_spell).
#nop Uses: spell_data, methods_data, books, type_short, skill_levels, order_shorts, skill_tree, mindspace_data, GMCP (from spelldata / mindspace).
#nop Events: PRESSED SECURE LINK MINDSPACEBOOK (book listing), PRESSED SECURE LINK MINDSPACESPELL (show spell).
#nop Colors: xterm 256 format <aaa>-<fff> foreground only.
#nop =============================================================================
#nop --- Returns [bonus] with color by level: red->orange->yellow->green (reversed greens: ada=90%, afa=99+). --- ;
#function {bonus_colored} {
#if {"%1" == "1"} {#return {[<faa>%2<099>]}};
#if {"%1" == "2"} {#return {[<eaa>%2<099>]}};
#if {"%1" == "3"} {#return {[<daa>%2<099>]}};
#if {"%1" == "4"} {#return {[<caa>%2<099>]}};
#if {"%1" == "5"} {#return {[<fca>%2<099>]}};
#if {"%1" == "6"} {#return {[<ffa>%2<099>]}};
#if {"%1" == "7"} {#return {[<efa>%2<099>]}};
#if {"%1" == "8"} {#return {[<dfa>%2<099>]}};
#if {"%1" == "9"} {#return {[<bfa>%2<099>]}};
#if {"%1" == "10"} {#return {[<ada>%2<099>]}};
#return {[<afa>%2<099>]};
};
#alias {/mindspace_show_spell} {
#var {mindspace_bid} {$spell_data[$mindspace_show_spell_name][bookid]};
#format {mindspace_acr} {%u} {$spell_data[$mindspace_show_spell_name][short]};
#showme {};
#showme {<fff>$mindspace_acr: <aff>$mindspace_show_spell_name<099>. Mindspace = <fff>$spell_data[$mindspace_show_spell_name][mindspace]<099>, GP Cost = <fff>$spell_data[$mindspace_show_spell_name][gp]<099>};
#showme {It is categorised as <fff>$spell_data[$mindspace_show_spell_name][type].<099>};
#showme {Components: $spell_data[$mindspace_show_spell_name][components]<099>};
#if {"$spell_data[$mindspace_show_spell_name][hasbook]" == "true"} {
#showme {This is a witch spell.<099>};
} {
#if {"$mindspace_bid" != ""} {
#showme {It is found in '<fff>@book_link{$mindspace_bid;$books[$mindspace_bid][title]}<099>' - '$books[$mindspace_bid][desc]'.<099>};
#showme {<fff>$books[$mindspace_bid][location]<099>};
} {
#showme {It is unknown where this spell can be obtained.<099>};
};
};
#showme {};
#showme {(type '<aff>mindspace skills<099>' to update the plugin with your current bonuses for accurate spellchecks)<099>};
#var {mindspace_char} {$GMCP[charinfo][capname]};
#var {mindspace_char_order} {0};
#if {"$order_shorts[$GMCP[charinfo][guildspec]]" != ""} {
#var {mindspace_char_order} {$order_shorts[$GMCP[charinfo][guildspec]]}
} {
#if {"$GMCP[charinfo][guild]" == "wizards"} {
#var {mindspace_char_order} {3}
};
};
#showme {<fff>Skill Fail <g10>-><g11>-><g12>-><g13>-><g14>-><g15>-><g16>-><g17>-><g18>-><g19>-><g20>-><g20><fff> Equal <g20>-><g20>-><g21>-><g22>-><g23>-><g23>-><g23>-><g23>-><g23>-><g23>-><g23>-><g23>-<fff> Success Chance [bonus]<099>};
#foreach {*methods_data[$mindspace_show_spell_name][%*]} {mindspace_m} {
#var {mindspace_bonus} {$mindspace_data[$mindspace_char][skills][$mindspace_m]};
#if {"$mindspace_bonus" == ""} {
#var {mindspace_bonus} {0}
};
#var {mindspace_level} {1};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][1]} {
#var {mindspace_level} {2}
};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][2]} {
#var {mindspace_level} {3}
};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][3]} {
#var {mindspace_level} {4}
};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][4]} {
#var {mindspace_level} {5}
};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][5]} {
#var {mindspace_level} {6}
};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][6]} {
#var {mindspace_level} {7}
};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][7]} {
#var {mindspace_level} {8}
};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][8]} {
#var {mindspace_level} {9}
};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][9]} {
#var {mindspace_level} {10}
};
#if {$mindspace_bonus >= $methods_data[$mindspace_show_spell_name][$mindspace_m][10]} {
#var {mindspace_level} {11}
};
#var {mindspace_pre} {};
#var {mindspace_mid} {};
#var {mindspace_post} {};
#format {mindspace_cell} {\x3c%s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][1]};
#format {mindspace_cell} {%-9s} {$mindspace_cell};
#if {1 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {1 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][2]};
#if {2 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {2 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][2]};
#if {3 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {3 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][3]};
#if {4 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {4 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][4]};
#if {5 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {5 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][5]};
#if {6 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {6 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][6]};
#if {7 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {7 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][7]};
#if {8 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {8 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][8]};
#if {9 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {9 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][9]};
#if {10 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {10 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_cell} {%-6s} {$methods_data[$mindspace_show_spell_name][$mindspace_m][10]};
#if {11 < $mindspace_level} {
#var {mindspace_pre} {$mindspace_pre$mindspace_cell}
} {
#if {11 == $mindspace_level} {
#var {mindspace_mid} {$mindspace_mid$mindspace_cell}
} {
#var {mindspace_post} {$mindspace_post$mindspace_cell}
}
};
#format {mindspace_skill_fmt} {%-12s } {$mindspace_m};
#var {mindspace_p_suffix} {};
#if {$mindspace_char_order > 0 && "$skill_tree[$mindspace_m][orders]" != ""} {
#foreach {*skill_tree[$mindspace_m][orders][%*]} {_oidx} {
#if {"$skill_tree[$mindspace_m][orders][$_oidx]" == "$mindspace_char_order"} {
#var {mindspace_p_suffix} { <acf>*P*<099>};
#break
};
};
};
#showme {$mindspace_skill_fmt<aff>$mindspace_pre<ffa>$mindspace_mid<faa>$mindspace_post<099> $skill_levels[$mindspace_level]@bonus_colored{$mindspace_level;$mindspace_bonus}<099>$mindspace_p_suffix};
};
#showme {};
};
#nop --- MSLP SECURE LINK: book name -> clickable, passes book ID, outputs Quow-style book listing --- ;
#event {PRESSED SECURE LINK MSBOOK MOUSE BUTTON ONE} {
#showme {clicked book link ><><};
#var {mindspace_bid} {%4};
#if {"$books[$mindspace_bid][title]" == ""} {
#showme {<118>Unknown book ID.<099>};
#return;
};
#showme {};
#showme {<acf>Listing spells found in book '<fff>$books[$mindspace_bid][title]<acf>'<099>};
#showme {<acf>($books[$mindspace_bid][location]):<099>};
#showme {};
#var {mindspace_book_idx} {0};
#foreach {*spell_data[%*]} {mindspace_sn} {
#if {"$spell_data[$mindspace_sn][bookid]" == "$mindspace_bid"} {
#math {mindspace_book_idx} {$mindspace_book_idx + 1};
#var {mindspace_ts} {$type_short[$spell_data[$mindspace_sn][type]]};
#format {mindspace_book_fmt} {%-2s} {$mindspace_book_idx};
#format {mindspace_acr} {%u} {$spell_data[$mindspace_sn][short]};
#showme {<acf> $mindspace_book_fmt: <099>@spell_link{$mindspace_sn;$mindspace_acr}<acf> - $mindspace_sn ($mindspace_ts) [size:$spell_data[$mindspace_sn][mindspace], GP:$spell_data[$mindspace_sn][gp]]<099>};
};
};
#showme {};
};
#nop --- MSLP SECURE LINK: spell acronym/name -> clickable, triggers show spell --- ;
#event {PRESSED SECURE LINK MINDSPACESPELL MOUSE BUTTON ONE} {
#var {mindspace_show_spell_name} {%4};
/mindspace_show_spell;
};
#function {spell_link} {
#nop %1 = full spell name, %2 = display text (e.g. acronym);
#return {\e]68;2;MINDSPACESPELL;%1\a\e[4m%2\e[24m};
}
#function {book_link} {
#showme {created book link ><><};
#nop %1 = book id, %2 = display text;
#return {\e]68;2;MSBOOK;%1\a\e[4m%2\e[24m};
}
#class {spellcheck} {close};

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,26 @@
#VARIABLE {missiontimers_file} {logs/features/missiontimers_sync.tin}; #VARIABLE {missiontimers_file} {logs/features/missiontimers_sync.tin};
#ALIAS {^missions help$} {
#showme {<acf>[<fff>missions<acf>] Mission timers help:<099>};
#showme {Mission timers track the cooldown period for various missions across multiple characters.};
#showme {};
#showme {<acf>Supported mission cooldowns:<099>};
#showme { <ffa>*<099> AM Job Market (Mr Werks)<099>};
#showme { <ffa>*<099> Dead Letter Office (Frank)<099>};
#showme { <ffa>*<099> Sam Slager Sausage Jobs<099>};
#showme { <ffa>*<099> Sailing Cooldown (Chidder)<099>};
#showme {};
#showme {<acf>Available commands:<099>};
#showme { <ffa>*<099> "<afe>missions<099>" - show active cooldowns (all characters)<099>};
#showme { <ffa>*<099> "<afe>missions help<099>" - show this helpfile<099>};
#showme { <ffa>*<099> "<afe>mtsave<099>" - save active cooldowns to file<099>};
#showme { <ffa>*<099> "<afe>mtload<099>" - load active cooldowns from file<099>};
#showme {};
#showme {When a timer runs out, a message will print to inform which character and mission are ready to do again.};
#showme {};
};
#NOP ==[ Missions command reports on each modules active/retry lists ]==; #NOP ==[ Missions command reports on each modules active/retry lists ]==;
#ALIAS {missions} { #ALIAS {missions} {
#if {&missions == 0} { #if {&missions == 0} {

View File

@ -269,6 +269,34 @@
}; };
#nop Set this to 1 when we record first spot, dont overwrite file until set;
#VARIABLE {xptimer_recent_flag} {0};
#ALIAS {dt help} {
#showme {<acf>[<fff>spottimers<acf>] Hotspot death/visit timers help:<099>};
#showme {Hotspot timers record how long since you've killed (death) an NPC or last entered (visit) a particular room.<099>};
#showme {};
#showme { <ffa>*<acf> Command<099>: "<afe>dt<099>"<099>};
#showme {\t<099>List all current timers<099>};
#showme { <ffa>*<acf> Command<099>: "<afe>dt help<099>"<099>};
#showme {\t<099>Display this helpfile<099>};
#showme { <ffa>*<acf> Command<099>: "<afe>dtreset all<099>"<099>};
#showme {\t<099>Reset all timers to unseen, use after idling to clear stale timers<099>};
#showme { <ffa>*<acf> Command<099>: "<afe>dtreset <spot><099>"<099>};
#showme {\t<099>Set a spot as if you had just killed/visted, e.g. "<afe>dtreset zoon liar<099>"<099>};
#showme { <ffa>*<acf> Command<099>: "<afe>gsdt<099>"<099>};
#showme {\t<099>Send all current timers to "<afe>group say<099>" to share<099>};
#showme { <ffa>*<acf> Command<099>: "<afe>dtsync <player><099>"<099>};
#showme {\t<099>Send a tell to a player using this script to sync your timers to them<099>};
#showme { <ffa>*<acf> Command<099>: "<afe>dtsave<099>"<099>};
#showme {\t<099>Force save of current timers to file, use before restarting client<099>};
#showme { <ffa>*<acf> Command<099>: "<afe>dtload<099>"<099>};
#showme {\t<099>Load spot timers from file, use after restarting client<099>};
#showme {};
#showme {<099>Timers are saved to file automatically every five minutes. Output similar to "dt" is saved to "logs/xptimers.log", used to output in another window.<099>};
#showme {};
};
#ALIAS {dtreset} { #ALIAS {dtreset} {
#variable {dtreset_all} {0}; #variable {dtreset_all} {0};
#regex {%1} {all} { #regex {%1} {all} {
@ -281,6 +309,7 @@
#format {xptimer_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Resetting all spots to Unseen.<099>}; #format {xptimer_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Resetting all spots to Unseen.<099>};
#echo {$xptimer_message}; #echo {$xptimer_message};
#variable {dtreset_all} {1}; #variable {dtreset_all} {1};
#variable {xptimer_recent_flag} {0};
}; };
#if {$dtreset_all < 1} { #if {$dtreset_all < 1} {
@ -304,6 +333,7 @@
#format {xp_message_check} {%L} {$xptimer_message}; #format {xp_message_check} {%L} {$xptimer_message};
#if {$xp_message_check > 0} { #if {$xp_message_check > 0} {
#echo {$xptimer_message}; #echo {$xptimer_message};
#variable {xptimer_recent_flag} {1};
}; };
}; };
}; };
@ -327,6 +357,7 @@
#format {xp_message_check} {%L} {$xptimer_message}; #format {xp_message_check} {%L} {$xptimer_message};
#if {$xp_message_check > 0} { #if {$xp_message_check > 0} {
#echo {$xptimer_message}; #echo {$xptimer_message};
#variable {xptimer_recent_flag} {1};
}; };
}; };
}; };
@ -339,6 +370,7 @@
#foreach {*killtimers[]} {spot} { #foreach {*killtimers[]} {spot} {
#regex {%2} {$spot} { #regex {%2} {$spot} {
#format {killtimers[$spot][time]} {%T}; #format {killtimers[$spot][time]} {%T};
#variable {xptimer_recent_flag} {1};
}; };
}; };
}; };
@ -346,6 +378,7 @@
#foreach {*killtimers[]} {spot} { #foreach {*killtimers[]} {spot} {
#regex {%1} {$spot} { #regex {%1} {$spot} {
#format {killtimers[$spot][time]} {%T}; #format {killtimers[$spot][time]} {%T};
#variable {xptimer_recent_flag} {1};
}; };
}; };
}; };
@ -356,6 +389,7 @@
#nop Force case insensitivity on the match due to "The" "A" being capitalized; #nop Force case insensitivity on the match due to "The" "A" being capitalized;
#regex {%1} {%i$spot} { #regex {%1} {%i$spot} {
#format {killtimers[$spot][time]} {%T}; #format {killtimers[$spot][time]} {%T};
#variable {xptimer_recent_flag} {1};
}; };
}; };
}; };
@ -374,20 +408,6 @@
#math {mins} {$current_time - $spottime}; #math {mins} {$current_time - $spottime};
#math {mins} {($mins - (60 - 1)) / 60}; #math {mins} {($mins - (60 - 1)) / 60};
#nop Choose a color-code based on downtime;
#nop #if {$mins > ($spotrespawn + 40)} {
#nop #var {current_spot_color} {<099>};
#nop };
#nop #elseif {$mins > ($spotrespawn + 20)} {
#nop #var {current_spot_color} {<119>};
#nop };
#nop #elseif {$mins >= $spotrespawn} {
#nop #var {current_spot_color} {<139>};
#nop };
#nop #else {
#nop #var {current_spot_color} {<099>};
#nop };
#nop 2/2026 changing scheme here; #nop 2/2026 changing scheme here;
#nop if rat is 40, 30-45 yellow, 45-60 red, beyond 60 miss; #nop if rat is 40, 30-45 yellow, 45-60 red, beyond 60 miss;
#math {low_b} {$spotrespawn - 10}; #math {low_b} {$spotrespawn - 10};
@ -580,6 +600,11 @@
}; };
#ALIAS {/writetimerstosyncfile} { #ALIAS {/writetimerstosyncfile} {
#nop Don't overwrite saved timers if we haven't recorded anything new;
#if {$xptimer_recent_flag == 0} {
#return;
};
#class {dtsync} {clear}; #class {dtsync} {clear};
#class {dtsync} {open}; #class {dtsync} {open};
#var {killtimers_sync} {$killtimers}; #var {killtimers_sync} {$killtimers};