Compare commits

..

No commits in common. "client/tintin-2.02.60" and "master" have entirely different histories.

40 changed files with 1558 additions and 2191 deletions

13
.gitignore vendored
View File

@ -1,12 +1 @@
logs/active/*.log *.log
logs/active/*.tar.gz
logs/features/timer_data.tin
logs/features/wamgmap.log
logs/features/wamgsaver.log
notes/
src/quow.db.old
src/wamgsaver.tin
src/constants.tin
src/timer.tin
src/testing.tin
src/gems.tin

View File

@ -1,5 +1,4 @@
cd ~/documents/MUD/Discworld cd ~/documents/MUD/Discworld
rm logs/history.log
# 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
@ -24,39 +23,32 @@ if [ -n "$TMUX" ] || [ "$DISC_SESSION_CREATE" = "1" ]; then
fi fi
# Create the chat monitor window on top # 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 split-window -v -b -l 4
tmux send-keys 'clear && tail -fs .5 logs/chat.log' 'C-m' tmux send-keys 'clear && tail -fs .5 logs/chat.log' 'C-m'
# Did we ask for the full layout? # Did we ask for the full layout?
if [[ $1 == "full" || $1 != "full" ]]; then if [[ $1 == "full" ]]; then
# Horizontal split and load spottimers # Horizontal split and load spottimers
echo "Making death timer window" tmux select-pane -t discworld:0.0
tmux select-pane -t discworld:0.1
tmux split-window -h -l 28 tmux split-window -h -l 28
tmux send-keys './bin/dt' 'C-m' tmux send-keys './bin/dt' 'C-m'
# Splice a section for group shield monitor # Splice a section for group shield monitor
echo "Making group shield window"
tmux split-window -v -p 50 tmux split-window -v -p 50
tmux send-keys './bin/grp' 'C-m' tmux send-keys './bin/grp' 'C-m'
# Place the ASCII map at the bottom # Place the ASCII map at the bottom
echo "Making map window"
tmux split-window -v -p 50 tmux split-window -v -p 50
tmux send-keys './bin/map' 'C-m' tmux send-keys './bin/map' 'C-m'
fi fi
# Cut back to main window, vertical split for mapdoortext # Cut back to main window, vertical split for mapdoortext
echo "Making MDT window"
tmux select-pane -t discworld:0.0 tmux select-pane -t discworld:0.0
#tmux split-window -v -b -l 5 tmux split-window -v -b -l 5
tmux split-window -v -l 1
tmux send-keys './bin/mdt' 'C-m' tmux send-keys './bin/mdt' 'C-m'
# Select main pane again and load TinTin++ with our config # Select main pane again and load TinTin++ with our config
tmux select-pane -t discworld:0.1 tmux select-pane -t discworld:0.0
tmux send-keys 'clear && tt++ -G config.tin' 'C-m' tmux send-keys 'clear && tt++ -G config.tin' 'C-m'
fi fi

View File

@ -3,7 +3,7 @@
# clear && watch --color -t -n 0.4 'python src/mdtparse.py logs/mapdoortext.log | tail -n `tput lines`' # clear && watch --color -t -n 0.4 'python src/mdtparse.py logs/mapdoortext.log | tail -n `tput lines`'
clear && while true; do clear && while true; do
output=$(printf "\ec"; python3 src/mdtparse.py logs/mapdoortext.log | tail -n `tput lines`); output=$(printf "\ec"; python src/mdtparse.py logs/mapdoortext.log | tail -n `tput lines`);
echo "$output"; echo "$output";
sleep 0.5; sleep 0.5;
done done

View File

@ -1,15 +1,15 @@
#VARIABLE {chat_file} {logs/chat.log} #VARIABLE {chat_file} {logs/chat.log}
#CONFIG {SPEEDWALK} {OFF}; #CONFIG {SPEEDWALK} {OFF};
#CONFIG {SPLIT};
#CONFIG {PACKET PATCH} {5}; #CONFIG {PACKET PATCH} {5};
#CONFIG {COLOR PATCH} {ON}; #CONFIG {COLOR PATCH} {ON};
#CONFIG {MCCP} {ON}; #CONFIG {MCCP} {ON};
#CONFIG {MOUSE} {ON};
#CONFIG {LOG} {RAW}; #CONFIG {LOG} {RAW};
#CONFIG {BUFFER SIZE} {1000000}; #CONFIG {BUFFER SIZE} {2000000};
#config {COMMAND COLOR} {<fcf>}; #config {COMMAND COLOR} {<fcf>};
#SPLIT {3}; #nop removed arg: {1} and removed #CONFIG {SPLIT}; #SPLIT {2} {1};
#READ {src/channels.tin}; #READ {src/channels.tin};
#READ {src/actions.tin}; #READ {src/actions.tin};
@ -31,39 +31,11 @@
#READ {src/missions.tin}; #READ {src/missions.tin};
#READ {src/group.tin}; #READ {src/group.tin};
#READ {src/personal.tin};
#SESSION {discworld} {discworld.starturtle.net} {4242}; #SESSION {discworld} {discworld.starturtle.net} {4242};
#nop #SESSION {discworld} {disctemp.starturtle.net} {23};
#FORMAT {log_file} {logs/active/%t.log} {%Y-%m-%d}; #FORMAT {log_file} {logs/active/%t.log} {%Y-%m-%d};
#LOG {APPEND} {$log_file}; #LOG {APPEND} {$log_file};
#HISTORY {read} {logs/history.log}; #ACTION {Greco the Departure Gecko waves.} {#end}
#EVENT {SESSION DISCONNECTED} {
/writetimerstosyncfile;
/writemissiontimerstofile;
#HISTORY {write} {logs/history.log};
};
#EVENT {SIGHUB} {
/writetimerstosyncfile;
/writemissiontimerstofile;
#HISTORY {write} {logs/history.log};
};
#TICKER {timers_to_file} {
/writetimerstosyncfile;
/writemissiontimerstofile;
#HISTORY {write} {logs/history.log};
} {60};
#EVENT {SCROLLED MOUSE WHEEL UP} {#buffer up 5};
#EVENT {SCROLLED MOUSE WHEEL DOWN} {#buffer down 5};
#FUNCTION {log_line_to_chat} {
#script {ts} {date +"%I:%M%P"};
#line {log} {$chat_file} {$ts[1] \};
#line {log} {$chat_file};
};
#FORMAT {start_time} {%T}; #FORMAT {start_time} {%T};

View File

@ -1 +0,0 @@
!.gitignore

View File

View File

@ -1 +0,0 @@
[["town crier", "red", 5, false]]

View File

@ -1,27 +0,0 @@
#CLASS {mtsync} OPEN
#VARIABLE {missions_sync}
{
{jobmarket}
{
{board_codes} {}
{current_code} {0}
{current_name} {0}
}
{letter}
{
{last_difficulty} {0}
}
{sailing}
{
{active} {0}
{experience} {0}
}
{sausage}
{
{current_difficulty} {1}
{current_primer} {1}
}
}
#CLASS {mtsync} CLOSE

View File

@ -1,311 +0,0 @@
#CLASS {dtsync} OPEN
#VARIABLE {killtimers_sync}
{
{Charles Marchella}
{
{group} {true}
{name} {casino}
{respawn} {40}
{time} {1770772056}
}
{Delbert}
{
{group} {false}
{name} {delbert}
{respawn} {40}
{time} {1770771775}
}
{Enrico Persuica}
{
{group} {true}
{name} {stables}
{respawn} {40}
{time} {0}
}
{Frankie Harvard}
{
{group} {true}
{name} {casino}
{respawn} {40}
{time} {1770772051}
}
{Geraldo Ciaco}
{
{group} {true}
{name} {casino}
{respawn} {40}
{time} {1770772043}
}
{Hlakket the Bartender}
{
{group} {false}
{name} {hlakket}
{respawn} {40}
{time} {1770770657}
}
{Joe Corrola}
{
{group} {true}
{name} {stables}
{respawn} {40}
{time} {0}
}
{Louis Accardo}
{
{group} {true}
{name} {stables}
{respawn} {40}
{time} {0}
}
{Marlon Gumboni}
{
{group} {true}
{name} {casino}
{respawn} {40}
{time} {1770772078}
}
{Samuel Casso}
{
{group} {true}
{name} {stables}
{respawn} {40}
{time} {0}
}
{Slim Stevie}
{
{group} {false}
{name} {rogues}
{respawn} {40}
{time} {0}
}
{the %* crocodile}
{
{group} {false}
{name} {offler}
{respawn} {40}
{time} {1770771089}
}
{the %* desert nomad}
{
{group} {true}
{name} {oasis}
{respawn} {40}
{time} {0}
}
{the %* grflx worker}
{
{group} {false}
{name} {grflx}
{respawn} {40}
{time} {0}
}
{the %* hermit}
{
{group} {true}
{name} {oasis}
{respawn} {40}
{time} {0}
}
{the %* lion}
{
{group} {false}
{name} {shaker}
{respawn} {40}
{time} {1770771120}
}
{the %* mystic}
{
{group} {true}
{name} {oasis}
{respawn} {40}
{time} {0}
}
{the %* nitsuni}
{
{group} {true}
{name} {snail}
{respawn} {40}
{time} {0}
}
{the %* patroller}
{
{group} {true}
{name} {oasis}
{respawn} {40}
{time} {0}
}
{the %* rujona}
{
{group} {true}
{name} {snail}
{respawn} {40}
{time} {0}
}
{the %* student}
{
{group} {false}
{name} {dojo}
{respawn} {40}
{time} {0}
}
{the Ome outlaw}
{
{group} {true}
{name} {snail}
{respawn} {40}
{time} {0}
}
{the Triad boss}
{
{group} {false}
{name} {medina boss}
{respawn} {40}
{time} {1770770069}
}
{the Zoon Liar}
{
{group} {false}
{name} {zoon liar}
{respawn} {40}
{time} {0}
}
{the bandit leader}
{
{group} {false}
{name} {bandits}
{respawn} {40}
{time} {1770771258}
}
{the ceremonial guard}
{
{group} {false}
{name} {cguards}
{respawn} {40}
{time} {1770771023}
}
{the citadel guard}
{
{group} {false}
{name} {citguard}
{respawn} {40}
{time} {1770770873}
}
{the giant leader}
{
{group} {false}
{name} {giants}
{respawn} {40}
{time} {0}
}
{the peacekeeper commander}
{
{group} {true}
{name} {oasis}
{respawn} {40}
{time} {0}
}
{the smuggler captain}
{
{group} {false}
{name} {smug cap}
{respawn} {40}
{time} {1770771880}
}
{the {Tang|Fang|Sung|Hong|McSweeney} captain}
{
{group} {true}
{name} {bmarket}
{respawn} {40}
{time} {1770770324}
}
{the {strict|serious|grim|tough|stern} captain}
{
{group} {true}
{name} {oasis}
{respawn} {40}
{time} {0}
}
}
#VARIABLE {visittimers_sync}
{
{0ae9d8c4f2b48f4fcc4cb57fd85443399be2ecc5}
{
{group} {true}
{name} {bmarket}
{respawn} {40}
{time} {0}
}
{2950a174f65ef8e38eee444295c9b4832d36ab60}
{
{group} {false}
{name} {dragon}
{respawn} {40}
{time} {1770771696}
}
{3862c5fd0fe83f4080bdb9b94519bf8da89d5015}
{
{group} {true}
{name} {parades}
{respawn} {40}
{time} {1770772136}
}
{70546ec71867645ab5c51e9ce6087b75dcf4176f}
{
{group} {false}
{name} {offler}
{respawn} {40}
{time} {1770771072}
}
{7377f4483763eca72e0b97a87f71c5266e33f2cd}
{
{group} {false}
{name} {cocoons}
{respawn} {40}
{time} {1770771126}
}
{AMShades}
{
{group} {false}
{name} {shades}
{respawn} {20}
{time} {1770771752}
}
{c7c6f5720d2c587f80696b6f0ec7f9ac0f084b06}
{
{group} {true}
{name} {bmarket}
{respawn} {40}
{time} {1770770328}
}
{cca9645565f2bb0d017ea9b1dcc9d1b3e9fcfe72}
{
{group} {false}
{name} {cabbage}
{respawn} {40}
{time} {0}
}
{e4646eab906aef1187a9dd3e980441b8f6b8d68c}
{
{group} {true}
{name} {bmarket}
{respawn} {40}
{time} {1770770282}
}
{ebff897af2b8bb6800a9a8636143099d0714be07}
{
{group} {false}
{name} {smugglers}
{respawn} {20}
{time} {1770771920}
}
{f6c60dd36ed38707eb954c3a670f2f9370a79399}
{
{group} {true}
{name} {bmarket}
{respawn} {40}
{time} {1770770284}
}
}
#CLASS {dtsync} CLOSE

View File

View File

View File

@ -1 +0,0 @@
A door east of here and the limit of your vision is here.

View File

@ -1,2 +0,0 @@
@+

View File

View File

@ -52,11 +52,9 @@
["Ramtops Highlights"], ["Ramtops Highlights"],
["headless horse rider", "red", 8, false], ["headless horse rider", "red", 8, false],
["wandering trollish locksmith", "red", 5, false],
["Ankh-Morpork Highlights"], ["Ankh-Morpork Highlights"],
["barbarian", "red", 5, false], ["barbarian", "red", 5, false],
["watchman", "red", 5, false],
["Genua Highlights"], ["Genua Highlights"],
["Tfat Chick", "red", 10, false], ["Tfat Chick", "red", 10, false],

View File

@ -1,42 +1,32 @@
#CLASS {actions} {kill}; #CLASS {actions} {kill};
#CLASS {actions} {open}; #CLASS {actions} {open};
#NOP ==[TPA Alerts]==; #NOP ==[TPA Alerts]==
#HIGHLIGHT {^There is a sudden white flash. Your magical shield has broken.$} {Red underscore}; #HIGHLIGHT {^There is a sudden white flash. Your magical shield has broken.$} {bold red underscore};
#HIGHLIGHT {^There is a sudden white flash around {(?!a passing wizard).+}.$} {Red underscore}; #HIGHLIGHT {^There is a sudden white flash around {(?!a passing wizard).+}.$} {bold red underscore};
#ACTION {^There is a sudden white flash around {(?!a passing wizard).+}.$} { #ACTION {^There is a sudden white flash around {(?!a passing wizard).+}.$} {
#showme {\a}; #showme {\a};
#return @log_line_to_chat{}; #line {log} {$chat_file};
}; };
#NOP ==[EFF Alerts]==;
#SUB {^In blocking the attack {(?:.+)} floating around {(?:\w+\b\W*?){1,8}} is knocked out of orbit.$} {<199><438>In blocking the attack <788>%1<099><188><438> floating around <788>%2<099><188><438> is knocked out of orbit.<099>};
#NOP ==[T-Shop Alerts]== #NOP ==[T-Shop Alerts]==
#HIGHLIGHT {^Greasy sparks crawl over the %1 wall, and a door silently materialises.$} {green underscore}; #HIGHLIGHT {Greasy sparks crawl over the %1 wall, and a door silently materialises.} {bold green underscore};
#HIGHLIGHT {^There is a doorway in the %1 wall leading into a curious shop.$} {green underscore}; #HIGHLIGHT {There is a doorway in the %1 wall leading into a curious shop.} {bold green underscore};
#ACTION {^Greasy sparks crawl over the %1 wall, and a door silently materialises.$} { #showme {\a}; };
#ACTION {^There is a doorway in the %1 wall leading into a curious shop.$} { #showme {\a}; };
#NOP ==[Incident Highlighting]== #NOP ==[Incident Highlighting]==
#SUB {^The%1grabs your%2. You struggle briefly but {she|he|it} wrests it from your grip and makes for a hasty retreat.} {<488><119>The<088><fca>%1<488><119>grabs your<088><afc>%2<488><119>. You struggle briefly but {she|he|it} wrests it from your grip and makes for a hasty retreat.}; #HIGHLIGHT {^%1 grabs %2 from you. You struggle briefly but %3 wrests it from your grip and makes for a hasty retreat.$} {bold red underscore};
#SUB {^The%1and%2struggle briefly over%3before%4wrests it free%5$} {<488><119>The<088><fca>%1<488><119>and<088><fca>%2<488><119>struggle briefly over<088><afc>%3<488><119>before%4wrests it free%5}; #HIGHLIGHT {^%1 grabs {his|her|its} %2. You struggle briefly but {he|she|it} wrests it from your grip and makes for a hasty retreat.} {bold red underscore};
#SUB {^The%1{suddenly snatches|snatches}%2from%3and makes a run for it.$} {<488><119>The<088><188><fca>%1<488><119>suddenly snatches<088><188><afc>%2<488><119>from<088><188><fca>%3<488><119>and makes a run for it.}; #HIGHLIGHT {^%1 grabs your %2. You struggle briefly but {she|he|it} wrests it from your grip and makes for a hasty retreat.} {bold red underscore};
#HIGHLIGHT {^As %1 dies %2 drops %3 in shock.$} {green underscore}; #HIGHLIGHT {^As %1 dies %2 drops %3 in shock.$} {bold green underscore};
#HIGHLIGHT {^When you open the %1 you think you can hear a faint rumbling sound from it.$} {red underscore}; #HIGHLIGHT {^When you open the %1 you think you can hear a faint rumbling sound from it.$} {red underscore};
#HIGHLIGHT {^Whoops! You tried to carry too many things and fumbled %1} {red underscore}; #HIGHLIGHT {^Whoops! You tried to carry too many things and fumbled %1} {red underscore};
#HIGHLIGHT {%1 juggles around his stuff and fumbles %2} {red underscore}; #HIGHLIGHT {%1 juggles around his stuff and fumbles %2} {red underscore};
#HIGHLIGHT {^The sparkles around you fall to the ground and vanish.$} {red underscore};
#HIGHLIGHT {^You sail past the brindle horse, flying over the side of the mountain in the process!$} {Red underscore};
#ACTION {^You sail past the brindle horse, flying over the side of the mountain in the process!$} {
#showme {\a};
};
#NOP ==[Command Color Highlighting]== #NOP ==[Command Color Highlighting]==
#SUB {%w %w with a total of %* item} {<148>%1 %2<099> with a total of <148>%3<099> item}; #SUB {%w %w with a total of %* item} {<148>%1 %2<099> with a total of <148>%3<099> item};
#NOP ==[Truffle Found]== #NOP ==[Truffle Found]==
#HIGHLIGHT {truffle pigs? unearths a truffle from the ground.} {Green}; #HIGHLIGHT {The young truffle pig unearths a truffle from the ground.} {bold green};
#NOP ==[Attention Soul(s)]== #NOP ==[Attention Soul(s)]==
#ACTION {^{(?!Ryattenoki).+} tugs on your sleeve in a desperate attempt to get some attention.$} { #ACTION {^{(?!Ryattenoki).+} tugs on your sleeve in a desperate attempt to get some attention.$} {
@ -45,80 +35,52 @@
#NOP ==[Copperhead Mines]== #NOP ==[Copperhead Mines]==
#SUB {you think that %1 of the surrounding crates contain} {you think that <138>%1<099> of the surrounding crates contain}; #SUB {you think that %1 of the surrounding crates contain} {you think that <138>%1<099> of the surrounding crates contain};
#SUB {a hammer chip would break %1 of rock} {a hammer chip would break <138>%1<099> of rock}; #HIGHLIGHT {Something doesn't smell right. You take a sniff but the faint odour of rotten eggs makes you cough.} {bold green underscore};
#SUB {pickaxe strike would break %1 inches.} {pickaxe strike would break <138>%1<099> inches.}; #HIGHLIGHT {Somewhere above you, you hear the rumble of falling rock.} {bold green underscore};
#SUB {You determine that directly behind this wall is a small gem vein of %1, exactly %2 deep.} {You determine that directly behind this wall is a small gem vein of %1, exactly <138>%2<099> deep.}; #ACTION {Something doesn't smell right. You take a sniff but the faint odour of rotten eggs makes you cough.} {
#HIGHLIGHT {You shake your pan gently, as glittering purple gathers under the cloudy water.} {Magenta}; #showme {\a};
#HIGHLIGHT {You shake your pan from side to side, as the last of the sediment leaves the pan and the water runs clear for just a moment.} {Magenta}; };
#HIGHLIGHT {Something doesn't smell right. You take a sniff but the faint odour of rotten eggs makes you cough.} {Green underscore}; #ACTION {Somewhere above you, you hear the rumble of falling rock.} {
#HIGHLIGHT {Somewhere above you, you hear the rumble of falling rock.} {Green underscore}; #showme {\a};
#HIGHLIGHT {You suddenly feel like you can't breathe.} {Green underscore}; };
#HIGHLIGHT {You collapse on the ground, your muscles spasming uncontrollably.} {Green underscore};
#HIGHLIGHT {You can't smell it any more, but you're getting a dizzy sort of headache. Maybe you should get out of here.} {Green underscore};
#HIGHLIGHT {The air here is just as choking as before.} {Green underscore};
#ACTION {You shake your pan gently, as glittering purple gathers under the cloudy water.} { #showme {\a}; };
#ACTION {You shake your pan from side to side, as the last of the sediment leaves the pan and the water runs clear for just a moment.} { #showme {\a}; };
#ACTION {Something doesn't smell right. You take a sniff but the faint odour of rotten eggs makes you cough.} { #showme {\a}; };
#ACTION {Somewhere above you, you hear the rumble of falling rock.} { #showme {\a}; };
#ACTION {You suddenly feel like you can't breathe.} { #showme {\a}; };
#ACTION {You collapse on the ground, your muscles spasming uncontrollably.} { #showme {\a}; };
#ACTION {You can't smell it any more, but you're getting a dizzy sort of headache. Maybe you should get out of here.} { #showme {\a}; };
#ACTION {The air here is just as choking as before.} { #showme {\a}; };
#HIGHLIGHT {The air here seems fresher.} {Yellow underscore};
#NOP ==[Gemcutting/Finesmithing]== #NOP ==[Gemcutting/Finesmithing]==
#HIGHLIGHT {You take the diamond-tipped chisel from your roll of gemcutting tools and delicately chip %1} {green}; #HIGHLIGHT {You take the diamond-tipped chisel from your roll of gemcutting tools and delicately chip %1} {bold green};
#HIGHLIGHT {You take the diamond-tipped chisel from your roll of gemcutting tools and chip away %1} {Red}; #HIGHLIGHT {You take the diamond-tipped chisel from your roll of gemcutting tools and chip away %1} {bold red};
#HIGHLIGHT {You take the diamond-tipped chisel from your roll of gemcutting tools and, struggling with %1} {Red}; #HIGHLIGHT {You take the diamond-tipped chisel from your roll of gemcutting tools and, struggling with %1} {bold red};
#HIGHLIGHT {With a start, you realise that you've been going about this all wrong, %1} {Red};
#SUB {You estimate that the %1 is worth A$%2. You} {You estimate that the <149>%1<099> is worth A$<139>%2<099>. You}; #SUB {You estimate that the %1 is worth A$%2. You} {You estimate that the <149>%1<099> is worth A$<139>%2<099>. You};
#NOP ==[Achievements]== #NOP ==[Achievements]==
#HIGHLIGHT {the {green|aqua|cyan|blue|yellow|red|orange|beige|brown|grey|black|violet|mauve|pink|purple} ball} {Cyan}; #ACTION {^It is your turn to fight... enter the combat ring.$} {
#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}; #ACTION {^The %1 camel gallops away abruptly.$} {
#HIGHLIGHT {old {men|man|women|woman|shopper|shoppers|beggar|beggars}} {magenta}; #showme {[Pushover] %0};
#ACTION {^One of the truffle pigs unearths a truffle from the ground.$} { }
#delay {120} { #showme {<ccc>CAN TRUFFLE FARM AGAIN<999>} }
};
#NOP ==[PK Actions]== #NOP ==[PK Actions]==
#HIGHLIGHT {You reach towards your goal but pause suddenly as %1 seems to sense something. {She|He|It} doesn't spot you and %2} {Green}; #HIGHLIGHT {You reach towards your goal but apuse suddenly as %1 seems to sense something. {She|He|It} doesn't spot you and %2} {bold green};
#HIGHLIGHT {You try to filch %1 from %2 but {she|he|it} notices you and manages to %3} {Red}; #HIGHLIGHT {You try to filch %1 from %2 but {she|he|it} notices you and manages to %3} {bold red};
#ACTION {A stream of expletives drifts down from above with %1} { #showme {\a}; }; #ACTION {A stream of expletives drifts down from above with %1} { #showme {\a}; };
#ACTION {There is the faintest of sounds, as of a gnat yawning, then a WHOOSH sound. %2} { #showme {\a}; }; #ACTION {There is the faintest of sounds, as of a gnat yawning, then a WHOOSH sound. %2} { #showme {\a}; };
#HIGHLIGHT {A stream of expletives drifts down from above with %1} {Orange}; #HIGHLIGHT {A stream of expletives drifts down from above with %1} {bold red underscore};
#HIGHLIGHT {There is the faintest of sounds, as of a gnat yawning, then a WHOOSH sound. %2} {Lime}; #HIGHLIGHT {There is the faintest of sounds, as of a gnat yawning, then a WHOOSH sound. %2} {bold red underscore};
#NOP ==[Shelox]== #NOP ==[Shelox]==
#HIGHLIGHT {^Screaming echoes throughout the lair!$} {Red}; #HIGHLIGHT {^Screaming echoes throughout the lair!$} {bold red};
#HIGHLIGHT {^You see a thick string of web hurtling at you and then everything suddenly goes black.$} {green}; #HIGHLIGHT {^You see a thick string of web hurtling at you and then everything suddenly goes black.$} {bold green};
#SUB {^Webbing shoots out from the frog that looks an awful lot like Queen Shelox's abdomen and slams into %1.$} {<028>Webbing shoots out from the frog that looks an awful lot like Queen Shelox's abdomen and slams into <128>%1<028>.}; #HIGHLIGHT {^Webbing shoots out from the frog that looks an awful lot like Queen Shelox's abdomen and slams into %1.$} {bold green};
#SUB {^Webbing shoots out from Queen Shelox's abdomen and slams into %1.$} {<028>Webbing shoots out from Queen Shelox's abdomen and slams into <128>%1<028>.}; #HIGHLIGHT {^Webbing shoots out from Queen Shelox's abdomen and slams into %1.$} {bold green};
#ACTION {^An ominous gurgling noise can be heard coming from the frog that looks an awful lot like Queen Shelox's abdomen.$} { #showme {\a}; }; #ACTION {^An ominous gurgling noise can be heard coming from the frog that looks an awful lot like Queen Shelox's abdomen.$} { #showme {\a}; };
#ACTION {^An ominous gurgling noise can be heard coming from Queen Shelox's abdomen.$} { #showme {\a}; }; #ACTION {^An ominous gurgling noise can be heard coming from Queen Shelox's abdomen.$} { #showme {\a}; };
#HIGHLIGHT {^%1 giant spiders climb up from below!} {Violet}; #HIGHLIGHT {^%1 giant spiders climb up from below!} {bold violet};
#HIGHLIGHT {^%1 spiders scuttle up from below and join the fight!} {Violet}; #HIGHLIGHT {^%1 spiders scuttle up from below and join the fight!} {bold violet};
#NOP ==[Horses]==
#HIGHLIGHT {brindle horse} orange;
#NOP ==[Tab Completions]==
#ACTION {^[%1 has gained the %2 achievement %3]$} {
#tab {%1};
#return @log_line_to_chat{};
}
#NOP ==[End Session On Quit]== #NOP ==[End Session On Quit]==
#nop #ACTION {Thanks for playing. See you next time.} {; #ACTION {Thanks for playing. See you next time.} {
#nop Don't do this anymore, since history buffer is with tt++ not tmux now, we want to see what we missed while idling out.; #end;
#nop #end; }
#nop };
#CLASS {actions} {close}; #CLASS {actions} {close};

View File

@ -1,4 +1,5 @@
#ALIAS {setsize} {rows 300;cols 999}; #ALIAS {setsize} {rows 300;cols 148};
#ALIAS {setmsize} {rows 300;cols 60};
#ALIAS {^clear$} { #ALIAS {^clear$} {
#system {tput clear}; #system {tput clear};
@ -28,10 +29,10 @@
{ {
#foreach {a;b;c;d;e;f} {cnt2} #foreach {a;b;c;d;e;f} {cnt2}
{ {
#local result <000>; #var result <000>;
#foreach {a;b;c;d;e;f} {cnt3} #foreach {a;b;c;d;e;f} {cnt3}
{ {
#local result $result <$cnt1$cnt2$cnt3> <<888>$cnt1$cnt2$cnt3><088> #var result $result <$cnt1$cnt2$cnt3> <<888>$cnt1$cnt2$cnt3><088>
}; };
#showme $result #showme $result
} }
@ -39,83 +40,49 @@
} }
#ALIAS {minesolve %1 %2 %3} { #ALIAS {minesolve %1 %2 %3} {
#local {total} {%1}; #var {total} {%1};
#local {hammer} {%2}; #var {hammer} {%2};
#local {pickaxe} {%3}; #var {pickaxe} {%3};
#local {solvecommand} {python3 -c 'import math; t,p,h = $total,$pickaxe,$hammer; pu,hu = int(math.floor(t/p)+1), int(math.floor(t/h)+1); print(*sorted([(i, j) for j in range(0,hu) for i in range(0,pu) if ((i*p) + (j*h) == t)], key=lambda t: t[1])[0]);'}; #var {solvecommand} {python3 -c 'import math; t,p,h = $total,$pickaxe,$hammer; pu,hu = int(math.floor(t/p)+1), int(math.floor(t/h)+1); print(*sorted([(i, j) for j in range(0,hu) for i in range(0,pu) if ((i*p) + (j*h) == t)], key=lambda t: t[1])[0]);'};
#script {result} {$solvecommand}; #script {result} {$solvecommand};
#replace {result[1]} { } {;}; #replace {result[1]} { } {;};
#list {solution} {create} {$result[1]}; #list {solution} {create} {$result[1]};
#format {minesolvedisplay} {<acf>[<fff>mines<acf>] Best solution is <139>%d<acf> pickaxe strikes and <139>%d<acf> hammer chips for a total of <159>%f<acf> inches.<099>} {$solution[1]} {$solution[2]} {$total}; #format {minesolvedisplay} {<149>[MineSolver] Best solution is <139>%d<149> pickaxe strikes and <139>%d<149> hammer chips for a total of <159>%f<149> inches.<099>} {$solution[1]} {$solution[2]} {$total};
#echo {$minesolvedisplay}; #echo {$minesolvedisplay};
}; };
#nop Resizing aliases for when we're in "cols 999" mode; #nop Resizing aliases for when we're in "cols 999" mode;
#ALIAS {^skills%1} { #ALIAS {^skills%1} {
#send {cols 60}; #send {cols 130};
#send {skills %1}; #send {skills %1};
#send {cols 999}; #send {cols 999};
}; };
#ALIAS {^{speak|language}$} { #ALIAS {^{speak|language}$} {
#send {cols 60}; #send {cols 130};
#send {speak}; #send {speak};
#send {cols 999}; #send {cols 999};
}; };
#ALIAS {^spells$} { #send {cols 60}; #send {spells}; #send {cols 999}; }; #ALIAS {^spells$} { #send {cols 130}; #send {spells}; #send {cols 999}; };
#ALIAS {^rituals$} { #send {cols 60}; #send {rituals}; #send {cols 999}; }; #ALIAS {^rituals$} { #send {cols 130}; #send {rituals}; #send {cols 999}; };
#ALIAS {^group status$} { #send {cols 60}; #send {group status}; #send {cols 999}; }; #ALIAS {^group status$} { #send {cols 130}; #send {group status}; #send {cols 999}; };
#ALIAS {^{who$|who (.+)$}} { #ALIAS {^{who$|who (.+)$}} {
#send {cols 60}; #send {cols 130};
#send {%0}; #send {%0};
#send {cols 999}; #send {cols 999};
}; };
#ALIAS {^help %1} { #ALIAS {^help %1} {
#send {cols 60}; #send {cols 130};
#send {help %1}; #send {help %1};
#send {cols 999}; #send {cols 999};
}; };
#ALIAS {^nickname$} { #ALIAS {^nickname$} {
#send {cols 60}; #send {cols 130};
#send {nickname}; #send {nickname};
#send {cols 999}; #send {cols 999};
}; };
#ALIAS {^sotp} {
#send {stop};
}
#ALIAS {gatherstones} {
#10 get rock;put white rocks&white stones&white pebbles in knapsack;bury rocks in me&stones in me&pebbles in me
}
#nop Map Door Text custom match controls;
#ALIAS {mdtc add %1} {
#local {mdtc_command} {python3 src/mdt_matchcontrol.py add %1};
#script {result} {$mdtc_command};
#if {"$result" == "0"} {
#echo {<acf>[<fff>mdt<acf>] <138>*<acf> Failed to add a new custom match for '<cfa>%1<acf>'.};
#return;
} {
#echo {<acf>[<fff>mdt<acf>] <138>*<acf> Successfully added a new custom match for '<cfa>%1<acf>'.};
};
};
#ALIAS {mdtc remove %1} {
#local {mdtc_command} {python3 src/mdt_matchcontrol.py remove %1};
#script {result} {$mdtc_command};
#if {"$result" == "0"} {
#echo {<acf>[<fff>mdt<acf>] <138>*<acf> Failed to remove a custom match for '<cfa>%1<acf>'.};
#return;
} {
#echo {<acf>[<fff>mdt<acf>] <138>*<acf> Successfully removed a custom match for '<cfa>%1<acf>'.};
};
};

View File

@ -3,21 +3,20 @@
#VARIABLE {talker_log_toggle} {0}; #VARIABLE {talker_log_toggle} {0};
#ACTION {^You {tell|ask|exclaim to} %1:%2} {#return @log_line_to_chat{};}; #FUNCTION {log_line_to_chat} {
#ACTION {^%1 {tells|asks|exclaims to} %*you{|(?: in \w+)?}: %4} {#return @log_line_to_chat{};}; #script {ts} {date +"%I:%M%P"};
#line {log} {$chat_file} {$ts[1] \};
#nop Capture group chat best we can, but ignore any of our client-side [x] messages at least; #line {log} {$chat_file}
#ACTION {^[{(?!(talker|spottimers|missions|speedwalk|sail|quota|mdt|group)).+}] %2{: | }%4} {
#nop %1 is group name, %3 is player name, %6 is message;
#tab {%3};
#return @log_line_to_chat{};
}; };
#ACTION {^You {tell|ask|exclaim to} %1:%2} {#return @log_line_to_chat{};};
#ACTION {^%1 {tells|asks|exclaims to} %*you{|(?: in \w+)?}: %4} {#return @log_line_to_chat{};};
#ACTION {^[%1] %2{:|} %3} {#return @log_line_to_chat{};};
#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 {^(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 newbiehelper-tell:%1} {#return @log_line_to_chat{};};
#ACTION {^(newbie)} {#return @log_line_to_chat{};}; #ACTION {^(newbie)} {#return @log_line_to_chat{};};
#ACTION {^You newbie-tell:%1} {#return @log_line_to_chat{};}; #ACTION {^You newbie-tell:%1} {#return @log_line_to_chat{};};
#ACTION {^You special-tell:%1} {#return @log_line_to_chat{};}; #ACTION {^You special-tell:%1} {#return @log_line_to_chat{};};
@ -29,6 +28,9 @@
#return @log_line_to_chat{}; #return @log_line_to_chat{};
}; };
}; };
#ACTION {(>CTF<) %1} {
#return @log_line_to_chat{};
};
#ACTION {%1Inform: %2} { #ACTION {%1Inform: %2} {
#return @log_line_to_chat{}; #return @log_line_to_chat{};
}; };
@ -42,21 +44,6 @@
#return @log_line_to_chat{}; #return @log_line_to_chat{};
}; };
}; };
#ACTION {^(Priests) %1 wisps{:|} %2} {
#if {"$talker_log_toggle" == "1"} {
#return @log_line_to_chat{};
};
};
#ACTION {^(Pishe) %1 wisps{:|} %2} {
#if {"$talker_log_toggle" == "1"} {
#return @log_line_to_chat{};
};
};
#ACTION {^(Witches) %1 wisps{:|} %2} {
#if {"$talker_log_toggle" == "1"} {
#return @log_line_to_chat{};
};
};
#ACTION {^(Igame) %1 wisps{:|} %2} { #ACTION {^(Igame) %1 wisps{:|} %2} {
#if {"$talker_log_toggle" == "1"} { #if {"$talker_log_toggle" == "1"} {
#return @log_line_to_chat{}; #return @log_line_to_chat{};
@ -65,11 +52,11 @@
#ALIAS {talker log %1} { #ALIAS {talker log %1} {
#if {"%1" == "on"} { #if {"%1" == "on"} {
#echo {<acf>[<fff>talker<acf>] Now logging talker chat to monitor.<099>}; #echo {<149>[Talker] Now logging talker chat to monitor.<099>};
#var {talker_log_toggle} {1}; #var {talker_log_toggle} {1};
}; };
#if {"%1" == "off"} { #if {"%1" == "off"} {
#echo {<acf>[<fff>talker<acf>] No longer logging talker chat to monitor.<099>}; #echo {<149>[Talker] No longer logging talker chat to monitor.<099>};
#var {talker_log_toggle} {0}; #var {talker_log_toggle} {0};
}; };
}; };

View File

@ -1,131 +1,50 @@
#CLASS {combat} {kill}; #CLASS {combat} {kill};
#CLASS {combat} {open}; #CLASS {combat} {open};
#nop == Colors ==; #VARIABLE {my_attacks_color} {orange};
#VARIABLE {color_special_prep} {<afb>}; #VARIABLE {enemy_attack_color} {red};
#VARIABLE {color_special_fail} {<eaa>};
#VARIABLE {color_melee_out_fail} {<fec>}; #NOP ==[My Specials]==
#VARIABLE {color_melee_out_success} {<cda>}; #HIGHLIGHT {^You attempt to prepare %1} {bold red};
#VARIABLE {color_special_out_fail} {<eaa>}; #HIGHLIGHT {^You prepare to {stab|slice|trip|shove|impale|kick|punch} %2} {bold green};
#VARIABLE {color_special_out_success} {<bfa>}; #HIGHLIGHT {^You attempt to launch a powerful attack. %1} {bold red};
#HIGHLIGHT {^You launch a powerful attack. %1} {bold green};
#VARIABLE {color_melee_inc_fail} {<bcb>}; #HIGHLIGHT {^You launch a powerful attack, landing a %1} {bold green};
#VARIABLE {color_melee_inc_success} {<baa>}; #HIGHLIGHT {^You try to {trip|shove} %1} {bold red};
#VARIABLE {color_special_inc_fail} {<fca>}; #HIGHLIGHT {^You shove %1} {bold green};
#VARIABLE {color_special_inc_success} {<faa>}; #HIGHLIGHT {^You trip %1} {bold green};
#HIGHLIGHT {^You lose the moment.} {bold red};
#VARIABLE {color_melee_third_fail} {<bbc>};
#VARIABLE {color_melee_third_success} {<bbb>};
#VARIABLE {color_special_third_fail} {<bbd>};
#VARIABLE {color_special_third_success} {<cbb>};
#nop Hash marks are 110 and 148 characters, typical widths for me #NOP ==[Backstabs]==
#HIGHLIGHT {^12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890#234567890123456789012345678901234567#90}; #HIGHLIGHT {^You {skilfully |silently |}sneak around %1 without being spotted and manage to %2.$} {bold green};
#HIGHLIGHT {^You hold your cover as you {skillfully |silently |}sneak around %1 and manage to catch %w by surprise.$} {bold green};
#nop ==[My Specials]== #HIGHLIGHT {^You %1 with %2 but despite the surprise %3.$} {bold red} {2};
#nop special prep; #HIGHLIGHT {^Moving {swiftly|quickly|too fast to see}, you %1 {with|right through} %2.$} {bold green};
#HIGHLIGHT {^You prepare to {bash|beat|chop|feint|hack|kick|pierce|punch|riposte|shove|slash|smash|stab|trip|crush|behead|impale|flick|launch a wildswing attack} %1} {$color_special_prep}; #HIGHLIGHT {^Catching %w {by surprise|off balance}, you %1 {with|right through} %2.$} {bold green};
#nop special fail; #HIGHLIGHT {^With {a blur of speed|surprising speed}, you %1 {with|right through} %2.$} {bold green};
#HIGHLIGHT {^You attempt to prepare a special attack but {(?:\w+\b\W*?){1,8}} feels too unwieldy and you lose the initiative.$} {$color_special_fail}; #HIGHLIGHT {^Quick as lightning, you %1 {with|right through} %2.$} {bold green};
#nop special out fail; #HIGHLIGHT {Striking like a cobra, you %1 {with|right through} %2.$} {bold green};
#HIGHLIGHT {^You attempt to launch a powerful attack. %1} {$color_special_out_fail};
#HIGHLIGHT {^You attempt to {shove|trip} %2, but cannot find an opportunity} {$color_special_out_fail};
#HIGHLIGHT {^You try to {trip |shove }{(?:\w+\b\W*?){1,8}} but fail %3} {$color_special_out_fail};
#HIGHLIGHT {^You lose the moment\.$} {$color_special_out_fail};
#HIGHLIGHT {^You move as though about to launch a powerful attack on {(?:\w+\b\W*?){1,8}}\. {?>He|She|It} sees through your feint and doesn't react\.$} {$color_special_out_fail};
#nop special out success;
#HIGHLIGHT {^You launch a powerful attack{.|,} %1} {$color_special_out_success};
#HIGHLIGHT {^You {shove|trip} {(?!the corpse of).+}} {$color_special_out_success};
#HIGHLIGHT {^You move as though about to launch a powerful attack on %1\. {She|He|It} falls for your feint, leaving %3} {$color_special_out_success};
#nop ==[Backstabs]== #NOP ==[Me Attacking Them]==
#HIGHLIGHT {^You %1 with %2 but despite the surprise %3.$} {$color_special_out_fail} {2}; #HIGHLIGHT {^You {viciously |messily |barely |neatly |}{thrust|snick|fillet|poke|chop up|chop|jab|scratch|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer|take} {a sliver off |into |}%1{'?s?} %2 {on|with} %3} {$my_attacks_color};
#HIGHLIGHT {^You {skilfully |silently |}sneak around %1 without being spotted and manage to %2.$} {$color_special_out_success}; #HIGHLIGHT {^You {viciously |messily |barely |neatly |}stab %1 {deeply |}in %2 with %3} {$my_attacks_color};
#HIGHLIGHT {^You hold your cover as you {skillfully |silently |}sneak around %1 and manage to catch %w by surprise.$} {$color_special_out_success}; #HIGHLIGHT {^You stab %1 right through %2's %3} {$my_attacks_color};
#HIGHLIGHT {^Moving {swiftly|quickly|too fast to see}, you %1 {with|right through} %2.$} {$color_special_out_success}; #HIGHLIGHT {^You {viciously |messily |barely |neatly |}{poke|kick|punch|jab|boot|tickle|kick out} %1 in %2} {$my_attacks_color};
#HIGHLIGHT {^Catching %w {by surprise|off balance}, you %1 {with|right through} %2.$} {$color_special_out_success}; #HIGHLIGHT {^You {punch|kick out} at %1 but {his|her} %2 absorbs {some|most} of the blow\.$} {$my_attacks_color};
#HIGHLIGHT {^With {a blur of speed|surprising speed}, you %1 {with|right through} %2.$} {$color_special_out_success};
#HIGHLIGHT {^Quick as lightning, you %1 {with|right through} %2.$} {$color_special_out_success};
#HIGHLIGHT {Striking like a cobra, you %1 {with|right through} %2.$} {$color_special_out_success};
#nop ==[Me Attacking Them]== #NOP == [Them Attacking Me]==
#HIGHLIGHT {^You {thrust|slash|swing} at %1 with {one of }your %2 but{,?} %3} {$color_melee_out_fail}; #HIGHLIGHT {%1 but your %2 absorbs {some|most} of the blow.$} {$enemy_attack_color};
#HIGHLIGHT {^You {tap |bruise |smash |viciously |messily |barely |neatly |}{snick|fillet|poke|chop up|chop|jab|scratch|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer|take} {a sliver off |into |}%1{'?s?} %2 {on|with} %3} {$color_melee_out_success}; #HIGHLIGHT {%1 runs you through the %2 with %3.$} {$enemy_attack_color};
#HIGHLIGHT {^You slice your %1 {deeply |}into %2's %3.$}; #HIGHLIGHT {%1 {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s %w %3 into your %4.$} {$enemy_attack_color};
#HIGHLIGHT {^You {viciously |messily |barely |neatly |}stab %1 {deeply |}in %2 with %3} {$color_melee_out_success}; #HIGHLIGHT {%1 {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s your %2 {into pieces |}{with|on} %w %4.$} {$enemy_attack_color};
#HIGHLIGHT {^You beat %1 to a pulp\.$} {$color_melee_out_success}; #HIGHLIGHT {%1 {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s into your %2 with %w %3.$} {$enemy_attack_color};
#HIGHLIGHT {^You stab %1 right through %2's %3} {$color_melee_out_success}; #HIGHLIGHT {%1 {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s you {deeply |}in the %2.$} {$enemy_attack_color};
#HIGHLIGHT {^You {viciously |messily |barely |neatly |}{poke|kick|punch|jab|boot|tickle|kick out} %1 in %2} {$color_melee_out_success}; #HIGHLIGHT {%1 {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s you {deeply |}in the %2 with %3.$} {$enemy_attack_color};
#HIGHLIGHT {^You {punch|kick out} at %1 but {his|her} %2 absorbs {some|most} of the blow\.$} {$color_melee_out_success}; #HIGHLIGHT {%1 pierces your %2 with %3.$} {$enemy_attack_color};
#HIGHLIGHT {%1 hitting your %2.$} {$enemy_attack_color};
#nop ==[Their Specials At Me]==
#nop specials incoming failures;
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} reaches for you and stumbles.$} {$color_special_inc_fail};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} {trips|shoves} you, causing you to stumble slightly before regaining your balance.$} {$color_special_inc_fail};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} moves as though about to launch a powerful attack but you realise it is a feint and do not react\.$} {$color_special_inc_fail};
#HIGHLIGHT {^You suddenly {?>sense a presence|hear a noise} behind you and turn around to {?>see|find} {(?:\w+\b\W*?){1,8}} preparing to backstab you\. %4} {$color_special_inc_fail};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} attempts to launch a powerful attack. %2 at you {(with (his|her|its) .+)?}but %3} {$color_special_inc_fail};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} attempts to launch a powerful attack, landing %2 but {you|your} %3} {$color_special_inc_fail};
#HIGHLIGHT {^{(?!You )(?:\w+\b\W*?){1,8}} launches a powerful attack{\. |,} {.*} you {.*} but you{r?} {(?!\w+ skin).+}} {$color_special_inc_fail};
#nop specials incoming success;
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} moves as though about to launch a powerful attack and you prepare to defend yourself\. Too{.*}} {$color_special_inc_success};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} attacks you from behind\. You recall {?>him|her|it} standing right in front of you just a second ago\.$} {$color_special_inc_success};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} launches a powerful attack{\. |,} {(?!.*but).*} you{r?} {(?!.*but).*}} {$color_special_inc_success};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} launches a powerful attack{\. |,} {.*} you {.*} but your {.*} skin{.*}} {$color_special_inc_success};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} {trips|shoves} you, {causing you to stumble|sending you crashing to the ground}.$} {$color_special_inc_success};
#nop ==[Them Attacking Me]==
#nop melee incoming fail
#HIGHLIGHT {^{?:(?!(You|.* powerful) )(.*)} {at|to gore|on|bite} you {(with (one of )?(?:his|her|its) .* )?}but{( despite the surprise)?, although unable to defend, | }you{r?} {((?!.* skin ).*)}} {$color_melee_inc_fail};
#nop melee incoming success
#HIGHLIGHT {^{(?!(You|.* powerful) )(\w+\b\W*?){1,8}} {visciously |messily |barely |neatly |}{crushe|strike|batter|smashe|bruise|ventilate|poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer|punche|spike}s you {(deeply )?}in the {.*} with {(one of )?}{his|her|its} {.*} but your {.*} skin{.*}} {$color_melee_inc_success};
#HIGHLIGHT {^{(?!(You|.* powerful) )(\w+\b\W*?){1,8}} {visciously |messily |barely |neatly |}{crushe|strike|batter|smashe|bruise|ventilate|poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer|punche|spike}s you {deeply |}in the {.*} with {(one of )?}{his|her|its} {(?!.* but).*}} {$color_melee_inc_success};
#nop #HIGHLIGHT {{?:(?!powerful )(?:\w\+\b\W*?){1,8}} {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s %w %3 into your %4.$} {$color_melee_inc_success};
#nop #HIGHLIGHT {{?:(?!powerful )(?:\w\+\b\W*?){1,8}} {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s your %2 {into pieces |}{with|on} %w %4.$} {$color_melee_inc_success};
#nop #HIGHLIGHT {{?:(?!powerful )(?:\w\+\b\W*?){1,8}} {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s into your %2 with %w %3.$} {$color_melee_inc_success};
#nop #HIGHLIGHT {{?:(?!powerful )(?:\w\+\b\W*?){1,8}} {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s you {deeply |}in the %2.$} {$color_melee_inc_success};
#nop #HIGHLIGHT {{?:(?!powerful )(?:\w\+\b\W*?){1,8}} {viciously |messily |barely |neatly |}{poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer}s you {deeply |}in the %2 with %3.$} {$color_melee_inc_success};
#HIGHLIGHT {%1 runs you through the %2 with %3.$} {$color_melee_inc_success};
#nop ==[Specials Not Directed At Me]==
#nop specials third fail
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} moves towards {?:(?!you )(?:\w+\b\W*?){1,8}} as though about to launch a powerful attack\. {?:(?!You )(?:\w+\b\W*?){1,8}} does not react, %4} {$color_special_third_fail};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} reaches for {?:(?!you )(?:\w+\b\W*?){1,8}} and stumbles\.$} {$color_special_third_fail};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} attempts to launch a powerful attack. %2 at {?:(?!you )(.*)}} {$color_special_third_fail};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} launches a powerful attack{\. |,} {?:(?!.*(Y|y)ou )(.*)} but {his|her|its|he|she|it} {(?!.*skin).*}} {$color_special_third_fail};
#nop specials third success
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} launches a powerful attack{\. |,} {(?!.*((Y|y)ou|but) )(.*)}} {$color_special_third_success};
#HIGHLIGHT {^{?:(?!You )(?:\w+\b\W*?){1,8}} launches a powerful attack{\. |,} {?:(?!.*(Y|y)ou )(.*)} but {his|her|its|he|she|it} {.*} skin{.*}} {$color_special_third_success};
#nop ==[Attacks Not Directed At Me]==
#nop melee third fail
#HIGHLIGHT {^{?:(?!(You |.+powerful))(?:\w+\b\W*?){1,8}}{(?!.+powerful)(.+)} {crushe|strike|batter|smashe|bruise|ventilate|poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer|punche|spike|swing}s {((his|her|its).+)?}at {?:(?!(You |.+powerful))(?:\w+\b\W*?){1,8}} but {(?!.+ skin)}{.*}} {$color_melee_third_fail};
#HIGHLIGHT {^{?:(?!(You |.+powerful))(?:\w+\b\W*?){1,8}}{(?!.+powerful)(.+)} {thrust|swing|slashe}s {(his|her|its).*}?at {?:(?!You )(.*)} but{,?} {(?!.+ skin)}{.+}} {$color_melee_third_fail};
#nop melee third success
#HIGHLIGHT {^{(?!.+powerful).+} {crushe|strike|batter|smashe|bruise|ventilate|poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer|punche|spike}s {his|her|its} %4 {across|into} %6} {$color_melee_third_success};
#HIGHLIGHT {^{(?!.+powerful).+} {crushe|strike|batter|smashe|bruise|ventilate|poke|chop|jab|scratche|boot|kick|hit|tickle|hack|prick|shred|nick|cut|stab|perforate|pierce|impale|slice|skewer|punche|spike}s %3 {with|on} %5} {$color_melee_third_success};
#HIGHLIGHT {{?:(?!You )(?:\w+\b\W*?){1,8}} runs %2 through %3 with {his|her|its} %4} {$color_melee_third_success};
#HIGHLIGHT {{?:(?!You )(?:\w+\b\W*?){1,8}} takes a sliver off %2 with {his|her|its} %3} {$color_melee_third_success};
#nop ===== DOCUMENTING ISSUES TO FIX LATER =====;
#nop A burnt torch is hanging from a stall and a pair of plain leather boots is on the ground.;
#nop A green wool shirt, a pair of hard leather boots and a pair of heavy cotton breeches are on the ground.;
#nop A pair of heavy socks, a pair of hard leather boots and a pair of heavy cotton breeches are on the ground.;
#nop A pair of plain leather boots is on the ground.;
#nop A street lamp is here and a pair of light grey kidskin ladies' boots is on the ground.;
#nop The Grand Wizard clock strikes the half-hour with a deep, rolling chime that sounds like a death knell.;
#nop ===========================================;
#nop == BELOW IS UNHIGHLIGHTED BUT SHOULD BE ==;
#nop You attempt to punch Arlof Eetmmot but you move too slowly and lose the initiative.;
#CLASS {combat} {close}; #CLASS {combat} {close};

View File

@ -97,7 +97,7 @@
#list {last_query_list} {clear}; #list {last_query_list} {clear};
#if {$gatherable_result_size > 0} { #if {$gatherable_result_size > 0} {
#format {gatherable_display} {%cResults for gatherables matching "%c%s%c":<099>} {Azure}{Yellow}{%1}{Azure}; #format {gatherable_display} {%cResults for gatherables matching "%c%s%c":} {bold blue}{yellow}{%1}{bold blue};
#echo {$gatherable_display}; #echo {$gatherable_display};
#var {gather_count} {0}; #var {gather_count} {0};
@ -113,14 +113,14 @@
{map_name}{$map_id_names[$gatherable_results[4]]} {map_name}{$map_id_names[$gatherable_results[4]]}
}; };
#format {gatherable_display} {%c [%c%d%c]: %c%s%c found in %c%s%c,%c %s%c<099>} {Azure}{Cyan}{$gather_count}{Azure}{Green}{$gatherable_info[item_name]}{Azure}{Orange}{$gatherable_info[room_short]}{Azure}{Orange}{$gatherable_info[map_name]}{Azure}; #format {gatherable_display} {%c [%c%d%c]: %c%s%c found in %c%s%c,%c %s%c} {bold blue}{cyan}{$gather_count}{bold blue}{green}{$gatherable_info[item_name]}{bold blue}{orange}{$gatherable_info[room_short]}{bold blue}{orange}{$gatherable_info[map_name]}{bold blue};
#echo {$gatherable_display}; #echo {$gatherable_display};
#variable {last_query_list[$gather_count]} {$gatherable_info}; #variable {last_query_list[$gather_count]} {$gatherable_info};
#math {gather_count} {$gather_count + 1}; #math {gather_count} {$gather_count + 1};
} }
} { } {
#format {gatherable_display} {%cQuery Result: %c%s%c was not found.<099>} {Azure}{Green}{%1}{Azure}; #format {gatherable_display} {%cQuery Result: %c%s%c was not found.} {bold blue}{green}{%1}{bold blue};
#echo {$gatherable_display}; #echo {$gatherable_display};
} }
} }
@ -134,12 +134,12 @@
#nop If we found an area name in curly braces, try to match a map-set; #nop If we found an area name in curly braces, try to match a map-set;
#var {search_map} {@map_parse{%4}}; #var {search_map} {@map_parse{%4}};
#if {&{map_term}} { #if {&map_term} {
#format {query} {SELECT npc_name, rooms.map_id, rooms.room_id, rooms.room_short, INSTR(npc_name, '%s') pos FROM npc_info INNER JOIN rooms on rooms.room_id = npc_info.room_id WHERE pos > 0 AND rooms.map_id IN (%s) LIMIT 10} {$search_term} {$map_term}; #format {query} {SELECT npc_name, rooms.map_id, rooms.room_id, rooms.room_short, INSTR(npc_name, '%s') pos FROM npc_info INNER JOIN rooms on rooms.room_id = npc_info.room_id WHERE pos > 0 AND rooms.map_id IN (%s) LIMIT 10} {$search_term} {$map_term};
}; };
#else { #else {
#format {query} {SELECT npc_name, rooms.map_id, rooms.room_id, rooms.room_short, INSTR(npc_name, '%s') pos FROM npc_info INNER JOIN rooms on rooms.room_id = npc_info.room_id WHERE pos > 0 LIMIT 10} {$search_term}; #format {query} {SELECT npc_name, rooms.map_id, rooms.room_id, rooms.room_short, INSTR(npc_name, '%s') pos FROM npc_info INNER JOIN rooms on rooms.room_id = npc_info.room_id WHERE pos > 0 LIMIT 10} {$search_term};
}; }
#format {db_command} {sqlite3 -separator ";" src/quow.db "%s"} {$query}; #format {db_command} {sqlite3 -separator ";" src/quow.db "%s"} {$query};
#script {npc_query_result} {$db_command}; #script {npc_query_result} {$db_command};
@ -148,7 +148,7 @@
#list {last_query_list} {clear}; #list {last_query_list} {clear};
#if {$npc_result_size > 0} { #if {$npc_result_size > 0} {
#format {npc_display} {%cResults for NPCs matching "%c%s%c":<099>} {Azure}{Yellow}{%1}{Azure}; #format {npc_display} {%cResults for NPCs matching "%c%s%c":} {bold blue}{yellow}{%1}{bold blue};
#echo {$npc_display}; #echo {$npc_display};
#var {npc_count} {0}; #var {npc_count} {0};
@ -164,14 +164,14 @@
{room_short}{$npc_results[4]} {room_short}{$npc_results[4]}
}; };
#format {npc_display} {%c [%c%d%c]: %c%s%c found in %c%s%c,%c %s%c<099>} {Azure}{Cyan}{$npc_count}{Azure}{Green}{$npc_info[npc_name]}{Azure}{Orange}{$npc_info[room_short]}{Azure}{Orange}{$npc_info[map_name]}{Azure}; #format {npc_display} {%c [%c%d%c]: %c%s%c found in %c%s%c,%c %s%c} {bold blue}{cyan}{$npc_count}{bold blue}{green}{$npc_info[npc_name]}{bold blue}{orange}{$npc_info[room_short]}{bold blue}{orange}{$npc_info[map_name]}{bold blue};
#echo {$npc_display}; #echo {$npc_display};
#variable {last_query_list[$npc_count]} {$npc_info}; #variable {last_query_list[$npc_count]} {$npc_info};
#math {npc_count} {$npc_count + 1}; #math {npc_count} {$npc_count + 1};
} }
} { } {
#format {npc_display} {%cQuery Result: %c%s%c was not found.<099>} {Azure}{Green}{%1}{Azure}; #format {npc_display} {%cQuery Result: %c%s%c was not found.} {bold blue}{green}{%1}{bold blue};
#echo {$npc_display}; #echo {$npc_display};
} }
}; };
@ -185,12 +185,12 @@
#nop If we found an area name in curly braces, try to match a map-set; #nop If we found an area name in curly braces, try to match a map-set;
#var {search_map} {@map_parse{%4}}; #var {search_map} {@map_parse{%4}};
#if {&{map_term}} { #if {&map_term} {
#format {query} {SELECT npc_info.map_id, npc_name, npc_info.room_id, item_name, room_short, INSTR(item_name, '%s') pos FROM 'npc_info' INNER JOIN npc_items ON npc_items.npc_id = npc_info.npc_id INNER JOIN rooms on npc_info.room_id = rooms.room_id WHERE pos > 0 AND rooms.map_id IN (%s) LIMIT 10} {$search_term} {$map_term}; #format {query} {SELECT npc_info.map_id, npc_name, npc_info.room_id, item_name, room_short, INSTR(item_name, '%s') pos FROM 'npc_info' INNER JOIN npc_items ON npc_items.npc_id = npc_info.npc_id INNER JOIN rooms on npc_info.room_id = rooms.room_id WHERE pos > 0 AND rooms.map_id IN (%s) LIMIT 10} {$search_term} {$map_term};
}; };
#else { #else {
#format {query} {SELECT npc_info.map_id, npc_name, npc_info.room_id, item_name, room_short, INSTR(item_name, '%s') pos FROM 'npc_info' INNER JOIN npc_items ON npc_items.npc_id = npc_info.npc_id INNER JOIN rooms on npc_info.room_id = rooms.room_id WHERE pos > 0 LIMIT 10} {$search_term}; #format {query} {SELECT npc_info.map_id, npc_name, npc_info.room_id, item_name, room_short, INSTR(item_name, '%s') pos FROM 'npc_info' INNER JOIN npc_items ON npc_items.npc_id = npc_info.npc_id INNER JOIN rooms on npc_info.room_id = rooms.room_id WHERE pos > 0 LIMIT 10} {$search_term};
}; }
#format {db_command} {sqlite3 -separator ";" src/quow.db "%s"} {$query}; #format {db_command} {sqlite3 -separator ";" src/quow.db "%s"} {$query};
#script {npcitem_query_result} {$db_command}; #script {npcitem_query_result} {$db_command};
@ -199,7 +199,7 @@
#list {last_query_list} {clear}; #list {last_query_list} {clear};
#if {$npcitem_result_size > 0} { #if {$npcitem_result_size > 0} {
#format {npcitem_display} {%cResults for NPC items matching "%c%s%c":<099>} {Azure}{Yellow}{%1}{Azure}; #format {npcitem_display} {%cResults for NPC items matching "%c%s%c":} {bold blue}{yellow}{%1}{bold blue};
#echo {$npcitem_display}; #echo {$npcitem_display};
#var {npcitem_count} {0}; #var {npcitem_count} {0};
@ -216,14 +216,14 @@
{room_short}{$npcitem_results[5]} {room_short}{$npcitem_results[5]}
}; };
#format {npcitem_display} {%c [%c%d%c]: %c%s%c found on %c%s%c in %c%s%c,%c %s%c<099>} {Azure}{Cyan}{$npcitem_count}{Azure}{Green}{$npcitem_info[item_name]}{Azure}{White}{$npcitem_info[npc_name]}{Azure}{Orange}{$npcitem_info[room_short]}{Azure}{Orange}{$npcitem_info[map_name]}{Azure}; #format {npcitem_display} {%c [%c%d%c]: %c%s%c found on %c%s%c in %c%s%c,%c %s%c} {bold blue}{cyan}{$npcitem_count}{bold blue}{green}{$npcitem_info[item_name]}{bold blue}{white}{$npcitem_info[npc_name]}{bold blue}{orange}{$npcitem_info[room_short]}{bold blue}{orange}{$npcitem_info[map_name]}{bold blue};
#echo {$npcitem_display}; #echo {$npcitem_display};
#variable {last_query_list[$npcitem_count]} {$npcitem_info}; #variable {last_query_list[$npcitem_count]} {$npcitem_info};
#math {npcitem_count} {$npcitem_count + 1}; #math {npcitem_count} {$npcitem_count + 1};
} }
} { } {
#format {npcitem_display} {%cQuery Result: %c%s%c was not found.<099>} {Azure}{Green}{%1}{Azure}; #format {npcitem_display} {%cQuery Result: %c%s%c was not found.} {bold blue}{green}{%1}{bold blue};
#echo {$npcitem_display}; #echo {$npcitem_display};
} }
}; };
@ -237,12 +237,12 @@
#nop If we found an area name in curly braces, try to match a map-set; #nop If we found an area name in curly braces, try to match a map-set;
#var {search_map} {@map_parse{%4}}; #var {search_map} {@map_parse{%4}};
#if {&{map_term}} { #if {&map_term} {
#format {query} {SELECT item_name, sale_price, room_short, shop_items.room_id, map_id, INSTR(item_name, '%s') pos FROM shop_items INNER JOIN rooms on rooms.room_id = shop_items.room_id WHERE pos > 0 AND sale_price != 'gather' AND map_id IN (%s) LIMIT 10;} {$search_term} {$map_term}; #format {query} {SELECT item_name, sale_price, room_short, shop_items.room_id, map_id, INSTR(item_name, '%s') pos FROM shop_items INNER JOIN rooms on rooms.room_id = shop_items.room_id WHERE pos > 0 AND sale_price != 'gather' AND map_id IN (%s) LIMIT 10;} {$search_term} {$map_term};
}; };
#else { #else {
#format {query} {SELECT item_name, sale_price, room_short, shop_items.room_id, map_id, INSTR(item_name, '%s') pos FROM shop_items INNER JOIN rooms on rooms.room_id = shop_items.room_id WHERE pos > 0 AND sale_price != 'gather' LIMIT 10;} {$search_term}; #format {query} {SELECT item_name, sale_price, room_short, shop_items.room_id, map_id, INSTR(item_name, '%s') pos FROM shop_items INNER JOIN rooms on rooms.room_id = shop_items.room_id WHERE pos > 0 AND sale_price != 'gather' LIMIT 10;} {$search_term};
}; }
#format {db_command} {sqlite3 -separator ";" src/quow.db "%s"} {$query}; #format {db_command} {sqlite3 -separator ";" src/quow.db "%s"} {$query};
#script {item_query_result} {$db_command}; #script {item_query_result} {$db_command};
@ -251,7 +251,7 @@
#list {last_query_list} {clear}; #list {last_query_list} {clear};
#if {$item_result_size > 0} { #if {$item_result_size > 0} {
#format {item_display} {%cResults for items matching "%c%s%c":<099>} {Azure}{Yellow}{%1}{Azure}; #format {item_display} {%cResults for items matching "%c%s%c":} {bold blue}{yellow}{%1}{bold blue};
#echo {$item_display}; #echo {$item_display};
#var {item_count} {0}; #var {item_count} {0};
@ -268,14 +268,14 @@
{map_name}{$map_id_names[$item_results[5]]} {map_name}{$map_id_names[$item_results[5]]}
}; };
#format {item_display} {%c [%c%d%c]: %c%s%c (%c%s%c) found in %c%s%c,%c %s%c<099>} {Azure}{Cyan}{$item_count}{Azure}{Green}{$item_info[item_name]}{Azure}{Yellow}{$item_info[sale_price]}{Azure}{Orange}{$item_info[room_short]}{Azure}{Orange}{$item_info[map_name]}{Azure}; #format {item_display} {%c [%c%d%c]: %c%s%c (%c%s%c) found in %c%s%c,%c %s%c} {bold blue}{cyan}{$item_count}{bold blue}{green}{$item_info[item_name]}{bold blue}{yellow}{$item_info[sale_price]}{bold blue}{orange}{$item_info[room_short]}{bold blue}{orange}{$item_info[map_name]}{bold blue};
#echo {$item_display}; #echo {$item_display};
#variable {last_query_list[$item_count]} {$item_info}; #variable {last_query_list[$item_count]} {$item_info};
#math {item_count} {$item_count + 1}; #math {item_count} {$item_count + 1};
}; };
} { } {
#format {item_display} {%cQuery Result: %c%s%c was not found.<099>} {Azure}{Green}{%1}{Azure}; #format {item_display} {%cQuery Result: %c%s%c was not found.} {bold blue}{green}{%1}{bold blue};
#echo {$item_display}; #echo {$item_display};
}; };
}; };
@ -289,12 +289,12 @@
#nop If we found an area name in curly braces, try to match a map-set; #nop If we found an area name in curly braces, try to match a map-set;
#var {search_map} {@map_parse{%4}}; #var {search_map} {@map_parse{%4}};
#if {&{map_term}} { #if {&map_term} {
#format {query} {SELECT room_id, map_id, room_short, room_type, INSTR(room_short, '%s') pos FROM rooms WHERE pos > 0 AND map_id IN (%s) LIMIT 10;} {$search_term} {$map_term}; #format {query} {SELECT room_id, map_id, room_short, room_type, INSTR(room_short, '%s') pos FROM rooms WHERE pos > 0 AND map_id IN (%s) LIMIT 10;} {$search_term} {$map_term};
}; };
#else { #else {
#format {query} {SELECT room_id, map_id, room_short, room_type, INSTR(room_short, '%s') pos FROM rooms WHERE pos > 0 LIMIT 10;} {$search_term}; #format {query} {SELECT room_id, map_id, room_short, room_type, INSTR(room_short, '%s') pos FROM rooms WHERE pos > 0 LIMIT 10;} {$search_term};
}; }
#format {db_command} {sqlite3 -separator ";" src/quow.db "%s"} {$query}; #format {db_command} {sqlite3 -separator ";" src/quow.db "%s"} {$query};
#script {room_query_result} {$db_command}; #script {room_query_result} {$db_command};
@ -303,7 +303,7 @@
#list {last_query_list} {clear}; #list {last_query_list} {clear};
#if {$room_result_size > 0} { #if {$room_result_size > 0} {
#format {room_display} {%cResults for items items matching "%c%s%c":<099>} {Azure}{Yellow}{%1}{Azure}; #format {room_display} {%cResults for items items matching "%c%s%c":} {bold blue}{yellow}{%1}{bold blue};
#echo {$room_display}; #echo {$room_display};
#var {room_count} {0}; #var {room_count} {0};
@ -319,14 +319,14 @@
{room_type}{$room_results[4]} {room_type}{$room_results[4]}
}; };
#format {room_display} {%c [%c%d%c]: %c%s%c (%c%s%c) found in %c%s%c<099>} {Azure}{Cyan}{$room_count}{Azure}{Green}{$room_info[room_short]}{Azure}{Yellow}{$room_info[room_type]}{Azure}{Orange}{$room_info[map_name]}{Azure}; #format {room_display} {%c [%c%d%c]: %c%s%c (%c%s%c) found in %c%s%c} {bold blue}{cyan}{$room_count}{bold blue}{green}{$room_info[room_short]}{bold blue}{yellow}{$room_info[room_type]}{bold blue}{orange}{$room_info[map_name]}{bold blue};
#echo {$room_display}; #echo {$room_display};
#variable {last_query_list[$room_count]} {$room_info}; #variable {last_query_list[$room_count]} {$room_info};
#math {room_count} {$room_count + 1}; #math {room_count} {$room_count + 1};
} }
} { } {
#format {room_display} {%cQuery Result: %c%s%c was not found.<099>} {Azure}{Green}{%1}{Azure}; #format {room_display} {%cQuery Result: %c%s%c was not found.} {bold blue}{green}{%1}{bold blue};
#echo {$room_display}; #echo {$room_display};
}; };
}; };
@ -334,20 +334,21 @@
#ALIAS {db route %1} { #ALIAS {db route %1} {
#if {&last_query_list[%1]} { #if {&last_query_list[%1]} {
#var {target_room} {$last_query_list[%1]}; #var {target_room} {$last_query_list[%1]};
#format {route_display} {<acf>[<fff>speedwalk<acf>] Generating speedwalk from current location to %c%s<acf>, %c%s<acf>...<099>} {Green}{$target_room[room_short]}{Orange}{$target_room[map_name]}; #format {route_display} {%c[speedwalk] Generating speedwalk from current location to %c%s%c, %c%s%c...} {bold blue}{green}{$target_room[room_short]}{bold blue}{orange}{$target_room[map_name]}{bold blue};
#echo {$route_display}; #echo {$route_display};
#var {route_current_room_id} {$GMCP[room][info][identifier]}; #var {route_current_room_id} {$GMCP[room][info][identifier]};
#var {route_target_room_id} {$target_room[room_id]}; #var {route_target_room_id} {$target_room[room_id]};
#format {route_command} {python3 src/maproute.py %s %s} {$route_current_room_id} {$route_target_room_id}; #format {route_command} {python src/maproute.py %s %s} {$route_current_room_id} {$route_target_room_id};
#script {speedwalk_result} {$route_command}; #script {speedwalk_result} {$route_command};
#if {"$speedwalk_result[1]" == "0"} { #if {"$speedwalk_result[1]" == "0"} {
#format {route_error} {<acf>[<fff>speedwalk<acf>] Unable to find route to %c%s<acf> or unknown current room.<099>} {Green}{$target_room[room_short]}; #format {route_error} {%c[speedwalk] Unable to find route to %c%s%c or unknown current room.} {bold blue}{green}{$target_room[room_short]}{bold blue};
#echo {$route_error}; #echo {$route_error};
#return; #return;
}; }
#send {$speedwalk_result[1]}; #send {$speedwalk_result[1]};
#variable {route_length} {$speedwalk_result[1]}; #variable {route_length} {$speedwalk_result[1]};
@ -356,62 +357,16 @@
#list {route_length} {create} {$route_length}; #list {route_length} {create} {$route_length};
#list {route_length} {size} {route_length}; #list {route_length} {size} {route_length};
#format {route_confirm} {<acf>[<fff>speedwalk<acf>] A route was found, type "%cspeedwalk<acf>" to fast travel. [%c%g<acf> steps]<099>} {Green}{Cyan}{$route_length}; #format {route_confirm} {%c[speedwalk] A route was found, type "%cspeedwalk%c" to fast travel. [%g steps]} {bold blue}{green}{bold blue}{$route_length};
#echo {$route_confirm}; #echo {$route_confirm};
} { } {
#format {route_display} {<acf>[<fff>speedwalk<acf>] No previous query data found, try searching first.<099>}; #format {route_display} {%c[speedwalk] No previous query data found, try searching first.} {bold blue};
#echo {$route_display}; #echo {$route_display};
}; }
}; };
#ALIAS {speedwalk} { #ALIAS {speedwalk} {
#send {RuhsSpeedRun}; #send {RuhsSpeedRun};
} }
#ALIAS {db routeto %1} {
#var {target_room} {%1};
#format {route_display} {<acf>[<fff>speedwalk<acf>] Generating speedwalk from current location to specified id <cfa>%s<acf>.<099>} {%1};
#echo {$route_display};
#var {route_current_room_id} {$GMCP[room][info][identifier]};
#var {route_target_room_id} {%1};
#format {route_command} {python3 src/maproute.py %s %s} {$route_current_room_id} {$route_target_room_id};
#script {speedwalk_result} {$route_command};
#if {"$speedwalk_result[1]" == "0"} {
#format {route_error} {<acf>[<fff>speedwalk<acf>] Unable to find route to %c%s<acf> or unknown current room.<099>} {Green}{$target_room[room_short]};
#echo {$route_error};
#return;
};
#send {$speedwalk_result[1]};
#variable {route_length} {$speedwalk_result[1]};
#replace {route_length} {\\\;} {;};
#replace {route_length} { } {};
#list {route_length} {create} {$route_length};
#list {route_length} {size} {route_length};
#format {route_confirm} {<acf>[<ffF>speedwalk<acf>] A route was found, type %cspeedwalk<acf> to fast travel. [%c%g<acf> steps]<099>} {Green}{Cyan}{$route_length};
#echo {$route_confirm};
};
#ALIAS {^db$} {
#showme {<acf>[<fff>speedwalk<acf>] Try "<fab>db help<acf>" for usage instructions.<099>};
};
#ALIAS {db help} {
#showme {<acf>[<fff>speedwalk<acf>] Speedwalk and Database Lookup Commands:<099>};
#showme {\t<138>*<acf> "<bbd>db room <cfa><query><acf>" - search for a room by name<099>};
#showme {\t<138>*<acf> "<bbd>db item <cfa><query><acf>" - search for an item in shops by name<099>};
#showme {\t<138>*<acf> "<bbd>db npc <cfa><query><acf>" - search for an NPC by name<099>};
#showme {\t<138>*<acf> "<bbd>db npcitem <cfa><query><acf>" - search for an item in NPC inventories by name<099>};
#showme {\t<138>*<acf> "<bbd>db gatherable <cfa><query><acf>" - search for a gatherable item by name<099>};
#showme {<099>};
#showme {<acf>After searching with one of the above commands, find a route there with "<bbd>db route <cfa>#<acf>"<099>};
#showme {<acf>Then type "<fab>speedwalk<acf>" to start moving.<099>};
};
#CLASS {database} {close}; #CLASS {database} {close};

861
src/deadletter.tin Normal file
View File

@ -0,0 +1,861 @@
#CLASS {deadletter} {kill};
#CLASS {deadletter} {open};
#var {letter_difficulty} {none};
#VAR {difficult_customer_targets} {
{Triad Boss}{
{show}{Triad [Boss]}
{search}{Triad boss}
}
{Queen Shelox}{
{show}{Queen [Shelox]}
{search}{false}
}
{ice giants}{
{show}{Ice Giants}
{search}{false}
}
{Security guards}{
{show}{First Imperial Bank Security Guards}
{search}{false}
}
{Smuggler Captain}{
{show}{Smuggler Captain}
{search}{false}
}
{The Clown}{
{show}{Ha'pennywise the Clown}
{search}{false}
}
{Hotan Hwoar Ni}{
{show}{[Hotan] Hwoar Ni (Inner Snail)}
{search}{Hotan}
}
{Thursday}{
{show}{Thursday}
{search}{false}
}
{The Grflx}{
{show}{The [Grflx]}
{search}{false}
}
{Vyrt}{
{show}{Vyrt}
{search}{Vyrt}
}
{Bug}{
{show}{Bug, Ramtops}
{search}{false}
}
{Avalanche Preventore}{
{show}{Avalance Preventore, Endless Halls}
{search}{false}
}
};
#VAR {distant_land_targets} {
{Boy Willie}{
{show}{Boy [Willie]}
{search}{Willie}
}
{Disembowel-Meself-Honourably Dibhala}{
{show}{Disembowel-Meself-Honourably [Dibhala]}
{search}{false}
}
{Glod-san}{
{show}{[Glod-san]}
{search}{false}
}
{Laggy-san}{
{show}{[Laggy-san]}
{search}{false}
}
{Lon Fah Lo}{
{show}{Lon Fah [Lo]}
{search}{false}
}
{Mad Hamish}{
{show}{Mad [Hamish]}
{search}{false}
}
{No Go Wan}{
{show}{No Go [Wan]}
{search}{false}
}
{Quisoda}{
{show}{[Quisoda]}
{search}{false}
}
{Ruto of Fish}{
{show}{[Ruto] of Fish}
{search}{false}
}
{Ryattenoki}{
{show}{[Ryattenoki]}
{search}{false}
}
{Shi Do Gai}{
{show}{Shi Do [Gai]}
{search}{false}
}
{Lap-lip}{
{show}{[Lap-lip]}
{search}{false}
}
{Lip-phon Lap-top}{
{show}{Lip-phon [Lap-top]}
{search}{false}
}
{Mihk-gran-bohp}{
{show}{Mihk-gran-[bohp]}
{search}{false}
}
{Phos-phor}{
{show}{[Phos]-phor}
{search}{false}
}
{Very Reverend Khepresh}{
{show}{Very Reverend [Khepresh]}
{search}{false}
}
{Yclept}{
{show}{[Yclept]}
{search}{false}
}
{Tuffy}{
{show}{[Tuffy]}
{search}{false}
}
{Casanunda}{
{show}{[Casanunda]}
{search}{false}
}
{Greig Schwitz}{
{show}{Greig [Schwitz]}
{search}{false}
}
{Noobie}{
{show}{[Noobie]}
{search}{false}
}
{Tfat Chick}{
{show}{Tfat [Chick]}
{search}{false}
}
{Cut Me Own Hand Off Dhblah}{
{show}{Cut Me Own Hand Off [Dhblah]}
{search}{false}
}
{Miss Pennie Laced}{
{show}{Miss Pennie [Laced]}
{search}{false}
}
{Berti Boggis}{
{show}{[Berti] Boggis}
{search}{false}
}
{The Proprietor}{
{show}{The Proprietor}
{search}{false}
}
};
#VAR {far_away_targets} {
{Cern Smith}{
{show}{[Cern] Smith}
{search}{Cern Smith}
}
{Granny Weatherwax}{
{show}{Granny [Weatherwax]}
{search}{Weatherwax}
}
{Gulta Smith}{
{show}{[Gulta] Smith}
{search}{Gulta}
}
{Hanlo Shepston}{
{show}{[Hanlo] Shepston}
{search}{Hanlo}
}
{Jaims Smith}{
{show}{[Jaims] Smith}
{search}{Jaims}
}
{Kev Ogg}{
{show}{[Kev] Ogg}
{search}{Kev}
}
{Mr. Ogg}{
{show}{Mr. Ogg}
{search}{false}
}
{Martha Headlock}{
{show}{[Martha] Headlock}
{search}{Martha}
}
{Mrs Smith}{
{show}{Mrs Smith}
{search}{false}
}
{Cohen the Barbarian}{
{show}{Cohen the Barbarian}
{search}{Cohen}
}
{Morchella Esculenta}{
{show}{[Morchella] Esculenta}
{search}{Morchella}
}
{Emile}{
{show}{Emile}
{search}{Emile}
}
{Fern Golly}{
{show}{[Fern] Golly}
{search}{Fern}
}
{Granville}{
{show}{Granville}
{search}{Granville}
}
{Virgo Vango}{
{show}{[Virgo] Vango}
{search}{Virgo}
}
{The Proprietor}{
{show}{The Proprietor}
{search}{}
}
{shopkeeping native}{
{show}{shopkeeping native}
{search}{shopkeeping native}
}
{Scuttle Me Own Canoe Dihbl}{
{show}{Scuttle Me Own Canoe [Dihbl]}
{search}{Dihbl}
}
{SMOC Dihbl}{
{show}{Scuttle Me Own Canoe Dihbl}
{search}{Dihbl}
}
{Dia Shale}{
{show}{Dia [Shale]}
{search}{Shale}
}
{Esther Elderbury}{
{show}{[Esther] Elderbury}
{search}{Esther}
}
{DEATH}{
{show}{DEATH}
{search}{Death}
}
{Dil the Embalmer}{
{show}{Dil the Embalmer}
{search}{Dil}
}
{Khip-en-dahl}{
{show}{Khip-en-dahl}
{search}{Khip-en-dahl}
}
{Master Bibh-lat}{
{show}{Master Bibh-Lat}
{search}{Bibh}
}
{Merk}{
{show}{Merk}
{search}{Merk}
}
{Ptep-ptip-ptop}{
{show}{Ptep-ptip-ptop}
{search}{Ptep}
}
{Ptik-ptak-ptoe}{
{show}{Ptik-ptak-[ptoe]}
{search}{ptoe}
}
{Pugh Alighieri}{
{show}{[Pugh] Alighieri}
{search}{Pugh}
}
{Teh-takk-eht}{
{show}{[Teh]-takk-eht}
{search}{Teh}
}
{Toohumi}{
{show}{Toohumi}
{search}{Toohumi}
}
{Ug Ogg}{
{show}{Ug Ogg}
{search}{Ug Ogg}
}
{Wan-tew-iit}{
{show}{Wan-tew-iit}
{search}{Wan-tew-iit}
}
{Arms trader}{
{show}{Arms trader}
{search}{arms trader}
}
{Awaiting-Rain}{
{show}{Awaiting-Rain}
{search}{Awaiting}
}
{Captain Ptargos}{
{show}{Captain Ptargos}
{search}{Ptargos}
}
{Fis'n-tsips}{
{show}{Fis'n-tsips}
{search}{tsips}
}
{One of them Dibblers with a long name}{
{show}{One of them Dibblers with a long name}
{search}{Dih-bah-lah}
}
{May-I-be-Dipped-in-My-Own-Grease Dih-bah-lah}{
{show}{May-I-be-Dipped-in-My-Own-Grease Dih-bah-lah}
{search}{Dih-bah-lah}
}
{Abraxas}{
{show}{Abraxas}
{search}{Abraxas}
}
{Ania}{
{show}{Ania}
{search}{Ania}
}
{Arimasticopoulous the Mosaicist}{
{show}{Arimasticopoulous the Mosaicist}
{search}{Arimasticopoulous}
}
{Aurinax}{
{show}{Aurinax}
{search}{Aurinax}
}
{Betty}{
{show}{Betty}
{search}{Betty}
}
{Endos the Listener}{
{show}{Endos the Listener}
{search}{Endos}
}
{Kakia}{
{show}{Kakia}
{search}{Kakia}
}
{Klepton}{
{show}{Klepton}
{search}{Klepton}
}
{Maintenance man}{
{show}{Maintenance man}
{search}{maintenance}
}
{Master Zosimos}{
{show}{Master Zosimos}
{search}{Zosimos}
}
{Rimasticopoulous the Mosaicist}{
{show}{Rimasticopoulous the Mosaicist}
{search}{Rimasticopoulous}
}
{Souvlakios}{
{show}{Souvlakios}
{search}{Souvlakios}
}
{The owner}{
{show}{The owner [Spiros]}
{search}{Spiros}
}
{Xenophobios}{
{show}{Xenophobios}
{search}{Xenophobios}
}
{Clara}{
{show}{Clara}
{search}{Clara}
}
{Ema Nymton}{
{show}{Ema Nymton}
{search}{Ema Nymton}
}
{Ivor von Kaeyya}{
{show}{Ivor von Kaeyya}
{search}{Ivor}
}
{SMOH Dybbler}{
{show}{SMOH Dybbler}
{search}{Dybbler}
}
{Trau Mirnicht}{
{show}{Trau Mirnicht}
{search}{Trau}
}
{Verkauft Keinfleisch}{
{show}{Verkauft Keinfleisch}
{search}{Verkauft}
}
{Generic employee}{
{show}{A generic Charre Bux employee}
{search}{generic}
}
{Ayna}{
{show}{Ayna}
{search}{Ayna}
}
{Blloddwyn}{
{show}{Blloddwyn}
{search}{Blloddwyn}
}
{Brittnee}{
{show}{Brittnee}
{search}{Brittnee}
}
{Captain Merreaux Vingian}{
{show}{Captain Merreaux Vingian}
{search}{Merreaux}
}
{Cogsworth}{
{show}{Cogsworth}
{search}{Cogsworth}
}
{David Leatherman}{
{show}{David Leatherman}
{search}{Leatherman}
}
{Edna Scum}{
{show}{Edna Scum}
{search}{Edna}
}
{Fredd S'Vage}{
{show}{Fredd S'Vage}
{search}{Fredd}
}
{Harbour Master}{
{show}{Harbour Master}
{search}{harbour master}
}
{Harbour mistress}{
{show}{Harbour mistress}
{search}{harbour mistress}
}
{Hotel Reception}{
{show}{Hotel Reception}
{search}{false}
}
{Jolly Roger}{
{show}{Jolly Roger}
{search}{Jolly Roger}
}
{Mamie Olivia}{
{show}{Mamie Olivia}
{search}{Olivia}
}
{Mr Ray}{
{show}{Mr Ray}
{search}{Ray}
}
{Mr Myrtle}{
{show}{Mr Myrtle}
{search}{Myrtle}
}
{Myrtle}{
{show}{Myrtle}
{search}{Myrtle}
}
{Mrs Gogol}{
{show}{Mrs Gogol}
{search}{Gogol}
}
{Sno-ball vendor}{
{show}{Sno-ball vendor}
{search}{sno-ball}
}
{Spritz Peltanque}{
{show}{Spritz Peltanque}
{search}{Spritz}
}
{Talula}{
{show}{Talula}
{search}{Talula}
}
{The shopkeeper}{
{show}{The shopkeeper [chandlery, Genua]}
{search}{false}
}
{The tipster}{
{show}{The tipster}
{search}{tipster}
}
{Thom Cru'ez}{
{show}{Thom Cru'ez}
{search}{Thom}
}
{Watch clerk}{
{show}{Watch clerk}
{search}{false}
}
{Wounded soldier}{
{show}{Wounded soldier}
{search}{false}
}
{Private Inside Leg}{
{show}{Private Inside Leg}
{search}{Private}
}
{Monster}{
{show}{Monster}
{search}{Monster}
}
{Bestiality Carter}{
{show}{Bestiality Carter}
{search}{Bestiality}
}
{Brother Turbil}{
{show}{Brother Turbil}
{search}{Turbil}
}
{Embezile Thatcher}{
{show}{Embezile Thatcher}
{search}{Embezile}
}
{J. Ogg}{
{show}{J. Ogg}
{search}{Jason}
}
{giant leader}{
{show}{giant leader}
{search}{giant leader}
}
{Len}{
{show}{Len}
{search}{Len}
}
{Maggie}{
{show}{Maggie}
{search}{Maggie}
}
{Nicholas Winston}{
{show}{Nicholas Winston}
{search}{Nicholas}
}
{Serb}{
{show}{Serb Unglish}
{search}{Serb}
}
{Sharn}{
{show}{Sharn Unglish}
{search}{Sharn}
}
{Our Wullie}{
{show}{Our Wullie}
{search}{Wullie}
}
{Stephan}{
{show}{Stephan}
{search}{Stephan}
}
{Young Steven}{
{show}{Young Steven}
{search}{Young Steven}
}
{Suhm-wil-deih}{
{show}{Suhm-wil-deih}
{search}{Suhm}
}
{Vic}{
{show}{Vic}
{search}{Vic}
}
{Twoflower the tourist}{
{show}{Twoflower the tourist}
{search}{Twoflower}
}
{My poor kidnapped daughter}{
{show}{My poor kidnapped daughter}
{search}{captive}
}
{beautiful female captive}{
{show}{beautiful female captive}
{search}{captive}
}
{Allen Kingfisher}{
{show}{Allen Kingfisher}
{search}{Allen}
}
{Lobsang}{
{show}{Abbot Lobsang}
{search}{Lobsang}
}
{Asap (Brother Asap)}{
{show}{Asap (Brother Asap)}
{search}{Asap}
}
{Brother Hotpot}{
{show}{Brother Hotpot}
{search}{Hotpot}
}
{Morchella Esculenta}{
{show}{Morchella Esculenta}
{search}{Morchella}
}
{Bi-Bi Effenne}{
{show}{Sister Bi-Bi Effenne}
{search}{Bi-Bi}
}
{Ti-Ti Effenne}{
{show}{Sister Ti-Ti Effenne}
{search}{Ti-Ti}
}
{Heinz Blauhimmel}{
{show}{Heinz Blauhimmel}
{search}{Heinz}
}
{Lichtenstein}{
{show}{Lichtenstein}
{search}{Lichtenstein}
}
{Mad Gammer Nudity}{
{show}{Mad Gammer Nudity}
{search}{Nudify}
}
{Candice Little}{
{show}{Candice Little}
{search}{Candice}
}
{Cleetus Patterson}{
{show}{Cleetus Patterson}
{search}{Cleetus}
}
{Granma Muckloe}{
{show}{Granma Muckloe}
{search}{Muckloe}
}
{Peggy Little}{
{show}{Peggy Little}
{search}{Peggy}
}
{Ann Celeria}{
{show}{Ann [Celeria]}
{search}{Celeria}
}
{Doctor Lancreman}{
{show}{Doctor Lancreman}
{search}{Lancreman}
}
{Hardenfast}{
{show}{Hardenfast}
{search}{Hardenfast}
}
{Honest Dachshund}{
{show}{Honest Dachshund}
{search}{Dachshund}
}
{Frank Doberman}{
{show}{Frank Doberman}
{search}{Doberman}
}
{Irkabod Stork}{
{show}{Irkabod Stork}
{search}{Irkabod}
}
{Kortina Van Dryver}{
{show}{Kortina Van Dryver}
{search}{Kortina}
}
{Miss Van Dryer}{
{show}{Miss Van Dryer}
{search}{false}
}
{Mr Smith (Mr Shopkeeper)}{
{show}{Mr Smith (Mr Shopkeeper)}
{search}{false}
}
{Mrs Van Carrot}{
{show}{Mrs Van Carrot}
{search}{Van Carrot}
}
{My good friend at the post office}{
{show}{My good friend at the post office (Slippery)}
{search}{false}
}
{One and Only Manclef}{
{show}{One and Only Manclef}
{search}{Manclef}
}
{Shopkeeper Bunch}{
{show}{Shopkeeper Bunch}
{search}{Shopkeeper}
}
{The Magistrate}{
{show}{The Magistrate}
{search}{Magistrate}
}
{Magistrate Flathead}{
{show}{Magistrate Flathead}
{search}{Magistrate}
}
{Young Bran}{
{show}{Young Bran}
{search}{Young Bran}
}
{A maitre d'}{
{show}{A maitre d'}
{search}{maitre}
}
{Fleppo}{
{show}{Fleppo}
{search}{Fleppo}
}
{Isobel Kingdom}{
{show}{Isobel Kingdom}
{search}{Isobel}
}
{71-Hour Ahmed}{
{show}{71-hour Ahmed}
{search}{Ahmed}
}
{Temple Guardian}{
{show}{Temple Guardian [templeguard]}
{search}{guardian}
}
{Fione mac Feegle}{
{show}{Fione mac Feegle}
{search}{Fione}
}
{Abe}{
{show}{Abe}
{search}{Abe}
}
{Innkeeper}{
{show}{grim innkeeper - Slaughtered Lamb, Uberwald}
{search}{grim innkeeper}
}
{Spiegal}{
{show}{Spiegal}
{search}{Spiegal}
}
};
#alias {/solveletter} {
#if {&{letter_lines[1]}} {
#var {current_match_line} {^$letter_lines[1]$};
#replace {current_match_line} {_} {%.};
#nop Check against far away targets;
#if {"$letter_difficulty" == "none" || "$letter_difficulty" == "far"} {
#foreach {$far_away_targets[]} {target} {
#regex {$target} {$current_match_line} {
#format {letter_solution_line} {%c[FA] %c*%c Deliver to %c%s%c.} {bold blue} {bold yellow} {bold blue} {bold green} {$far_away_targets[$target][show]} {bold blue};
#echo {$letter_solution_line};
#if {"$far_away_targets[$target][search]" != "false"} {
db npc $far_away_targets[$target][search];
};
};
}
}
#nop Check against distant lands targets;
#if {"$letter_difficulty" == "none" || "$letter_difficulty" == "distant"} {
#foreach {$distant_land_targets[]} {target} {
#regex {$target} {$current_match_line} {
#format {letter_solution_line} {%c[DL] %c*%c Deliver to %c%s%c.} {bold blue} {bold yellow} {bold blue} {bold green} {$distant_land_targets[$target][show]} {bold blue};
#echo {$letter_solution_line};
#if {"$distant_land_targets[$target][search]" != "false"} {
db npc $distant_land_targets[$target][search];
};
};
}
}
#nop Check against difficult customer targets;
#if {"$letter_difficulty" == "none" || "$letter_difficulty" == "difficult"} {
#foreach {$difficult_customer_targets[]} {target} {
#regex {$target} {$current_match_line} {
#format {letter_solution_line} {%c[DC] %c*%c Deliver to %c%s%c.} {bold blue} {bold yellow} {bold blue} {bold green} {$difficult_customer_targets[$target][show]} {bold blue};
#echo {$letter_solution_line};
#if {"$difficult_customer_targets[$target][search]" != "false"} {
db npc $difficult_customer_targets[$target][search];
};
};
}
}
#nop var {letter_difficulty} {none};
};
};
#NOP ==[Halt Parsing Letter]==
#alias {/stopparsingletter} {
#unvar {parsing_dead_letter};
/solveletter
};
#action {^Deliver by %1.$} {
#if {&{parsing_dead_letter}} {
/stopparsingletter
}
};
#action {does not have anything written on it.} {
#if {&{parsing_dead_letter}} {
/stopparsingletter
}
};
#action {Cannot find "letter", no match.} {
#if {&{parsing_dead_letter}} {
/stopparsingletter
}
};
#action {You are too busy fighting to read at the moment.} {
#if {&{parsing_dead_letter}} {
/stopparsingletter
}
};
#NOP ==[Catch-all to grab letter lines, store only lines with a '_']==
#action {^%*$} {
#if {&{parsing_dead_letter}} {
#regex {%1} {%*_%*} {
#list {letter_lines} {add} {%1};
};
}
} {9};
#NOP ==[Alias to attempt solve of letter in inventory]==
#ALIAS {sl} {
#send {read letter};
#var {parsing_dead_letter} {0};
#list {letter_lines} {create};
}
#NOP ==[Actions to catch Frank telling you which delivery type]==
#action {^Frank asks: So you want to try delivering a letter to someone far away then, %1\?} {
#nop far away;
#if {%1 == $GMCP[charinfo][capname]} {
#var {letter_difficulty} {far};
};
}
#action {^Frank asks: So you want to try delivering a letter to someone really far away then, %1\?} {
#nop distant land;
#if {%1 == $GMCP[charinfo][capname]} {
#var {letter_difficulty} {distant};
};
}
#action {^Frank exclaims: Sometimes we end up with letters addressed to people who we've had problems with before. They are not easy letters to deliver. Do you want to try delivering one? You'll have to do it in less than an hour. Think carefully now, %1, it could be dangerous!} {
#nop difficult;
#if {%1 == $GMCP[charinfo][capname]} {
#var {letter_difficulty} {difficult};
};
}
#CLASS {deadletter} {close};

View File

@ -14,92 +14,55 @@
#ALIAS {debug {on|off}} #ALIAS {debug {on|off}}
{ {
#IF {"%1" == "on"} { #IF {"%1" == "on"} { #VARIABLE {debug} {1}; };
#VARIABLE {debug} {1}; #ELSE { #VARIABLE {debug} {0} };
#SHOWME {@debug_log{Debug is <139>on<099>.}}; #SHOWME { Debug is <139>$debug<099> };
};
#ELSE {
#VARIABLE {debug} {0};
#SHOWME {@debug_log{Debug is <139>off<099>.}};
};
#NOP; #NOP;
} }
#EVENT {IAC SB GMCP char.vitals IAC SE} #EVENT {IAC SB GMCP char.vitals IAC SE}
{ {
#IF {"$debug" == "1"} { #IF {"$debug" == "1"} { #SHOWME %1 };
#SHOWME {@debug_log{%1}};
};
#VAR GMCP[oldvitals] {$GMCP[vitals]}; #VAR GMCP[oldvitals] {$GMCP[vitals]};
#VAR GMCP[vitals] {%0}; #VAR GMCP[vitals] {%0};
#math {hploss} {$GMCP[vitals][hp] - $GMCP[oldvitals][hp]}; #math {hploss} {$GMCP[vitals][hp] - $GMCP[oldvitals][hp]};
#if {$hploss < -150} { #if {$hploss < -150} {
#format {hp_loss_display} {<139>HP IS FALLING! CAREFUL! (Lost %s HP)<099>} {$hploss}; #format {hp_loss_display} {<139>HP IS FALLING! CAREFUL! (Lost %s HP)<099>} {$hploss};
#if {&GMCP[oldvitals][hp]} {
#echo {$hp_loss_display}; #echo {$hp_loss_display};
#showme {\a}; #showme {\a\a};
}; }
};
#math {xpgain} {$GMCP[vitals][xp] - $GMCP[oldvitals][xp]}; #math {xpgain} {$GMCP[vitals][xp] - $GMCP[oldvitals][xp]};
#if {$xpgain > 5000} { #if {$xpgain > 5000} {
#format {xp_gain_display} {(+<169>%g<099>xp)} {$xpgain}; #format {xp_gain_display} {(+<169>%g<099>xp)} {$xpgain};
#delay {1} {#showme {$xp_gain_display};};
}; #echo {$xp_gain_display};
}
update_prompt; update_prompt;
} }
#EVENT {IAC SB GMCP char.info IAC SE} #EVENT {IAC SB GMCP char.info IAC SE}
{ {
#IF {"$debug" == "1"} { #IF {"$debug" == "1"} { #SHOWME %1 };
#SHOWME {@debug_log{%1}}; #VAR GMCP[charinfo] {%0};
};
#nop We've SU'd, cleanup as appropriate; #nop New login, invalidate stale info;
#nop delete group shields data;
#variable {group_shields} {};
#variable {group_shields_current} {};
/writegroupshieldstofile;
#nop xpreset - do we still want to? if we dont mis-calculate on SU continued tracking is nice;
#nop store data about new character;
#var GMCP[charinfo] {%0};
#nop invalidate stale info;
#unvar {GMCP[oldvitals]};
#unvar {GMCP[vitals]};
#var {latest_xp} {0};
#nop reset prompt details;
#var {tpa_status} {0};
#var {tpa_color} {0};
#var {tpa_start} {0};
#unvar {quota}; #unvar {quota};
#nop re-split the screen to wipe out the prompt from last character;
#split {3};
} }
#EVENT {IAC SB GMCP room.info IAC SE} #EVENT {IAC SB GMCP room.info IAC SE}
{ {
#IF {"$debug" == "1"} { #IF {"$debug" == "1"} { #SHOWME %1 };
#SHOWME {@debug_log{%1}};
};
#VAR GMCP[room][info] {%0}; #VAR GMCP[room][info] {%0};
/spottimercheckroomid $GMCP[room][info][identifier]; /spottimercheckroomid $GMCP[room][info][identifier]
} }
#EVENT {IAC SB GMCP room.map IAC SE} #EVENT {IAC SB GMCP room.map IAC SE}
{ {
#IF {"$debug" == "1"} { #IF {"$debug" == "1"} { #SHOWME %1 };
#SHOWME {@debug_log{%1}};
};
#VAR {minimap} {%0}; #VAR {minimap} {%0};
#REPLACE {minimap} {u001b} {}; #REPLACE {minimap} {u001b} {};
#SYSTEM {rm logs/minimap.log && touch logs/minimap.log}; #SYSTEM {rm logs/minimap.log && touch logs/minimap.log};
@ -110,21 +73,20 @@
#EVENT {IAC SB GMCP room.writtenmap IAC SE} #EVENT {IAC SB GMCP room.writtenmap IAC SE}
{ {
#IF {"$debug" == "1"} { #IF {"$debug" == "1"} { #SHOWME %1 };
#SHOWME {@debug_log{%1}};
};
#VAR GMCP[room][mdt] {%0}; #VAR GMCP[room][mdt] {%0};
#REPLACE {GMCP[room][mdt]} {\\n} {}; #REPLACE {GMCP[room][mdt]} {\\n} {};
#SYSTEM {rm logs/mapdoortext.log && touch logs/mapdoortext.log}; #SYSTEM {rm logs/mapdoortext.log && touch logs/mapdoortext.log};
#LINE {log} {logs/mapdoortext.log} {$GMCP[room][mdt]}; #LINE {log} {logs/mapdoortext.log} {$GMCP[room][mdt]};
/personal.gmcp.writtenmap $GMCP[room][info][identifier];
} }
#EVENT {IAC WILL GMCP} #EVENT {IAC WILL GMCP}
{ {
#SEND {$IAC$DO$GMCP\}; #SEND {$IAC$DO$GMCP\};
#SEND {$IAC$SB$GMCP core.hello { "client" : "TinTin++", "version" : "2.02.60" } $IAC$SE\}; #nop #SEND {$IAC$SB$GMCP Core.Hello { "client": "$CLIENT_NAME", "version": "$CLIENT_VERSION" } $IAC$SE\};
#nop #SEND {$IAC$SB$GMCP Core.Hello { "client": "TinTin++", "version": "2.01.2" } $IAC$SE\};
#nop #SEND {$IAC$SB$GMCP Core.Supports.Set ["Char.Vitals", "char.info", "char.login", "room.info", "room.map", "room.writtenmap"] $IAC$SE\}
#SEND {$IAC$SB$GMCP core.hello { "client" : "TinTin++", "version" : "2.01.2" } $IAC$SE\};
#SEND {$IAC$SB$GMCP core.supports.set [ "char.login", "char.info", "char.vitals", "room.info", "room.map", "room.writtenmap" ] $IAC$SE\}; #SEND {$IAC$SB$GMCP core.supports.set [ "char.login", "char.info", "char.vitals", "room.info", "room.map", "room.writtenmap" ] $IAC$SE\};
#nop; #nop;
} }
@ -135,8 +97,4 @@
#VARIABLE CLIENT_VERSION %1; #VARIABLE CLIENT_VERSION %1;
} }
#FUNCTION {debug_log} {
#format {result} {<<fac><<caf>GMCP<fac>><099>> %0};
};
#CLASS gmcp close #CLASS gmcp close

View File

@ -14,73 +14,47 @@
#nop ======================================================; #nop ======================================================;
#nop EFF #nop EFF
#ACTION {^ * %1 is floating around {him|her|it|you}:$} { #ACTION {^ * %1 is floating around {him|her|it}:$} {
#if {"%2" == "you"} {
#variable {group_shields[$GMCP[charinfo][capname]][eff]} {1};
};
#else {
#variable {group_shields[$group_shields_current][eff]} {1}; #variable {group_shields[$group_shields_current][eff]} {1};
} /writegroupshieldstofile
/softwritegroupshieldstofile;
} }
#nop TPA #nop TPA
#ACTION {^ * {She|He|It} is surrounded by a {(dull red |bright red |wobbling orange |flickering yellow |)?}magical impact shield\.$} { #ACTION {^ * {She|He|It} is surrounded by a {(dull red |bright red |wobbling orange |flickering yellow |)?}magical impact shield\.$} {
#if {"$group_shields_current" != ""} {
#variable {group_shields[$group_shields_current][tpa]} {1}; #variable {group_shields[$group_shields_current][tpa]} {1};
/softwritegroupshieldstofile; /writegroupshieldstofile
};
} }
#nop CCC #nop CCC
#ACTION {^ * {Her|His|Its} skin has been {hardened|covered} {with|to}{a?} %4, although {the \w+|it} seems {weaker|not to be}} { #ACTION {^ * {Her|His|Its} skin has been {hardened|covered} {with|to}{a?} %4, although {the \w+|it} seems {weaker|not to be}} {
#if {"$group_shields_current" != ""} {
#variable {group_shields[$group_shields_current][ccc]} {1}; #variable {group_shields[$group_shields_current][ccc]} {1};
/softwritegroupshieldstofile; /writegroupshieldstofile
};
} }
#ACTION {^ * Your skin has been {hardened|covered} {with|to}{a?} %4, although {the \w+|it} seems {weaker|not to be}} {
#variable {group_shields[$GMCP[charinfo][capname]][ccc]} {1};
/softwritegroupshieldstofile;
};
#ACTION {^ * Tiny threads of metal run criss-cross all over {her|his|its} skin, although it seems weaker} { #ACTION {^ * Tiny threads of metal run criss-cross all over {her|his|its} skin, although it seems weaker} {
#if {"$group_shields_current" != ""} {
#variable {group_shields[$group_shields_current][ccc]} {1}; #variable {group_shields[$group_shields_current][ccc]} {1};
/softwritegroupshieldstofile; /writegroupshieldstofile
};
} }
#nop MS #nop MS
#ACTION {^ * {She|He|It} is {(really )?}protected by the power of {Pishe|Gufnork|Gapp|Sandelfon|Fish|Hat|Sek|Aegadon|Cubal|Reebox}} { #ACTION {^ * {She|He|It} is {(really )?}protected by the power of {Pishe|Gufnork|Gapp|Sandelfon|Fish|Hat|Sek|Aegadon|Cubal|Reebox}} {
#if {"$group_shields_current" != ""} {
#variable {group_shields[$group_shields_current][ms]} {1}; #variable {group_shields[$group_shields_current][ms]} {1};
/softwritegroupshieldstofile; /writegroupshieldstofile
};
} }
#nop KII #nop KII
#ACTION {^ * {You|She|He|It} are surrounded by a {handful|cloud|small swarm|large swarm|vast sawrm|plague} of} { #ACTION {^ * {She|He|It} is surrounded by a {handful|cloud|small swarm|large swarm|vast sawrm|plague} of} {
#if {"%1" == "You"} {
#variable {group_shields[$GMCP[charinfo][capname]][kii]} {1};
};
#else {
#variable {group_shields[$group_shields_current][kii]} {1}; #variable {group_shields[$group_shields_current][kii]} {1};
}; /writegroupshieldstofile
/softwritegroupshieldstofile;
}; };
#nop No shields at all #nop No shields at all
#ACTION {^{(\w+\b\W*?){1,8}} has no arcane protection.$} { #ACTION {^{(\w+\b\W*?){1,8}} has no arcane protection.$} {
#if {"$group_shields_current" != ""} {
#if {"%1" != "%+ the %+ horse"} {
#variable {group_shields[%1][ccc]} {0}; #variable {group_shields[%1][ccc]} {0};
#variable {group_shields[%1][tpa]} {0}; #variable {group_shields[%1][tpa]} {0};
#variable {group_shields[%1][eff]} {0}; #variable {group_shields[%1][eff]} {0};
#variable {group_shields[%1][kii]} {0}; #variable {group_shields[%1][kii]} {0};
#variable {group_shields[%1][ms]} {0}; #variable {group_shields[%1][ms]} {0};
/softwritegroupshieldstofile; /writegroupshieldstofile
};
};
}; };
@ -92,17 +66,16 @@
#ACTION {[%1] {[A-Za-z]+} has left the group.} { #ACTION {[%1] {[A-Za-z]+} has left the group.} {
#if {&group_shields[%2]} { #if {&group_shields[%2]} {
#unvariable {group_shields[%2]}; #unvariable {group_shields[%2]};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
#ACTION {[%1] {[A-Za-z]+} has joined the group.} { #ACTION {[%1] {[A-Za-z]+} has joined the group.} {
#tab {%2};
#variable {group_shields[%2]} {{tpa}{0}{ccc}{0}{eff}{0}{ms}{0}{kii}{0}}; #variable {group_shields[%2]} {{tpa}{0}{ccc}{0}{eff}{0}{ms}{0}{kii}{0}};
/softwritegroupshieldstofile; /writegroupshieldstofile
}; };
#ACTION {[%1] You have left the group.} { #ACTION {[%1] You have left the group.} {
#var {group_shields} {}; #var {group_shields} {};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
#ACTION {[%1] You have joined the group.} { #ACTION {[%1] You have joined the group.} {
#var {group_shields} {}; #var {group_shields} {};
@ -121,38 +94,17 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][eff]} {0}; #variable {group_shields[$name][eff]} {0};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
#ACTION {^In blocking the attack {(?:.+)} floating around {(?:\w+\b\W*?){1,8}} is knocked out of orbit.$} { #ACTION {^In blocking the attack {(?:.+)} floating around {(?:\w+\b\W*?){1,8}} is knocked out of orbit.$} {
#nop Record room of drop even for non group mates... might come in handy;
#variable {group_eff_item} {%1};
#variable {group_eff_target} {%2};
#variable {group_eff_room} {$GMCP[room][info][name]};
#variable {gs_dropname} {%2}; #variable {gs_dropname} {%2};
#replace {gs_dropname} { } {;}; #replace {gs_dropname} { } {;};
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][eff]} {0}; #variable {group_shields[$name][eff]} {0};
/writegroupshieldstofile; /writegroupshieldstofile
#if {"$gs_eff_alerts" == "1"} {
#showme {\a};
};
#return @log_line_to_chat{};
};
#elseif {"$name" == "you"} {
#variable {group_shields[$GMCP[charinfo][capname]][eff]} {0};
/writegroupshieldstofile;
#if {"$gs_eff_alerts" == "1"} {
#showme {\a};
};
#return @log_line_to_chat{};
}; };
}; };
}; };
@ -162,7 +114,7 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][eff]} {1}; #variable {group_shields[$name][eff]} {1};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
@ -171,17 +123,16 @@
#nop TPA #nop TPA
#ACTION {^There is a sudden white flash around {(?!a passing wizard)(\w+\b\W*?){1,8}}.$} { #ACTION {^There is a sudden white flash around {(?!a passing wizard)(\w+\b\W*?){1,8}}.$} {
#showme {\a}; #showme {\a};
#line {log} {$chat_file};
#variable {gs_dropname} {%1}; #variable {gs_dropname} {%1};
#replace {gs_dropname} { } {;}; #replace {gs_dropname} { } {;};
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][tpa]} {0}; #variable {group_shields[$name][tpa]} {0};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
#return @log_line_to_chat{};
}; };
#ACTION {^With a noise that sounds like "Plink!", the air around {(\w+\b\W*?){1,8}} flashes {yellow|red} for a moment.$} { #ACTION {^With a noise that sounds like "Plink!", the air around {(\w+\b\W*?){1,8}} flashes {yellow|red} for a moment.$} {
#variable {gs_dropname} {%1}; #variable {gs_dropname} {%1};
@ -189,7 +140,7 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][tpa]} {1}; #variable {group_shields[$name][tpa]} {1};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
@ -202,7 +153,7 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][ccc]} {0}; #variable {group_shields[$name][ccc]} {0};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
@ -212,17 +163,17 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][ccc]} {0}; #variable {group_shields[$name][ccc]} {0};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
#ACTION {^{(\w+\b\W*?){1,8}}'s skin is now as {elastic|thickly covered|hard} as it can get.$} { #ACTION {^{(\w+\b\W*?){1,8}}'s skin is now as {elastic|thicky covered|hard} as it can get.$} {
#variable {gs_dropname} {%1}; #variable {gs_dropname} {%1};
#replace {gs_dropname} { } {;}; #replace {gs_dropname} { } {;};
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][ccc]} {1}; #variable {group_shields[$name][ccc]} {1};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
@ -232,7 +183,7 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][ccc]} {1}; #variable {group_shields[$name][ccc]} {1};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
@ -242,18 +193,10 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][ccc]} {1}; #variable {group_shields[$name][ccc]} {1};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
#ACTION {^With a brief flash of magic, your %1 skin falls away.$} {
#variable {group_shields[$GMCP[charinfo][capname]][ccc]} {0};
/writegroupshieldstofile;
};
#ACTION {^Your skin is {already|now} as {elastic|thickly covered|hard} as it can get.$} {
#variable {group_shields[$GMCP[charinfo][capname]][ccc]} {1};
/writegroupshieldstofile;
};
#nop KII #nop KII
@ -263,7 +206,7 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][kii]} {1}; #variable {group_shields[$name][kii]} {1};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
@ -273,7 +216,7 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][kii]} {1}; #variable {group_shields[$name][kii]} {1};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
@ -283,7 +226,7 @@
#foreach {$gs_dropname} {name} { #foreach {$gs_dropname} {name} {
#if {&group_shields[$name]} { #if {&group_shields[$name]} {
#variable {group_shields[$name][kii]} {1}; #variable {group_shields[$name][kii]} {1};
/writegroupshieldstofile; /writegroupshieldstofile
}; };
}; };
}; };
@ -297,13 +240,12 @@
#ALIAS {rgs} { #ALIAS {rgs} {
#variable {group_shields} {}; #variable {group_shields} {};
#variable {group_shields_current} {}; #variable {group_shields_current} {};
/writegroupshieldstofile;
#send {group shields}; #send {group shields};
/writegroupshieldstofile
}; };
#ALIAS {sgs} { #ALIAS {sgs} {
#showme {.:: Group Shields ::.}; #foreach {$group_shields[]} {name} {
#foreach {*group_shields[]} {name} {
#format {gs_namelength} {%L} {$name}; #format {gs_namelength} {%L} {$name};
#math {gs_namelength} {9 - $gs_namelength}; #math {gs_namelength} {9 - $gs_namelength};
#if {$gs_namelength < 0} { #var {gs_namelength} {0}; }; #if {$gs_namelength < 0} { #var {gs_namelength} {0}; };
@ -311,61 +253,24 @@
#foreach {tpa;ccc;eff;ms;kii} {shield} { #foreach {tpa;ccc;eff;ms;kii} {shield} {
#if {&group_shields[$name][$shield] && "$group_shields[$name][$shield]" == "1"} { #if {&group_shields[$name][$shield] && "$group_shields[$name][$shield]" == "1"} {
#format {gs_displayline} {%s <fef>%u<099>} {$gs_displayline} {$shield}; #format {gs_displayline} {%s <fef>%s<099>} {$gs_displayline} {$shield};
} { } {
#format {gs_displayline} {%s <aaa>%u<099>} {$gs_displayline} {$shield}; #format {gs_displayline} {%s <aaa>%s<099>} {$gs_displayline} {$shield};
}; };
}; };
#showme {$gs_displayline}; #showme {$gs_displayline};
}; };
}; };
#VARIABLE {gs_eff_alerts} {1};
#ALIAS {^gs eff on$} {
#VARIABLE {gs_eff_alerts} {1};
#showme {<acf>[<fff>group<acf>] Group shield EFF bell alerts are <128>ON<acf>.<900>};
#showme {<acf>[<fff>group<acf>] Syntax: 'gs eff <on|off>'.<900>};
};
#ALIAS {^gs eff off$} {
#VARIABLE {gs_eff_alerts} {0};
#showme {<acf>[<fff>group<acf>] Group shield EFF bell alerts are <118>OFF<acf>.<900>};
#showme {<acf>[<fff>group<acf>] Syntax: 'gs eff <on|off>'.<900>};
};
#ALIAS {^gs eff$} {
#IF {"$gs_eff_alerts" == "0"} {
#showme {<acf>[<fff>group<acf>] Group shield EFF bell alerts are <118>OFF<acf>.<900>};
#showme {<acf>[<fff>group<acf>] Syntax: 'gs eff <on|off>'.<900>};
} {
#showme {<acf>[<fff>group<acf>] Group shield EFF bell alerts are <128>ON<acf>.<900>};
#showme {<acf>[<fff>group<acf>] Syntax: 'gs eff <on|off>'.<900>};
};
};
#FORMAT {shieldfile_lastwrite} {%T};
#MATH {shieldfile_lastwrite} {$shieldfile_lastwrite - 10};
#ALIAS {/softwritegroupshieldstofile} {
#format {current_time} {%T};
#math {shieldfile_lastdelta} {$current_time - $shieldfile_lastwrite};
#if {$shieldfile_lastdelta < 2} {
#nop Don't bother writing if its been less than 5 seconds;
#delay {swgstf} {/softwritegroupshieldstofile;} {2};
#return;
};
/writegroupshieldstofile;
#format {shieldfile_lastwrite} {%T};
};
#ALIAS {/writegroupshieldstofile} { #ALIAS {/writegroupshieldstofile} {
#nop Delete and recreate an empty file;
#system {rm $groupshield_file && touch $groupshield_file}; #system {rm $groupshield_file && touch $groupshield_file};
#nop Log a title then iterate over group members to display line by line; #line {log} {$groupshield_file} {.:: Group Shields ::. \n\r};
#line {log} {$groupshield_file} {.:: Group Shields ::.}; #foreach {$group_shields[]} {name} {
#foreach {*group_shields[]} {name} {
#format {gs_namelength} {%L} {$name}; #format {gs_namelength} {%L} {$name};
#math {gs_namelength} {6 - $gs_namelength}; #math {gs_namelength} {6 - $gs_namelength};
#format {gs_displayline} {%.6s: } {$name}; #nop #if {$gs_namelength < 0} { #var {gs_namelength} {0}; };
#format {gs_displayline} {%-8s} {$gs_displayline}; #format {gs_displayline} { %.6s:%+${gs_namelength}s } {$name};
#foreach {tpa;ccc;eff;kii} {shield} { #foreach {tpa;ccc;eff;kii} {shield} {
#if {&group_shields[$name][$shield] && "$group_shields[$name][$shield]" == "1"} { #if {&group_shields[$name][$shield] && "$group_shields[$name][$shield]" == "1"} {
@ -376,49 +281,49 @@
}; };
#line {log} {$groupshield_file} {$gs_displayline}; #line {log} {$groupshield_file} {$gs_displayline};
}; };
#format {shieldfile_lastwrite} {%T}; #return;
}; };
#nop =======================================================;
#nop ===[ Capture incidents and be able to report them ]===;
#nop =======================================================;
#ACTION {^The %1 grabs your %2. You struggle briefly but {she|he|it} wrests it from your grip and makes for a hasty retreat.} {
#variable {group_snatch_target} {%1};
#variable {group_snatch_victim} {$GMCP[charinfo][capname]};
#variable {group_snatch_item} {%2};
};
#ACTION {^The %1 and %2 struggle briefly over %3 before the %4 wrests it free%5$} {
#variable {group_snatch_target} {%1};
#variable {group_snatch_victim} {%2};
#variable {group_snatch_item} {%3};
};
#ACTION {^The %1 suddenly snatches %2 from %3 and makes a run for it.$} {
#variable {group_snatch_target} {%1};
#variable {group_snatch_victim} {%3};
#variable {group_snatch_item} {%2};
};
#ALIAS {gssnatch} {
#if {"$group_snatch_target" != "0"} {
#send {group say [snatch] $group_snatch_victim's "$group_snatch_item" was stolen by \{$group_snatch_target\}};
} {
#showme {<188><acf>[snatch] No recent snatch to report.<900>};
};
};
#ALIAS {gseff} {
#if {"$group_eff_target" != "0"} {
#send {group say [eff] $group_eff_target's floating "$group_eff_item" was dropped in \{$group_eff_room\}};
} {
#showme {<188><acf>[eff] No recent EFF drops to report.<900>};
};
};
#VARIABLE {group_snatch_target} {0};
#VARIABLE {group_snatch_victim} {0};
#VARIABLE {group_snatch_item} {0};
#VARIABLE {group_eff_item} {0};
#VARIABLE {group_eff_target} {0};
#VARIABLE {group_eff_room} {0};
#CLASS {group} {close}; #CLASS {group} {close};
#nop EFF for you;
#nop ^(?:> )?(?P<effitem>(?:\w+\b\W*?){1,6}) floating around you breaks!$
#nop ^(?:> )?You realise that (?P<effitem>(?:\w+\b\W*?){1,6}) is no longer floating around you\.$
#nop ^(?:> )?In blocking the attack (?P<effitem>(?:\w+\b\W*?){1,6}) floating around you is knocked out of orbit\.$
#nop ^(?:> )?(?P<effitem>(?:\w+\b\W*?){1,6}) begins to float around you\.$
#nop ^ \* (?P<effitem>(?:\w+\b\W*?){1,6}) is floating around you\:$
#nop TPA for you
#nop ^(?:> )?There is a sudden white flash\. Your magical shield has broken\.$
#nop ^(?:> )?With a noise that sounds like "Plink!", everything around you flashes (?>yellow|red) for a moment\.$
#nop ^ \* You are surrounded by a (?P<colour>|dull red |bright red |wobbling orange |flickering yellow )magical impact shield\.$
#nop CCC for you
#nop ^(?:> )?With a brief flash of magic, your (?>metallic|stony|elastic) skin falls away\.$
#nop ^(?:> )?Your skin feels itchy<semicolon> large pieces flake off as you scratch it\.$
#nop ^(?:> )?The metallic network on your skin feels a fair bit stronger now\.$
#nop ^(?:> )?Your? (?>feel your skin become (?>rock hard|elastic as rubber)|skin (?>feels (?>even harder now|much more elastic now)|is now as (?>hard|elastic|thickly covered) as it can get))\.$
#nop ^ \* Tiny threads of metal run criss-cross all over your skin, although
#nop ^ \* Your skin (?>has been|has|is) (?>hardened to a rock-like form|hardened with numerous layers of a mineral-like substance|hardened with a chalk-like substance|covered with several layers of a chalk-like substance|covered with a thin layer of chalk|covered with a thick metal net|metal bands running all over it, forming a kind of net|covered with a thin metal net|covered with a thin, net-like metal coating|solidified into a rubberous form|made elastic with numerous layers of a rubber-like substance|treated with a latex-like substance|covered with several layers of a latex-like substance|covered with a thin layer of latex), although
#nop Major for you;
#nop ^(?:> )?Your divine protection expires\.$
#nop ^(?:> )?You are protected by the power of (?>Pishe|Gufnork|Gapp|Sandelfon|Fish|Hat|Sek|Aegadon|Cubal|Reebox)\.$
#nop ^ \* You are (?>(?>barely |really |perfectly )?protected|shielded) by the (?>power |protective armour |grace )of (?>Pishe|Gufnork|Gapp|Sandelfon|Fish|Hat|Sek|Aegadon|Cubal|Reebox)\. You will be protected for
#nop Bug shield for you;
#nop ^(?:> )?The last of the injured (?>lacewings|stick insects|mayflies|praying mantids|butterflies|ladybirds|dragonflies|damselflies|moths|grasshoppers|winged termites|sandflies|mosquitoes|gnats|crickets|flying ants|locusts|horseflies|cicadas|bees|wasps|hornets|elephant beetles|assassin bugs) surrounding you crash to the ground\.$
#nop ^(?:> )?The (?>lacewings|stick insects|mayflies|praying mantids|butterflies|ladybirds|dragonflies|damselflies|moths|grasshoppers|winged termites|sandflies|mosquitoes|gnats|crickets|flying ants|locusts|horseflies|cicadas|bees|wasps|hornets|elephant beetles|assassin bugs) surrounding you scatter in different directions and fly off\.$
#nop ^(?:> )?(?>Buzzing drowsily, t|Buzzing loudly, t|Buzzing threateningly, t|Clicking and buzzing, t|Whirring gently, t|Rather clumsily, t|With a rasping noise, t|With a high-pitched whining noise, t|With a low, menacing buzzing, t|With a buzzing sound so loud and meaty it's almost like a dog growling, t|T)he (?>handful|cloud|small swarm|large swarm|vast swarm|plague) of (?>lacewings|stick insects|mayflies|praying mantids|butterflies|ladybirds|dragonflies|damselflies|moths|grasshoppers|winged termites|sandflies|mosquitoes|gnats|crickets|flying ants|locusts|horseflies|cicadas|bees|wasps|hornets|elephant beetles|assassin bugs) (?>flutters into a loosely-formed orbit around |forms a chaotic web of small white bodies around |starts to hover near |begins to circle |begins to circle around |begins to orbit |begins to cluster around |begins to buzz erratically around |begins to buzz around |flutters into a chaotic formation around )you
#nop ^ \* You are surrounded by a (?>handful|cloud|small swarm|large swarm|vast swarm|plague) of
#nop Arcane statuses
#nop ^(?:> )?Arcane protection status:$;

View File

@ -31,6 +31,6 @@
#macro {Oq} {southwest}; #nop 1; #macro {Oq} {southwest}; #nop 1;
#macro {Or} {south}; #nop 2; #macro {Or} {south}; #nop 2;
#macro {Os} {southeast}; #nop 3; #macro {Os} {southeast}; #nop 3;
#macro {Op} {enc}; #nop 0; #macro {Op} {id}; #nop 0;
#macro {On} {}; #nop .; #macro {On} {}; #nop .;
#macro {Ol} {}; #nop +; #macro {Ol} {}; #nop +;

View File

@ -1,44 +1,44 @@
#CLASS {magic} {kill}; #CLASS {magic} {kill};
#CLASS {magic} {open}; #CLASS {magic} {open};
#NOP ==[Delude Levels]==; #NOP ==[Delude Levels]==
#SUB {^It has a faint octarine shadow about it that disappears if you look at it squarely.$} {%0 <858>(1/5)<900>}; #SUB {^It has a faint octarine shadow about it that disappears if you look at it squarely.$} {%0 <858>(1/5)<898>};
#SUB {^It has a faint octarine shadow about it.$} {%0 <858>(2/5)<900>}; #SUB {^It has a faint octarine shadow about it.$} {%0 <858>(2/5)<898>};
#SUB {^It has an octarine shadow about it that flickers occasionally out of the corner of your eye.$} {%0 <858>(3/5)<900>}; #SUB {^It has an octarine shadow about it that flickers occasionally out of the corner of your eye.$} {%0 <858>(3/5)<898>};
#SUB {^It has a flickering octarine shadow about it.$} {%0 <858>(4/5)<900>}; #SUB {^It has a flickering octarine shadow about it.$} {%0 <858>(4/5)<898>};
#SUB {^It has a flickering octarine haze about it.$} {%0 <858>(5/5)<900>}; #SUB {^It has a flickering octarine haze about it.$} {%0 <858>(5/5)<898>};
#HIGH {^The octarine shadow around %* deepens%*} {bold magenta}; #HIGH {^The octarine shadow around %* deepens%*} {bold magenta}
#HIGH {^The octarine shadow around %* fades%*} {magenta}; #HIGH {^The octarine shadow around %* fades%*} {magenta}
#NOP ==[Item Enchantment Levels]==; #NOP ==[Item Enchantment Levels]==
#SUB {It occasionally pulses with octarine light} {%0 <858>(Lvl 1)<900>}; #SUB {It occasionally pulses with octarine light} {%0 <858>(Lvl 1)<898>};
#SUB {It emits a slight octarine glow} {%0 <858>(Lvl 2)<900>}; #SUB {It emits a slight octarine glow} {%0 <858>(Lvl 2)<898>};
#SUB {It softly pulses in dull octarine shades} {%0 <858>(Lvl 3)<900>}; #SUB {It softly pulses in dull octarine shades} {%0 <858>(Lvl 3)<898>};
#SUB {It gives off a steady but dull octarine glow} {%0 <858>(Lvl 4)<900>}; #SUB {It gives off a steady but dull octarine glow} {%0 <858>(Lvl 4)<898>};
#SUB {It gives off a steady octarine glow} {%0 <858>(Lvl 5)<900>}; #SUB {It gives off a steady octarine glow} {%0 <858>(Lvl 5)<898>};
#SUB {It glows an intense octarine} {%0 <858>(Lvl 6)<900>}; #SUB {It glows an intense octarine} {%0 <858>(Lvl 6)<898>};
#SUB {It emits a bright octarine colour} {%0 <858>(Lvl 7)<900>}; #SUB {It emits a bright octarine colour} {%0 <858>(Lvl 7)<898>};
#SUB {It brightly pulses octarine} {%0 <858>(Lvl 8)<900>}; #SUB {It brightly pulses octarine} {%0 <858>(Lvl 8)<898>};
#SUB {It glows brilliant octarine shades} {%0 <858>(Lvl 9)<900>}; #SUB {It glows brilliant octarine shades} {%0 <858>(Lvl 9)<898>};
#SUB {It radiates pure octarine brilliance} {%0 <858>(Lvl 10)<900>}; #SUB {It radiates pure octarine brilliance} {%0 <858>(Lvl 10)<898>};
#NOP ==[Background Magic Levels]==; #NOP ==[Background Magic Levels]==
#SUB {There is the residual taste of magic in this place} {%0 <858>(50-149 thaums)<900>}; #SUB {There is the residual taste of magic in this place} {%0 <858>(50-149 thaums)<898>};
#SUB {This place has seen some use of magic} {%0 <858>(150-299 thaums)<900>}; #SUB {This place has seen some use of magic} {%0 <858>(150-299 thaums)<898>};
#SUB {A considerable amount of magic has been used here} {%0 <858>(300-499 thaums)<900>}; #SUB {A considerable amount of magic has been used here} {%0 <858>(300-499 thaums)<898>};
#SUB {A very large quantity of magic has been manipulated here} {%0 <858>(500-749 thaums)<900>}; #SUB {A very large quantity of magic has been manipulated here} {%0 <858>(500-749 thaums)<898>};
#NOP red; #NOP red;
#SUB {You can feel the Dungeon Dimensions trying to push in} {%0 <818>(750-1000 thaums)<900>}; #SUB {You can feel the Dungeon Dimensions trying to push in} {%0 <818>(750-1000 thaums)<898>};
#NOP bold red!; #NOP bold red!;
#SUB {Little sparks flash in from the Dungeon Dimensions} {%0 <118>(1001-1500 thaums)<900>}; #SUB {Little sparks flash in from the Dungeon Dimensions} {%0 <118>(1001-1500 thaums)<098>};
#SUB {Apparations of things with lots of tentacles seem to be on the edge of your vision} {%0 <118>(1501-2000 thaums)<900>}; #SUB {Apparations of things with lots of tentacles seem to be on the edge of your vision} {%0 <118>(1501-2000 thaums)<098>};
#SUB {So much magic has been expended here that the area is in danger of dumping itself into the Dungeon Dimensions} {%0 <118>(2001-5000 thaums)<900>}; #SUB {So much magic has been expended here that the area is in danger of dumping itself into the Dungeon Dimensions} {%0 <118>(2001-5000 thaums)<098>};
#NOP ==[PFG Damage Values]==; #NOP ==[PFG Damage Values]==
#SUB {^{The fire singes} } {%1 <019>(<<119>15<019>%)<099> }; #SUB {^{The fire singes} } {%1 <019>(<<119>15<019>%)<099> };
#SUB {^{The fire burns} } {%1 <019>(<119>15<019>-<119>30<019>%)<099> }; #SUB {^{The fire burns} } {%1 <019>(<119>15<019>-<119>30<019>%)<099> };
#SUB {^{The fire crisps} } {%1 <019>(<119>30<019>-<119>60<019>%)<099> }; #SUB {^{The fire crisps} } {%1 <019>(<119>30<019>-<119>60<019>%)<099> };
@ -47,26 +47,17 @@
#SUB {^{The fire vaporises} } {%1 <019>(><119>90<019>%)<099> }; #SUB {^{The fire vaporises} } {%1 <019>(><119>90<019>%)<099> };
#NOP ==[Replace Spell Casting]==; #NOP ==[Replace Spell Casting]==
#ACTION {^You prepare to cast %1 {at|on} %2.$} { #showme { * <138>%1<099> -> %2}; #line gag} {3}; #ACTION {^You prepare to cast %1 {at|on} %2.$} { #showme { * <138>%1<098> -> %2}; #line gag} {3}
#ACTION {^You prepare to cast %1.$} { #showme { * <138>%1<099>}; #line gag} {4}; #ACTION {^You prepare to cast %1.$} { #showme { * <138>%1<098>}; #line gag} {4}
#NOP ==[Colour FCI Output]==; #NOP ==[Colour FCI Output]==
#SUB {The weave indicates that %1 is a %2, with %3 charge{s?} remaining.} {The weave indicates that <138>%1<900> is a <138>%2<900> with <158>%3<900> charges remaining.}; #SUB {The weave indicates that %1 is a %2, with %3 charge{s?} remaining.} {The weave indicates that <138>%1<098> is a <138>%2<098> with <158>%3<098> charges remaining.};
#NOP ==[Library/Distortions]== #NOP ==[Library/Distortions]==
#HIGHLIGHT {^The area seems more mundane than before\.$} {green underscore}; #HIGHLIGHT {^The area seems more mundane than before\.$} {green underscore};
#HIGHLIGHT {^{?>You notice an odd rippling in the air\.|The awful sound of nails being dragged down a blackboard fills the area briefly\.|A distortion in time and space is forming!}$} {red underscore}; #HIGHLIGHT {^{?>You notice an odd rippling in the air\.|The awful sound of nails being dragged down a blackboard fills the area briefly\.|A distortion in time and space is forming!}$} {red underscore};
#NOP ==[Contemplate]==;
#SUB {^You focus your mind {once more on|on} %2.$} {You <188>focus<900> your mind %1 <138>%2<900>.};
#SUB {^With %1 at the forefront of your mind, you enter a deep trance.$} {With <138>%1<900> at the forefront of your mind, you enter a deep <188>trance<900>.};
#SUB {^You feel %1 sitting in your mind, eager to be fed again.$} {You feel <138>%1<900> sitting in your <188>mind<900>, eager to be <128>fed again<900>.};
#SUB {^You have previously contemplated %1.$} {You have previously contemplated <138>%1<900>.};
#SUB {^Your mind feels less crowded as %1 returns to its normal place.} {Your mind feels less <188>crowded<900> as <138>%1<900> returns to its <188>normal<900> place.};
#HIGHLIGHT {^You are unconscious. You can't do anything.$} {<afc>};
#HIGHLIGHT {^You emerge from your trance.$} {<caf>};
#CLASS {magic} {close}; #CLASS {magic} {close};

View File

@ -73,9 +73,9 @@ class MapRoute:
while bDone == False: while bDone == False:
# Loop through all the rooms we have yet to do # Loop through all the rooms we have yet to do
iPreviousTotal = iTotalRooms iPreviousTotal = iTotalRooms
for iN in range(iNextRoom - 1, iPreviousTotal): for iN in xrange(iNextRoom - 1, iPreviousTotal):
# Loop through all exits from this room # Loop through all exits from this room
for sKey, sExitData in self.exits_by_id[sDoRoom[iN]].items(): for sKey, sExitData in self.exits_by_id[sDoRoom[iN]].iteritems():
# Make sure we aren't looping back around on ourselves, and that we haven't already finished # Make sure we aren't looping back around on ourselves, and that we haven't already finished
if sKey != start_id and bEverDone.get(sKey) == None and iFinalRoom == 0: if sKey != start_id and bEverDone.get(sKey) == None and iFinalRoom == 0:
iTotalRooms = iTotalRooms + 1 iTotalRooms = iTotalRooms + 1
@ -131,7 +131,7 @@ class MapRoute:
if iCurRoom == 1: if iCurRoom == 1:
bDone = True bDone = True
sRealPath = "" sRealPath = ""
for iN in range(len(sPath), 0, -1): for iN in xrange(len(sPath), 0, -1):
if sRealPath != "": if sRealPath != "":
sRealPath = "{};".format(sRealPath) sRealPath = "{};".format(sRealPath)
sRealPath = "{}{}".format(sRealPath, sPath[iN-1]) sRealPath = "{}{}".format(sRealPath, sPath[iN-1])

View File

@ -1,61 +0,0 @@
#!/usr/bin/env python
import re
import sys
import json
class MapDoorTextControl:
colour_map = {
# http://terminal-color-builder.mudasobwa.ru/
"orange": "\033[01;38;05;214m",
"red": "\033[01;38;05;196m",
"cyan": "\033[01;38;05;37m",
"reset": "\033[00;39;49m"
}
def __init__(self):
self.custom_matches = []
# Load any additional custom matches
with open('logs/features/mdt_custom_matches.json', 'r') as custom_file:
config = json.load(custom_file)
# Strip comments from custom matches
for match in config:
if len(match) > 1:
self.custom_matches.append(match)
def _write_file(self):
with open('logs/features/mdt_custom_matches.json', 'w') as custom_file:
json.dump(self.custom_matches, custom_file)
def add_match(self, pattern, color="red", value=5, is_regex=False):
self.custom_matches.append([pattern, color, value, is_regex])
self._write_file()
def remove_match(self, pattern):
for match in self.custom_matches:
if match[0] == pattern or pattern in match[0]:
self.custom_matches.remove(match)
self._write_file()
if __name__ == '__main__':
if len(sys.argv) < 2:
#print('[error] Missing inputs. Usage: mdt_matchcontrol.py <command> <pattern>')
print(0)
sys.exit()
script, command, pattern = sys.argv.pop(0), sys.argv.pop(0), " ".join(sys.argv)
mdtc = MapDoorTextControl()
if command == "add":
mdtc.add_match(pattern)
print(1)
elif command == "remove":
mdtc.remove_match(pattern)
print(1)
else:
#print('[error] Unrecognized command, valid commands are "add" and "remove".')
print(0)

View File

@ -61,14 +61,6 @@ class MapDoorText:
"sw": "sw", "sw": "sw",
"w": "w", "w": "w",
"nw": "nw", "nw": "nw",
"fore": "f",
"aft": "a",
"starboard": "s",
"port": "p",
"port aft": "pa",
"port fore": "pf",
"starboard aft": "sa",
"starboard fore": "sf"
} }
colour_map = { colour_map = {
# http://terminal-color-builder.mudasobwa.ru/ # http://terminal-color-builder.mudasobwa.ru/
@ -86,12 +78,6 @@ class MapDoorText:
with open('mdtconfig.json', 'r') as config_file: with open('mdtconfig.json', 'r') as config_file:
config = json.load(config_file) config = json.load(config_file)
# Load any additional custom matches
with open('logs/features/mdt_custom_matches.json', 'r') as custom_file:
additional_matches = json.load(custom_file)
config['custom_matches'] = config['custom_matches'] + additional_matches;
# Strip comments from custom matches # Strip comments from custom matches
for match in config['custom_matches']: for match in config['custom_matches']:
if len(match) > 1: if len(match) > 1:
@ -193,30 +179,6 @@ class MapDoorText:
elif entry.startswith("west"): elif entry.startswith("west"):
is_direction = 1 is_direction = 1
this_direction = "west" this_direction = "west"
elif entry.startswith("port fore"):
is_direction = 1
this_direction = "port fore"
elif entry.startswith("port aft"):
is_direction = 1
this_direction = "port aft"
elif entry.startswith("starboard fore"):
is_direction = 1
this_direction = "starboard fore"
elif entry.startswith("starboard aft"):
is_direction = 1
this_direction = "starboard aft"
elif entry.startswith("port"):
is_direction = 1
this_direction = "port"
elif entry.startswith("starboard"):
is_direction = 1
this_direction = "starboard"
elif entry.startswith("fore"):
is_direction = 1
this_direction = "fore"
elif entry.startswith("aft"):
is_direction = 1
this_direction = "aft"
if is_direction == 1: if is_direction == 1:
if not data['ignoring_exits']: if not data['ignoring_exits']:

View File

@ -4,13 +4,7 @@
#NOP ==[ Load Individual Mission stuff ]== #NOP ==[ Load Individual Mission stuff ]==
#READ {src/missions/sausages.tin}; #READ {src/missions/sausages.tin};
#READ {src/missions/letters.tin}; #READ {src/missions/letters.tin};
#READ {src/missions/sailing.tin};
#READ {src/missions/jobmarket.tin};
#VARIABLE {missiontimers_file} {logs/features/missiontimers_sync.tin};
#NOP ==[ Missions command reports on each modules active/retry lists ]==;
#ALIAS {missions} { #ALIAS {missions} {
#if {&missions == 0} { #if {&missions == 0} {
#return; #return;
@ -19,113 +13,125 @@
#format {current_time} {%T}; #format {current_time} {%T};
#var {mission_display_list} {}; #var {mission_display_list} {};
#nop ==============================;
#nop ===== Sailing Missions =====;
#nop ==============================;
#if {&missions[sailing]} {
#foreach {*missions[sailing][active_list][]} {player} {
#var {mins} {@ts_to_min{$current_time;$missions[sailing][active_list][$player]}};
#math {mins} {120 - $mins};
#math {hours} {$mins / 60};
#math {mins} {$mins % 60};
#if {$mins < 0} {
#unvar {missions[sailing][active_list][$player]};
};
#else {
#if {$hours <= 0} {
#format {mt_display} {\t<138>*<099> <acf>%s<099> can do another sailing mission in <139>%d<099> minute(s).<099>} {$player}{$mins};
};
#else {
#format {mt_display} {\t<138>*<099> <acf>%s<099> can do another sailing mission in <139>%d<099> hour and <139>%d<099> minute(s).<099>} {$player}{$hours}{$mins};
};
#list {mission_display_list[$player]} {add} {$mt_display};
};
};
};
#nop ==============================; #nop ==============================;
#nop ===== Sausage Missions =====; #nop ===== Sausage Missions =====;
#nop ==============================; #nop ==============================;
#if {&missions[sausage]} { #if {&missions[sausage]} {
#foreach {*missions[sausage][active_list][]} {player} { #foreach {$missions[sausage][active_list][]} {player} {
#if {&missions[sausage][active_list][$player][easy]} { #if {&missions[sausage][active_list][$player][easy]} {
#var {mins} {@ts_to_min{$current_time;$missions[sausage][active_list][$player][easy]}}; #math {mins} {$current_time - $missions[sausage][active_list][$player][easy]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {mins} {60 - $mins}; #math {mins} {60 - $mins};
#format {mt_display} {\t<138>*<099> <acf>%s<099> can do another unspiced sausage mission in <139>%d<099> minutes.<099>} {$player}{$mins}; #format {mt_display} {\t<129>%s<099> can do another unspiced sausage mission in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display}; #list {mission_display_list[$player]} {add} {$mt_display};
}; };
#if {&missions[sausage][active_list][$player][hard]} { #if {&missions[sausage][active_list][$player][hard]} {
#var {mins} {@ts_to_min{$current_time;$missions[sausage][active_list][$player][hard]}}; #math {mins} {$current_time - $missions[sausage][active_list][$player][hard]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {mins} {60 - $mins}; #math {mins} {60 - $mins};
#format {mt_display} {\t<138>*<099> <acf>%s<099> can do another spiced sausage mission in <139>%d<099> minutes.<099>} {$player}{$mins}; #format {mt_display} {\t<129>%s<099> can do another spiced sausage mission in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display}; #list {mission_display_list[$player]} {add} {$mt_display};
}; };
}; };
#foreach {*missions[sausage][retry_list][]} {player} { #foreach {$missions[sausage][retry_list][]} {player} {
#var {mins} {@ts_to_min{$current_time;$missions[sausage][retry_list][$player]}}; #math {mins} {$current_time - $missions[sausage][retry_list][$player]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {mins} {10 - $mins}; #math {mins} {10 - $mins};
#format {mt_display} {\t<138>*<099> <acf>%s<099> can request a new sausage mission in <139>%d<099> minutes.<099>} {$player}{$mins}; #format {mt_display} {\t<129>%s<099> can request a new sausage mission in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display}; #list {mission_display_list[$player]} {add} {$mt_display};
}; };
}; };
#nop =================================;
#nop ===== Job Market Missions =====;
#nop =================================;
#if {&missions[jobmarket]} {
#foreach {*missions[jobmarket][active_list][]} {player} {
#foreach {*missions[jobmarket][active_list][$player][]} {job} {
#var {mins} {@ts_to_min{$current_time;$missions[jobmarket][active_list][$player][$job]}};
#math {mins} {60 - $mins};
#format {mt_display} {\t<138>*<099> <acf>%s<099> can do another Job Market "%c%s%c" mission in <139>%d<099> minutes.<099>} {$player}{Jade}{$job}{<099>}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display};
};
};
#foreach {*missions[jobmarket][retry_list][]} {player} {
#var {mins} {@ts_to_min{$current_time;$missions[jobmarket][retry_list][$player]}};
#math {mins} {10 - $mins};
#format {mt_display} {\t<138>*<099> <acf>%s<099> can request a new Job Market mission in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display};
};
};
#nop ==============================; #nop ==============================;
#nop ===== Dead Letters =====; #nop ===== Dead Letters =====;
#nop ==============================; #nop ==============================;
#if {&missions[letter]} { #if {&missions[letter]} {
#foreach {*missions[letter][active_list][]} {player} { #foreach {$missions[letter][active_list][]} {player} {
#foreach {*missions[letter][active_list][$player][]} {difficulty} { #if {&missions[letter][active_list][$player][difficult]} {
#var {mins} {@ts_to_min{$current_time;$missions[letter][active_list][$player][$difficulty]}}; #math {mins} {$current_time - $missions[letter][active_list][$player][difficult]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {mins} {60 - $mins}; #math {mins} {60 - $mins};
#if {$mins < 0} { #if {$mins < 0} {
#unvar {missions[letter][active_list][$player][$difficulty]}; #unvar {missions[letter][active_list][$player][difficult]};
} { } {
#format {mt_display} {\t<138>*<099> <acf>%s<099> can do another "<188><afc>%s<099>" letter in <139>%d<099> minutes.<099>} {$player}{$letter_types[$difficulty]}{$mins}; #format {mt_display} {\t<129>%s<099> can do another difficult customer letter in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display};
};
};
#if {&missions[letter][active_list][$player][distant]} {
#math {mins} {$current_time - $missions[letter][active_list][$player][distant]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {mins} {60 - $mins};
#if {$mins < 0} {
#unvar {missions[letter][active_list][$player][distant]};
} {
#format {mt_display} {\t<129>%s<099> can do another distant lands letter in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display};
};
};
#if {&missions[letter][active_list][$player][far]} {
#math {mins} {$current_time - $missions[letter][active_list][$player][far]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {mins} {60 - $mins};
#if {$mins < 0} {
#unvar {missions[letter][active_list][$player][far]};
} {
#format {mt_display} {\t<129>%s<099> can do another far away letter in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display};
};
};
#if {&missions[letter][active_list][$player][close]} {
#math {mins} {$current_time - $missions[letter][active_list][$player][close]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {mins} {60 - $mins};
#if {$mins < 0} {
#unvar {missions[letter][active_list][$player][close]};
} {
#format {mt_display} {\t<129>%s<099> can do another close-by letter in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display};
};
};
#if {&missions[letter][active_list][$player][local]} {
#math {mins} {$current_time - $missions[letter][active_list][$player][local]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {mins} {60 - $mins};
#if {$mins < 0} {
#unvar {missions[letter][active_list][$player][local]};
} {
#format {mt_display} {\t<129>%s<099> can do another local letter in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display}; #list {mission_display_list[$player]} {add} {$mt_display};
}; };
}; };
}; };
#foreach {*missions[letter][retry_list][]} {player} {
#var {mins} {@ts_to_min{$current_time;$missions[letter][retry_list][$player]}}; #foreach {$missions[letter][retry_list][]} {player} {
#math {mins} {$current_time - $missions[letter][retry_list][$player]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {mins} {10 - $mins}; #math {mins} {10 - $mins};
#if {$mins < 0} { #if {$mins < 0} {
#unvar {missions[letter][retry_list][player]}; #unvar {missions[letter][retry_list][player]};
} { } {
#format {mt_display} {\t<138>*<099> <acf>%s<099> can request another letter in <139>%d<099> minutes.<099>} {$player}{$mins}; #format {mt_display} {\t<129>%s<099> can request another letter in <139>%d<099> minutes.<099>} {$player}{$mins};
#list {mission_display_list[$player]} {add} {$mt_display}; #list {mission_display_list[$player]} {add} {$mt_display};
}; };
}; };
@ -138,59 +144,16 @@
#nop ==============================; #nop ==============================;
#list {mission_display_list} {size} {mdl_count}; #list {mission_display_list} {size} {mdl_count};
#if {$mdl_count > 0} { #if {$mdl_count > 0} {
#echo {<acf>[<fff>missions<acf>] Active Mission Timers:<099>}; #echo {<149>[MT] Active Mission Timers:<099>};
#foreach {*mission_display_list[]} {player} { #foreach {$mission_display_list[]} {player} {
#foreach {$mission_display_list[$player][%*]} {mt_display} { #foreach {$mission_display_list[$player][%*]} {mt_display} {
#showme {$mt_display}; #showme {$mt_display};
}; };
}; };
} { } {
#echo {<acf>[<fff>missions<acf>] No current mission timers.<099>}; #echo {<149>[MT] No current mission timers.<099>};
}; };
}; };
#FUNCTION {ts_to_min} {
#nop @ts_to_min{<current_time>\;<missiontime>};
#math {mins} {%1 - %2};
#math {mins} {($mins - (60 - 1)) / 60};
#return {$mins};
};
#NOP ==[ read/write from file for persistence ]==;
#ALIAS {mtsave} {
/writemissiontimerstofile;
#format {mtsync_message} {<acf>[<fff>missions<acf>] <138>*<900><acf> Saved all available mission timers from %cthis session%c to the disk.<099>} {Green}{<acf>};
#echo {$mtsync_message};
};
#ALIAS {/writemissiontimerstofile} {
#class {mtsync} {clear};
#class {mtsync} {open};
#var {missions_sync} {$missions};
#class {mtsync} {close};
#system {touch $missiontimers_file};
#class {mtsync} {write} {$missiontimers_file};
}
#ALIAS {mtload} {
#class {mtsync} {clear};
#class {mtsync} {read} {$missiontimers_file};
#nop == overwrite mission variable with loaded data;
#variable {missions} {$missions_sync};
#nop == recreate delays for all mission modules;
/sausage_recreate_delays;
/sailing_recreate_delays;
/letters_recreate_delays;
/jobmarket_recreate_delays;
#format {mtsync_message} {<acf>[<fff>missions<acf>] <138>*<900><acf> Synced all available mission timers from %clast session%c off the disk.<099>} {Green}{<188><acf>};
#echo {$mtsync_message};
};
#CLASS {missiontimers} {close}; #CLASS {missiontimers} {close};

View File

@ -1,151 +0,0 @@
#CLASS {missiontimers_jobmarket} {kill};
#CLASS {missiontimers_jobmarket} {open};
#VARIABLE {missions[jobmarket]} {
{board_codes}{}
{current_code}{0}
{current_name}{0}
};
#NOP Trigger to capture what "code" belongs to what job when reading the board;
#ACTION {^{[A-Z]{2}}) {Thirst Quencher|Gofer|Dog Walker|Advertising Manager|Street Fixer|Sett Maker|Delivery Lackey|Delivery Runner|Full-time Street Repairer|Textiles Fixer|Expert Street Maintenance Technician|Deliverer of Rare Items|Deliverer of Foreign Goods}$} {
#VARIABLE {missions[jobmarket][board_codes][%1]} {%2};
};
#NOP Alias to capture when we apply for a job at Mr Werks;
#ALIAS {^apply for{ job|} {[A-z]{2}}$} {
#FORMAT {jobcode} {%u} {%2};
#SEND {apply for job $jobcode};
#NOP Reference code in last known board_codes table to get a job name;
#VARIABLE {missions[jobmarket][current_code]} {$jobcode};
#VARIABLE {jobname} {$missions[jobmarket][board_codes][$jobcode]};
#VARIABLE {missions[jobmarket][current_name]} {$jobname};
};
#NOP Alias to capture when we resign from a job;
#ALIAS {^resign from job} {
#SEND {resign from job};
#LOCAL {current_name} {$missions[jobmarket][current_name]};
#IF {"$current_name" != "0"} {
#UNVARIABLE {missions[jobmarket][active_list][$GMCP[charinfo][capname]][$current_name]};
#FORMAT {missions[jobmarket][retry_list][$GMCP[charinfo][capname]]} {%T};
#line sub variable {
#delay {600} {
#format {jobmarket_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now apply for another Job Market mission.<099>} {$GMCP[charinfo][capname]};
#echo {$jobmarket_timer_line};
#unvar {$jobmarket_timer_line};
};
};
#unvar {delayname};
};
};
#NOP Trigger to capture the job being accepted so we get an accurate start-time stamp;
#ACTION {Mr Werks hands you an official employment writ.} {
#NOP Set a timestamp for when we began this job;
#VARIABLE {missions[jobmarket][current_name]} {$jobname};
#IF {"$missions[jobmarket][current_name]" != "0"} {
#FORMAT {missions[jobmarket][active_list][$GMCP[charinfo][capname]][$missions[jobmarket][current_name]]} {%T};
};
};
#NOP Trigger to capture time on the job expiring;
#ACTION {^The time has expired on your present job. You do not need to finish the rest of your deliveries, Mr Werks will find someone else to do this.$} {
#format {current_time} {%T};
#format {current_player} {%s} {$GMCP[charinfo][capname]};
#format {current_job} {%s} {$missions[jobmarket][current_name]};
#variable {missions[jobmarket][active_list][$current_player][$current_job]} {$current_time};
#nop == configure a message display when the timer is up ==;
#math {mins} {$current_time - $missions[jobmarket][active_list][$current_player][$current_job]};
#math {mins} {($mins - (60 - 1)) / 60};
#math {time_left} {60 - $mins};
#line sub variable {
#delay {$time_left} {
#format {jobmarket_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another Job Market "%c%s%c" mission.<099>} {$GMCP[charinfo][capname]} {Jade} {$missions[jobmarket][current_name]} {<acf>};
#echo {$jobmarket_timer_line};
#unvar {$jobmarket_timer_line};
#unvar {missions[jobmarket][active_list][$current_player][$current_job]};
};
};
#unvar {delayname};
};
#NOP Trigger to capture reward from completing a job;
#ACTION {^You have been awarded {[0-9]{1,7}} experience points {for|for partially} completing this job%3} {
#nop Mission completed, so store current mission for current player in active_list;
#format {current_time} {%T};
#format {current_player} {%s} {$GMCP[charinfo][capname]};
#format {current_job} {%s} {$missions[jobmarket][current_name]};
#variable {missions[jobmarket][active_list][$current_player][$current_job]} {$current_time};
#nop == configure a message display when the timer is up ==;
#line sub variable {
#format {delayname} {jobmarket_%s_%s} {$current_player} {$missions[jobmarket][current_name]};
#delay {$delayname} {
#format {jobmarket_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another Job Market "%c%s%c" mission.<099>} {$GMCP[charinfo][capname]} {Jade} {$missions[jobmarket][current_name]} {<acf>};
#echo {$jobmarket_timer_line};
#unvar {$jobmarket_timer_line};
#unvar {missions[jobmarket][active_list][$current_player][$current_job]};
} {3600};
};
#unvar {delayname};
};
#ALIAS {/jobmarket_recreate_delays} {
#format {current_time} {%T};
#nop == start with retry list;
#foreach {*missions[jobmarket][retry_list][]} {player} {
#local {delay_time} {$missions[jobmarket][retry_list][$player]};
#math {delay_time} {600 - ($current_time - $delay_time)};
#if {$delay_time < 1} {
#unvar {missions[jobmarket][retry_list][$player]};
#continue;
};
#line sub variable {
#delay {$delay_time} {
#format {jobmarket_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now apply for another Job Market mission.<099>} {$player};
#echo {$jobmarket_timer_line};
#unvar {jobmarket_timer_line};
#unvar {missions[jobmarket][retry_list][$player]};
};
};
};
#nop == do all the difficulties;
#foreach {*missions[jobmarket][active_list][]} {player} {
#foreach {*missions[jobmarket][active_list][$player][]} {$job} {
#local {delay_time} {$missions[jobmarket][active_list][$player][$job]};
#math {delay_time} {3600 - ($current_time - $delay_time)};
#if {$delay_time < 1} {
#unvar {missions[jobmarket][active_list][$player][$difficulty]};
#continue;
};
#line sub variable {
#delay {$delay_time} {
#format {jobmarket_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another Job Market "%c%s%c" mission.<099>} {$player} {Jade} {$job} {<acf>};
#echo {$jobmarket_timer_line};
#unvar {jobmarket_timer_line};
#unvar {missions[jobmarket][active_list][$player][$difficulty]};
};
};
};
};
};
#CLASS {missiontimers_jobmarket} {close};

View File

@ -1,38 +1,43 @@
#CLASS {missiontimers_letters} {kill}; #CLASS {missiontimers_letters} {kill};
#CLASS {missiontimers_letters} {open}; #CLASS {missiontimers_letters} {open};
#VARIABLE {letter_types} { #NOP =======================
{DLA}{DLA (close by\; smudged)} #NOP ===== VARIABLES =====
{DLB}{DLB (close by\; handwriting)} #NOP =======================
{DLC}{DLC (close by\; vague)}
{DLD}{DLD (close by\; city)} #NOP [1 = Local, 2 = Close-by, 3 = Far Away, 4 = Distant Lands, 5 = Difficult Customer]
{DLE}{DLE (far away\; smudged)} #VAR {dead_letter_rewards} {
{DLF}{DLF (far away\; handwriting)} {4 Ankh-Morpork dollars}{1}
{DLG}{DLG (far away\; vague)} {8 Ankh-Morpork dollars}{2}
{DLH}{DLH (far away\; city)} {3 Djelian talents and 5 Djelian tooni}{3}
{DLI}{DLI (difficult customer)} {4 Lancre crowns and 2 Lancre shillings}{3}
}; {7 Ephebian decadrachmae and 2 Ephebian stater}{3}
{2 Ankh-Morpork ten-dollars}{3}
{2 Genuan forins and 5 Genuan livres}{3}
{1 Klatchian ten dinar and 2 Klatchian two dinar coins}{3}
{1 Agatean Empire ten-rhinu and 5 Agatean Empire rhinu}{3}
{7 Lancre crowns and 5 Lancre shillings}{4}
{2 Agatean Empire ten-rhinu and 5 Agatean Empire rhinu}{4}
{6 Djelian talents and 5 Djelian tooni}{4}
{4 Genuan forins and 3 Genuan livres}{4}
{3 Ankh-Morpork ten-dollars and 2 Ankh-Morpork dollars}{4}
{1 Ephebian mina and 5 Ephebian decadrachmae}{4}
{3 Agatean Empire ten-rhinu and 5 Agatean Empire rhinu}{5}
{4 Ankh-Morpork ten-dollars and 5 Ankh-Morpork dollars}{5}
{1 Lancre sovereign and 1 Lancre tencrown}{5}
{2 Ephebian minae}{5}
{1 Genuan ducat and 2 Genuan forins}{5}
}
#VARIABLE {missions[letter]} { #VARIABLE {missions[letter]} {
{last_difficulty}{0} {last_difficulty}{0}
} }
#nop Capture offering to deliver a letter;
#ALIAS {^offer to deliver {(d|D)[A-z]{2}}$} {
#send {%0};
#format {missions[letter][last_difficulty]} {%u} {%1};
};
#nop Capture offering to return a letter;
#ALIAS {return letter} { #NOP =======================
#send {return letter}; #NOP ===== Aliases =====
#format {missions[letter][retry_list][$GMCP[charinfo][capname]]} {%T}; #NOP =======================
/letter_returned;
};
#ACTION {^You offer to give an? {.+?} letter to Frank.$} {
#format {missions[letter][retry_list][$GMCP[charinfo][capname]]} {%T};
#nop [missions[letter][last_difficulty]];
/letter_returned;
};
#ALIAS {/letter_returned} { #ALIAS {/letter_returned} {
#format {missions[letter][retry_list][$GMCP[charinfo][capname]]} {%T}; #format {missions[letter][retry_list][$GMCP[charinfo][capname]]} {%T};
@ -40,7 +45,7 @@
#line sub variable { #line sub variable {
#format {delayname} {letter_retry_%s} {$GMCP[charinfo][capname]}; #format {delayname} {letter_retry_%s} {$GMCP[charinfo][capname]};
#delay {$delayname} { #delay {$delayname} {
#format {letter_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now request another letter from Frank.<099>} {$GMCP[charinfo][capname]}; #format {letter_timer_line} {%c[MT] %c*%c %s can now request another letter from Frank.} {bold blue} {bold yellow} {bold blue} {$GMCP[charinfo][capname]};
#echo {$letter_timer_line}; #echo {$letter_timer_line};
#unvar {letter_timer_line}; #unvar {letter_timer_line};
@ -50,78 +55,127 @@
#unvar {delayname}; #unvar {delayname};
}; };
#nop Capture being rewarded for completing delivery of the letter; #ALIAS {^return letter$} {
#ACTION {^You have been awarded {[0-9]{1,7}} experience points for delivering this letter.$} { #send { return letter};
#local {last_difficulty} {$missions[letter][last_difficulty]}; /letter_returned
};
#nop If we don't have a difficulty match, we can't act.; #ALIAS {^give letter to {f|F}rank$} {
#if {"$last_difficulty" == "0"} { #send { give letter to Frank};
/letter_returned
};
#NOP =======================
#NOP ===== Actions =====
#NOP =======================
#ACTION {^You have been awarded %d experience points and given %2.$} {
#nop You have been awarded 60407 experience points and given 2 Agatean Empire ten-rhinu and 5 Agatean Empire rhinu.
#var {missions[letter][last_difficulty]} {0};
#if {&dead_letter_rewards[%2]} {
#var {missions[letter][last_difficulty]} {$dead_letter_rewards[%2]};
};
};
#ACTION {^You salute smartly as you deliver a letter} {
#nop If we don't have a difficulty match, we can't act.
#if {"$missions[letter][last_difficulty]" == "0"} {
#return; #return;
}; };
#nop If we know the difficulty, set the appropriate timer;
#nop You have been awarded 60407 experience points and given 2 Agatean Empire ten-rhinu and 5 Agatean Empire rhinu.; #switch {$missions[letter][last_difficulty]} {
#format {missions[letter][active_list][$GMCP[charinfo][capname]][$last_difficulty]} {%T}; #case {1} {
#nop Local;
#if {&missions[letter][active_list][$GMCP[charinfo][capname]][local]} { #break; };
#format {missions[letter][active_list][$GMCP[charinfo][capname]][local]} {%T};
#line sub variable { #line sub variable {
#format {delayname} {letter_%s_%s} {$last_difficulty} {$GMCP[charinfo][capname]}; #format {delayname} {letter_local_%s} {$GMCP[charinfo][capname]};
#delay {$delayname} { #delay {$delayname} {
#format {letter_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another "%c%s%c" letter.<099>} {$GMCP[charinfo][capname]} {Jade} {$letter_types[$last_difficulty]} {<acf>}; #format {letter_timer_line} {%c[MT] %c*%c %s can now do another local letter.} {bold blue} {bold yellow} {bold blue} {$GMCP[charinfo][capname]};
#echo {$letter_timer_line}; #echo {$letter_timer_line};
#unvar {letter_timer_line}; #unvar {letter_timer_line};
#unvar {missions[letter][active_list][$GMCP[charinfo][capname]][$last_difficulty]}; #unvar {missions[letter][active_list][$GMCP[charinfo][capname]][local]};
} {3600}; } {3600};
}; };
#unvar {delayname}; #unvar {delayname};
#variable {missions[letter][last_difficulty]} {0};
};
#ALIAS {/letters_recreate_delays} {
#format {current_time} {%T};
#nop == start with retry list;
#foreach {*missions[letter][retry_list][]} {player} {
#local {delay_time} {$missions[letter][retry_list][$player]};
#math {delay_time} {600 - ($current_time - $delay_time)};
#if {$delay_time < 1} {
#unvar {missions[letter][retry_list][$player]};
#continue;
}; };
#case {2} {
#nop Closeby;
#if {&missions[letter][active_list][$GMCP[charinfo][capname]][close]} { #break; };
#format {missions[letter][active_list][$GMCP[charinfo][capname]][close]} {%T};
#line sub variable { #line sub variable {
#delay {$delay_time} { #format {delayname} {letter_close_%s} {$GMCP[charinfo][capname]};
#format {letter_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now request another letter from Frank.<099>} {$player}; #delay {$delayname} {
#format {letter_timer_line} {%c[MT] %c*%c %s can now do another close-by letter.} {bold blue} {bold yellow} {bold blue} {$GMCP[charinfo][capname]};
#echo {$letter_timer_line}; #echo {$letter_timer_line};
#unvar {letter_timer_line}; #unvar {letter_timer_line};
#unvar {missions[letter][retry_list][$player]}; #unvar {missions[letter][active_list][$GMCP[charinfo][capname]][close]};
} {3600};
}; };
#unvar {delayname};
}; };
}; #case {3} {
#nop == do all the difficulties; #nop Faraway;
#foreach {*missions[letter][active_list][]} {player} { #if {&missions[letter][active_list][$GMCP[charinfo][capname]][far]} { #break; };
#foreach {*missions[letter][active_list][$player][]} {$difficulty} { #format {missions[letter][active_list][$GMCP[charinfo][capname]][far]} {%T};
#local {delay_time} {$missions[letter][active_list][$player][$difficulty]};
#math {delay_time} {3600 - ($current_time - $delay_time)};
#if {$delay_time < 1} {
#unvar {missions[letter][active_list][$player][$difficulty]};
#continue;
};
#line sub variable { #line sub variable {
#delay {$delay_time} { #format {delayname} {letter_far_%s} {$GMCP[charinfo][capname]};
#format {letter_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another "%c%s%c" letter.<099>} {$player} {Jade} {$letter_types[$difficulty]} {<acf>}; #delay {$delayname} {
#format {letter_timer_line} {%c[MT] %c*%c %s can now do another far away letter.} {bold blue} {bold yellow} {bold blue} {$GMCP[charinfo][capname]};
#echo {$letter_timer_line}; #echo {$letter_timer_line};
#unvar {letter_timer_line}; #unvar {letter_timer_line};
#unvar {missions[letter][active_list][$player][$difficulty]}; #unvar {missions[letter][active_list][$GMCP[charinfo][capname]][far]};
}; } {3600};
}; };
#unvar {delayname};
};
#case {4} {
#nop Distantland;
#if {&missions[letter][active_list][$GMCP[charinfo][capname]][distant]} { #break; };
#format {missions[letter][active_list][$GMCP[charinfo][capname]][distant]} {%T};
#line sub variable {
#format {delayname} {letter_distant_%s} {$GMCP[charinfo][capname]};
#delay {$delayname} {
#format {letter_timer_line} {%c[MT] %c*%c %s can now do another distant land letter.} {bold blue} {bold yellow} {bold blue} {$GMCP[charinfo][capname]};
#echo {$letter_timer_line};
#unvar {letter_timer_line};
#unvar {missions[letter][active_list][$GMCP[charinfo][capname]][distant]};
} {3600};
};
#unvar {delayname};
};
#case {5} {
#nop Difficultcustomer;
#if {&missions[letter][active_list][$GMCP[charinfo][capname]][difficult]} { #break; };
#format {missions[letter][active_list][$GMCP[charinfo][capname]][difficult]} {%T};
#line sub variable {
#format {delayname} {letter_difficult_%s} {$GMCP[charinfo][capname]};
#delay {$delayname} {
#format {letter_timer_line} {%c[MT] %c*%c %s can now do another difficult customer letter.} {bold blue} {bold yellow} {bold blue} {$GMCP[charinfo][capname]};
#echo {$letter_timer_line};
#unvar {letter_timer_line};
#unvar {missions[letter][active_list][$GMCP[charinfo][capname]][difficult]};
} {3600};
};
#unvar {delayname};
}; };
}; };
#var {missions[letter][last_difficulty]} {0};
}; };
#CLASS {missiontimers_letters} {close}; #CLASS {missiontimers_letters} {close};

View File

@ -1,214 +0,0 @@
#CLASS {missiontimers_sailing} {kill};
#CLASS {missiontimers_sailing} {open};
#VARIABLE {missions[sailing]} {
{experience}{0}
{active}{0}
};
#FUNCTION {display_timestamp} {
#math {min} {%1 / 60};
#math {sec} {%1 % 60};
#format {result} {%%02d minutes and %%02d second(s)} {$min} {$sec};
#return {$result};
};
#NOP ==[Mission begins trigger]==;
#ACTION {^The loading of the ship complete, {Captain Smith|Chidder} wishes you a safe and profitable trip} {
#var {missions[sailing][experience]} {0};
#var {missions[sailing][active]} {1};
#format {missions[sailing][active_list][$GMCP[charinfo][capname]]} {%T};
#NOP == configure a message display when the timer is up ==;
#line sub variable {
#format {delayname} {sailing_%s} {$GMCP[charinfo][capname]};
#delay {$delayname} {
#format {sailing_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another sailing mission.<099>} {$GMCP[charinfo][capname]};
#echo {$sailing_timer_line};
#unvar {$sailing_timer_line};
#unvar {missions[sailing][active_list][$GMCP[charinfo][capname]]};
} {7200};
};
#unvar {delayname};
};
#NOP ==[Capture experience gains]==;
#ACTION {^As you {finish|complete} the {first|second|third} leg of your impossible voyage%*\(%d xp\)$} {
#math {missions[sailing][experience]} {$missions[sailing][experience] + %4};
};
#ACTION {^As the {kraken|serpent} sinks back beneath the waves, you {feel like the experience of confronting a terrifying sea monster has been enlightening|feel more experienced for having faced it and survived|feel your experiences settling into the back of your mind|think about the experiences you've had so far}. (%3 xp)$} {
#math {missions[sailing][experience]} {$missions[sailing][experience] + %3};
};
#NOP ==[Final XP trigger]==;
#ACTION {^As you {finish|complete} the final leg of your impossible voyage%*\(%1 xp\)%*$} {
#var {missions[sailing][active]} {0};
#format {current_time} {%T};
#math {missions[sailing][experience]} {$missions[sailing][experience] + %1};
#math {missions[sailing][duration]} {$current_time - $missions[sailing][active_list][$GMCP[charinfo][capname]]};
#showme {<169>[sail] Sailing Report: $missions[sailing][experience] xp earned in @display_timestamp{$missions[sailing][duration]}.<099>};
};
#NOP ==[Group sailing report]==
#ALIAS {gssail} {
#if {$missions[sailing][experience] > 0} {
#send {group say [sail] Sailing Report: $missions[sailing][experience] xp earned in @display_timestamp{$missions[sailing][duration]}.};
};
#else {
#showme {<169>[sail] No sailing experience to report.<099>};
};
};
#ALIAS {sailreport} {
#showme {<169>[sail] Sailing Report: $missions[sailing][experience] xp earned in @display_timestamp{$missions[sailing][duration]}.<099>};
};
#NOP ==[Monster identification highlights]==;
#SUB {^A massive {kraken|sea serpent} crests} {A massive <168>%1<900> crests};
#SUB {^The faint popping sounds of suction cups} {The faint popping sounds of <168>suction cups<900>};
#SUB {^The grinding of scales against wood} {The grinding of <168>scales<900> against wood};
#NOP ==[Monster goes away]==;
#SUB {^As the {kraken|serpent} sinks back beneath the waves%2} {As the <168>%1<900> sinks back beneath the waves%2};
#NOP ==[Stage transitions]==;
#ACTION {^{The ship leaves the huge bank of fog as the weather calms.|The howling winds fade away as the weather calms.|The worst of the thunderstorm passes and the clouds overhead lighten and scatter to the winds as the weather calms.|The rain of hailstones slowly peters off and the clouds overhead lighten and scatter to the winds as the weather calms.|The last of the fog seeping in from overhead dissipates.|The sound of hailstones pounding overhead gradually peters out.|The sound of thunder overhead gradually peters out.|The faint howl of the wind overhead gradually peters out.}$} {
#showme {<168>[sail] ### Calm Stage Begins ###<099>};
};
#ACTION {^{The previously calm weather fades away as grey clouds gather overhead and hailstones begin to rain from the sky.|The howling winds fade away as grey clouds gather overhead and hailstones begin to rain from the sky.|The worst of the thunderstorm passes as hailstones begin to rain from the sky.|The ship leaves the huge bank of fog as grey clouds gather overhead and hailstones begin to rain from the sky.|The sound of pounding hail starts to filter through from the deck above.|The sound of thunder overhead gradually peters out and is replaced by the sound of pounding hail.|The faint howl of the wind overhead gradually peters out and is replaced by the sound of pounding hail.|The last of the fog seeping in from overhead dissipates as the sound of pounding hail starts to filter through from the deck above.}$} {
#showme {<168>[sail] ### Hail Stage Begins ###<099>};
};
#ACTION {^{The previously calm weather fades away as a rimwards gale starts building up, the sheer force of the wind pushing the ship backwards.|The worst of the thunderstorm passes and the clouds overhead lighten and scatter to the winds just as a rimwards gale starts building up, the sheer force of the wind pushing the ship backwards.|The rain of hailstones slowly peters off and the clouds overhead lighten and scatter to the winds just as a rimwards gale starts building up, the sheer force of the wind pushing the ship backwards.|The ship leaves the huge bank of fog as a rimwards gale starts building up, the sheer force of the wind pushing the ship backwards.|The faint howling of what must be quite a strong wind begins to filter through the deck above.|The last of the fog seeping in from overhead dissipates as the faint howling of what must be quite a strong wind begins to filter through the deck above.|The sound of hailstones pounding overhead gradually peters out and is replaced by the faint howling of what must be quite a strong wind.|The sound of thunder overhead gradually peters out and is replaced by the faint howling of what must be quite a strong wind.}$} {
#showme {<168>[sail] ### Gale Stage Begins ###<099>};
};
#ACTION {^{The previously calm weather fades away as a growing wind sweeps in dark clouds from all directions, lightning flashes and thunder booms, the beginning of a thunderstorm.|The ship leaves the huge bank of fog as a growing wind sweeps in dark clouds from all directions, lightning flashes and thunder booms, the beginning of a thunderstorm.|The howling winds fade away as a growing wind sweeps in dark clouds from all directions, lightning flashes and thunder booms, the beginning of a thunderstorm.|The rain of hailstones slowly peters off as lightning flashes and thunder booms, the beginning of a thunderstorm.|The rumble of thunder comes through from the deck above.|The sound of hailstones pounding overhead gradually peters out and is replaced by the rumble of thunder.|The last of the fog seeping in from overhead dissipates as the rumble of thunder comes through from the deck above.|The faint howl of the wind overhead gradually peters out and is replaced by the rumble of thunder.}$} {
#showme {<168>[sail] ### Storm Stage Begins ###<099>};
};
#ACTION {^{The previously calm weather fades away as the ship enters a huge bank of fog.|The rain of hailstones slowly peters off and the clouds overhead lighten and scatter to the winds just as the ship enters a huge bank of fog.|The worst of the thunderstorm passes and the clouds overhead lighten and scatter to the winds just as the ship enters a huge bank of fog.|The howling winds fade away as the ship enters a huge bank of fog.|Wisps of fog begin to drift in through tiny gaps in the deck above.|The sound of hailstones pounding overhead gradually peters out as wisps of fog begin to drift in through tiny gaps in the deck above.|The sound of thunder overhead gradually peters out as wisps of fog begin to drift in through tiny gaps in the deck above.|The faint howl of the wind overhead gradually peters out as wisps of fog begin to drift in through tiny gaps in the deck above.}$} {
#showme {<168>[sail] ### Fog Stage Begins ###<099>};
};
#NOP ==[Ship starts/stops moving]==;
#HIGHLIGHT {^{Steam whistles from the smokestack as the ship begins to move|You feel the ship begin to move}%*} {Cyan underscore};
#HIGHLIGHT {^{You feel the ship slow to a halt.|The steam from the smokestack dwindles to nothing as the ship slows to a halt.}} {Cyan underscore};
#NOP ==[Overboard drag messages]==;
#SUB {^The ship steams off, dragging you along by the rope tied around your waist.} {The ship steams off, dragging you along by the <128>rope<900> tied around your waist.};
#SUB {^The ship steams off and you hurriedly swim along to keep up with it.} {The ship steams off and you hurriedly <118>swim along<900> to keep up with it.};
#NOP ==[Monster phase highlights - Serpent]==;
#SUB {^The sea serpent {reaches for|lunges towards|strikes forward swiftly at} you from %2. Run!} {<118>The sea serpent %1 you from <cfa>%2<118>. <488>Run<088><118>!};
#SUB {^%1, the sea serpent {reaches for|lunges towards|strikes forward swiftly at} you from %3. Run!} {<118>%1, the sea serpent %2 you from <cfa>%3<118>. <488>Run<088><118>!};
#HIGHLIGHT {^The sea serpent {reaches for|lunges towards|strikes forward swiftly at} %1.$} {Blue};
#HIGHLIGHT {^%1, the sea serpent {reaches for|lunges towards|strikes forward swiftly at} %2.$} {Blue};
#HIGHLIGHT {^The sea serpent aborts its strike and draws its head back, looking for its missing prey.} {light green};
#HIGHLIGHT {^The sea serpent's venomous fangs gouge long scratches in the deck as its strike misses.} {light green};
#HIGHLIGHT {^The sea serpent chomps down on nothing but air, its prey having escaped.} {light green};
#NOP ==[Monster phase highlights - Kraken]==;
#SUB {^{Quick as lightning|Striking like a cobra|In the blink of an eye|With a blur of speed|Moving too fast to see}, the tentacle snakes around %2 legs and coils its way up to {your|his|her|its} torso, binding {you|him|her|it} in an unescapable embrace.} {<118>%1, the tentacle snakes around <fac>%2<118> legs and coils its way up to %3 torso, binding %4 in an unescapable embrace.};
#HIGHLIGHT {^%1 swing{s?} {your|his|her|its} %2at the tentacle wrapped around %2, {cutting|scoring} a {shallow|small|light} scratch into its rubbery skin.} {Blue};
#HIGHLIGHT {^The tentacle wrapped around %1 unwraps itself and {slips|retreats|retracts} back into the sea.} {White};
#HIGHLIGHT {^The tentacle coils tighter, making %1 go blue in the face.} {Red};
#HIGHLIGHT {^Limbs bound tightly by the kraken's tentacle, %1 struggles to move but gets nowhere.} {yellow};
#HIGHLIGHT {^%1 looks pained as the tentacle slowly constricts the life out of {her|him|it}.} {Red};
#HIGHLIGHT {^You feel your bones creaking as the tentacle slowly constricts the life out of you.} {Red};
#NOP ==[Fire related highlights]==;
#SUB {^Long shadows dance as flickering firelight from %1 {blazes into|illuminates|casts light on} the room.} {Long shadows dance as flickering firelight from <419>%1<900> %2 the room.};
#SUB {^Flickering firelight can be seen to %1{\.$|, }} {Flickering firelight can be seen to <119>%1<900>%2};
#HIGHLIGHT {^A small fire has started here.} {Orange};
#HIGHLIGHT {^Several small blazes are eagerly licking at the floorboards.} {Orange};
#HIGHLIGHT {^The room is filled with a huge conflagration, sparks spilling out into the nearby rooms.} {Orange};
#HIGHLIGHT {^Fire fills the room, burning merrily without regard for the structural integrity of the ship.} {Orange};
#NOP ==[Ice and Seaweed highlights]==;
#HIGHLIGHT {%1. It sounds like ice might be forming on the hull!$} {<aef>};
#HIGHLIGHT {%*ice has formed%*$} {<aef>};
#HIGHLIGHT {%*slippery layer of ice%*$} {<aef>};
#HIGHLIGHT {^The dire seaweed clinging onto the hull glows faintly, %1 its way {through|into} the {hull|wood|ship}.$} {Jade};
#HIGHLIGHT {^The ship plows through a field of floating dire seaweed, some of which glows green and latches onto the hull aggressively!$} {Jade};
#NOP ==[Wrangling job highlights]==;
#SUB {According to the dials on the side, it seems to be %1 and %2\.} {According to the dials on the side, it seems to be <039>%1<900> and <039>%2<900>\.};
#HIGHLIGHT {^%*A little bell on the MK I Boiling Engine rings to indicate that it's out of water.%*$} {light red underscore};
#HIGHLIGHT {^%*dragon looks up at %* accidentally spraying flame over the floorboards\.$} {light red underscore};
#HIGHLIGHT {^%*swamp dragon leaps upon the squeaky toy animal and spends an enjoyable three and a half minutes tearing it to squeaking shreds. Finally, it climbs atop the pile of rubber scraps and sits there triumphantly.%*$} {light green};
#HIGHLIGHT {^%*You throw the ball a few more times, getting a little further each time to keep %* swamp dragon entertained, until a particularly hard throw sends it bouncing right off the ship. Oh well.$} {light green};
#HIGHLIGHT {very {bored|hungry}} {red};
#HIGHLIGHT {somewhat {bored|hungry}} {orange};
#HIGHLIGHT {a little {bored|hungry}} {yellow};
#HIGHLIGHT {not at all {bored|hungry}} {green};
#HIGHLIGHT {^%*finishe%. off the last of the%*$} {green};
#HIGHLIGHT {^%*where it sits down and starts breathing fire onto the Boiling Engine.} {green};
#NOP ==[Deckhanding job highlights]==;
#HIGHLIGHT {You manage to shatter all the reamining sea ice on the hull.} {Cyan};
#HIGHLIGHT {You manage to hack off all the reamining dire seaweed from the hull.} {Jade};
#HIGHLIGHT {^You feel too tired to tie any knots at the moment.$} {red};
#HIGHLIGHT {^You tie %1 of rope securely in a %2 knot around %3 waist.$} {Yellow};
#HIGHLIGHT {^Under the strain, your rope gives up the ghost and unravels completely into wispy threads that float away in the wind.$} {light red underscore};
#HIGHLIGHT {^You tie %1 cargo crates down securely %* with {the coil|one of the coils} of rope, preventing {them|it} from sliding.} {light green};
#SUB {^You manage to {shatter|hack off} some of the {sea ice on|dire seaweed from} the hull.$} {You manage to %1 <bbb>some of the<900> %2 the hull.};
#SUB {^You manage to {shatter|hack off} all the remaining {sea ice on|dire seaweed from} the hull.$} {You manage to %1 <ecf>all the remaining<900> %2 the hull.};
#HIGHLIGHT { colossal amount of sea ice} {red};
#HIGHLIGHT { thick mass of sea ice} {red};
#HIGHLIGHT { thin layer of sea ice} {yellow};
#HIGHLIGHT { few patches of sea ice} {yellow};
#HIGHLIGHT { badly cracked} {red};
#HIGHLIGHT { rather dented} {yellow};
#HIGHLIGHT { a little scuffed up} {yellow};
#HIGHLIGHT { in perfect condition} {green};
#HIGHLIGHT { hanging on by a thread} {red};
#HIGHLIGHT { very frayed} {red};
#HIGHLIGHT { somewhat frayed} {yellow};
#HIGHLIGHT { a little frayed} {yellow};
#NOP ==[Helming job highlights]==;
#HIGHLIGHT {^Caught in a strong backwards current, the ship shudders intensely as it zooms back a few miles.$} {light orange};
#HIGHLIGHT {^Caught in a strong forwards current, the ship vibrates intensely as it zooms ahead a few miles.$} {light green};
#HIGHLIGHT {The ship abruptly starts spinning in circles. After a few rounds, it manages to escape the whirlpool, heading in a different direction from before.} {Yellow underscore};
#SUB {^The impact knocks the ship slightly off course to %1.$} {The impact knocks the ship slightly off course to <488><afe>%1<900>.};
#SUB {^The powerful headwind causes the ship to drift off course towards %1.$} {The powerful headwind causes the ship to drift off course towards <488><afe>%1<900>.};
#SUB {^A powerful gust of wind turns the ship toward %1, as if deliberately mocking all attempts to hold a steady course.$} {A powerful gust of wind turns the ship toward <488><afe>%1<900>, as if deliberately mocking all attempts to hold a steady course.};
#SUB {^Despite your crew's best efforts, the gusts of wind blow the ship off course in the %1 direction.$} {Despite your crew's best efforts, the gusts of wind blow the ship off course in the <488><afe>%1<900> direction.};
#NOP ==[Helming directionality or compass highlights]==;
#SUB {^From the compass, you can see that the ship is heading %1.} {From the compass, you can see that the ship is heading <868>%1<099>.};
#HIGHLIGHT {^You gaze up at the stars, but are too tired to figure out anything useful.$} {Red};
#HIGHLIGHT {^You gaze up at the stars, but can't figure out anything from them.$} {Red underscore};
#SUB {^{Gazing up at the stars|Noting the positions of some key constellations|Reading the stars like a chart|Squinting up at the sun|Carefully looking up out of the corner of your eye|From a careful squint at the sun}, you {are confident|decide|determine|are able to ascertain|decide from the sun's position|determine from the sun's position|guess} that the ship is {currently heading|heading|heading directly} {hubwards|turnwise-hubwards|widdershins-hubwards|rimwards|turnwise-rimwards|widdershins-rimwards|turnwise|widdershins}%*} {<058>%1, you %2 that the ship is %3 <168>%4<058>%5};
#SUB {^{Gazing up at the stars|Noting the positions of some key constellations|Reading the stars like a chart|Squinting up at the sun|Carefully looking up out of the corner of your eye|From a careful squint at the sun}, you {are confident|decide|determine|are able to ascertain|decide from the sun's position|determine from the sun's position|guess} that the ship must be {currently heading|heading|heading directly} {hubwards|turnwise-hubwards|widdershins-hubwards|rimwards|turnwise-rimwards|widdershins-rimwards|turnwise|widdershins}%*} {<058>%1, you %2 that the ship must be %3 <138>%4<058>%5};
#ALIAS {/sailing_recreate_delays} {
#format {current_time} {%T};
#foreach {*missions[sailing][active_list][]} {player} {
#local {delay_time} {$missions[sailing][active_list][$player]};
#math {delay_time} {7200 - ($current_time - $delay_time)};
#if {$delay_time < 1} {
#unvar {missions[sailing][active_list][$player]};
#continue;
};
#line sub variable {
#delay {$delay_time} {
#format {sailing_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another sailing mission.<099>} {$player};
#echo {$sailing_timer_line};
#unvar {sailing_timer_line};
#unvar {missions[sailing][active_list][$player]};
};
};
};
};
#CLASS {missiontimers_sailing} {close};

View File

@ -42,7 +42,7 @@
#line sub variable { #line sub variable {
#delay {600} { #delay {600} {
#format {sausage_retry_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s<acf>can now ask for a new sausage mission from Sam Slager.<099>} {$GMCP[charinfo][capname]}; #format {sausage_retry_line} {%c[MT] %c*%c %s%c can now ask for a new sausage mission from Sam Slager.} {bold blue} {bold yellow} {bold green}{$GMCP[charinfo][capname]} {bold blue};
#echo {$sausage_retry_line}; #echo {$sausage_retry_line};
#unvar {sausage_retry_line}; #unvar {sausage_retry_line};
@ -61,7 +61,7 @@
#line sub variable { #line sub variable {
#format {delayname} {sausage_easy_%s} {$GMCP[charinfo][capname]}; #format {delayname} {sausage_easy_%s} {$GMCP[charinfo][capname]};
#delay {$delayname} { #delay {$delayname} {
#format {sausage_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another unspiced sausage mission.<099>} {$GMCP[charinfo][capname]}; #format {sausage_timer_line} {%c[MT] %c*%c %s can now do another unspiced sausage mission.} {bold blue} {bold yellow} {bold blue} {$GMCP[charinfo][capname]};
#echo {$sausage_timer_line}; #echo {$sausage_timer_line};
#unvar {sausage_timer_line}; #unvar {sausage_timer_line};
@ -76,7 +76,7 @@
#line sub variable { #line sub variable {
#format {delayname} {sausage_hard_%s} {$GMCP[charinfo][capname]}; #format {delayname} {sausage_hard_%s} {$GMCP[charinfo][capname]};
#delay {$delayname} { #delay {$delayname} {
#format {sausage_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another spiced sausage mission.<099>} {$GMCP[charinfo][capname]}; #format {sausage_timer_line} {%c[MT] %c*%c %s can now do another spiced sausage mission.} {bold blue} {bold yellow} {bold blue} {$GMCP[charinfo][capname]};
#echo {$sausage_timer_line}; #echo {$sausage_timer_line};
#unvar {sausage_timer_line}; #unvar {sausage_timer_line};
@ -88,72 +88,6 @@
}; };
}; };
#ALIAS {/sausage_recreate_delays} {
#format {current_time} {%T};
#nop == start with retry list;
#foreach {*missions[sausage][retry_list][]} {player} {
#local {delay_time} {$missions[sausage][retry_list][$player]};
#math {delay_time} {600 - ($current_time - $delay_time)};
#if {$delay_time < 1} {
#unvar {missions[sausage][retry_list][$player]};
#continue;
};
#line sub variable {
#delay {$delay_time} {
#format {sausage_retry_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s<acf> can now ask for a new sausage mission from Sam Slager.<099>} {$player};
#echo {$sausage_retry_line};
#unvar {sausage_retry_line};
#unvar {missions[sausage][retry_list][$player]};
};
};
};
#nop == easy and hard missions;
#foreach {*missions[sausage][active_list][]} {player} {
#if {&missions[sausage][active_list][$player][easy]} {
#local {delay_time} {$missions[sausage][active_list][$player][easy]};
#math {delay_time} {3600 - ($current_time - $delay_time)};
#if {$delay_time < 1} {
#unvar {missions[sausage][active_list][$player][easy]};
#continue;
};
#line sub variable {
#delay {$delay_time} {
#format {sausage_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another unspiced sausage mission.<099>} {$player};
#echo {$sausage_timer_line};
#unvar {sausage_timer_line};
#unvar {missions[sausage][active_list][$player][easy]};
};
};
};
#if {&missions[sausage][active_list][$player][hard]} {
#local {delay_time} {$missions[sausage][active_list][$player][hard]};
#math {delay_time} {3600 - ($current_time - $delay_time)};
#if {$delay_time < 1} {
#unvar {missions[sausage][active_list][$player][hard]};
#continue;
};
#line sub variable {
#delay {$delay_time} {
#format {sausage_timer_line} {<acf>[<fff>missions<acf>] <138>*<900><cfa> %s <acf>can now do another unspiced sausage mission.<099>} {$player};
#echo {$sausage_timer_line};
#unvar {sausage_timer_line};
#unvar {missions[sausage][active_list][$player][hard]};
};
};
};
};
};
#ALIAS {/sausage_mission_prep} { #ALIAS {/sausage_mission_prep} {
#action {You have four hours to deliver %%1 fresh %%2 sausages to Sam Slager.$} { #action {You have four hours to deliver %%1 fresh %%2 sausages to Sam Slager.$} {
/sausage_mission_start; /sausage_mission_start;

View File

@ -1,8 +0,0 @@
#class {personal} {kill};
#class {personal} {open};
#alias {/personal.gmcp.writtenmap %1} {
#nop empty shell;
};
#class {personal} {close};

View File

@ -1,56 +1,38 @@
#class prompt kill;
#class prompt open;
#NOP == Prompt Update Function == #NOP == Prompt Update Function ==
#nop colors #nop colors
#function {tpa_col} #function {tpa_col}
{ {
#if {"%0" == "invisible"} { #if {"%0" == "invisible"}
#return <178>; #return <178>;
}; #if {"%0" == "dull red"}
#if {"%0" == "dull red"} {
#return <018>; #return <018>;
}; #if {"%0" == "bright red"}
#if {"%0" == "bright red"} {
#return <118>; #return <118>;
}; #if {"%0" == "wobbling orange"}
#if {"%0" == "wobbling orange"} {
#return <fca><188>; #return <fca><188>;
}; #if {"%0" == "flickering yellow"}
#if {"%0" == "flickering yellow"} {
#return <138>; #return <138>;
}; #return;
#return <000>;
} }
#ALIAS {update_prompt} { #ALIAS {update_prompt} {
#nop XP monitor details; #nop XP monitor details;
xp_monitor; xp_monitor;
#format {prompt_xp} {%Gxp in %s (%Gk/h)} {$session_xp} {$uptime[display]} {$xprate};
#format {prompt_xp} {%Gxp in %s (%Gk/h)} {$window_xp} {$uptime[window][display]} {$xprate};
#format {prompt_xp} {%-40s} {$prompt_xp};
#nop TPA monitor details; #nop TPA monitor details;
#var {prompt_tpa} {}; #var {prompt_tpa} {};
#if {$tpa_status == 1} {
#format {prompt_tpa} {%cTPA%c} {@tpa_col{$tpa_color}} {<098>}; #format {prompt_tpa} {%cTPA%c} {@tpa_col{$tpa_color}} {<098>};
};
#nop Quota monitor details; #nop Quota monitor details;
#var {prompt_quota} {}; #var {prompt_quota} {};
#if {&{quota}} { #if {&quota} {
#format {prompt_quota} {Quota: %-8s} {@quota_time_left{}}; #format {prompt_quota} {Quota: %s} {@quota_time_left{}};
}; };
#nop #format {prompt_line} {%+5s %+40s %+15s} {$prompt_tpa} {$prompt_xp} {$prompt_quota}; #format {prompt_line} {%+5s %+40s %+15s} {$prompt_tpa} {$prompt_xp} {$prompt_quota};
#nop #showme {$prompt_line} {2} {3}; #showme {$prompt_line} {-1};
#showme {$prompt_tpa} {2} {3}; }
#showme {$prompt_xp} {2} {10};
#showme {$prompt_quota} {2} {48};
#nop Write to line 2, and start 3 columns in so we don't disrupt the box drawn;
#nop Put the time with seconds to the right hand side;
#format {clock} {%t} {%I:%M:%S %p};
#showme {$clock} {2} {-13};
};
#class prompt close;

View File

@ -87,7 +87,7 @@
#var {quota[reciepts]} {0}; #var {quota[reciepts]} {0};
#nop Quota period is over, announce it.; #nop Quota period is over, announce it.;
#format {quota_display_line} {<acf>[<fff>quota<acf>] <138>*<acf> %s's quota has <118>reset<acf>.<099>} {$quota[who]}; #format {quota_display_line} {%c[Quota] %c*%c %s's quota has %creset%c.<099>} {bold blue} {bold yellow} {bold blue} {$quota[who]} {bold red} {bold blue};
#showme {$quota_display_line}; #showme {$quota_display_line};
}; };
@ -95,19 +95,19 @@
#if {"$quota[alert]" == "on"} { #if {"$quota[alert]" == "on"} {
#nop Message an hour before; #nop Message an hour before;
#if {$quota[time][hour] == 0 && $quota[time][min] == 59 && $quota[time][sec] == 59} { #if {$quota[time][hour] == 0 && $quota[time][min] == 59 && $quota[time][sec] == 59} {
#format {quota_display_line} {<acf>[<fff>quota<acf>] <138>*<acf> %s's quota flips over in <148>one hour<acf>.<099>} {$quota[who]}; #format {quota_display_line} {%c[Quota] %c*%c %s's quota flips over in %cone hour%c.<099>} {bold blue} {bold yellow} {bold blue} {$quota[who]} {bold red} {bold blue};
#echo {$quota_display_line \a}; #echo {$quota_display_line \a};
}; };
#nop Message 30 minutes before; #nop Message 30 minutes before;
#if {$quota[time][hour] == 0 && $quota[time][min] == 29 && $quota[time][sec] == 59} { #if {$quota[time][hour] == 0 && $quota[time][min] == 29 && $quota[time][sec] == 59} {
#format {quota_display_line} {<acf>[<fff>quota<acf>] <138>*<acf> %s's quota flips over in <148>half an hour<acf>.<099>} {$quota[who]}; #format {quota_display_line} {%c[Quota] %c*%c %s's quota flips over in %chalf an hour%c.<099>} {bold blue} {bold yellow} {bold blue} {$quota[who]} {bold red} {bold blue};
#echo {$quota_display_line \a}; #echo {$quota_display_line \a};
}; };
#nop Message 10 minutes before; #nop Message 10 minutes before;
#if {$quota[time][hour] == 0 && $quota[time][min] == 9 && $quota[time][sec] == 59} { #if {$quota[time][hour] == 0 && $quota[time][min] == 9 && $quota[time][sec] == 59} {
#format {quota_display_line} {<acf>[<fff>quota<acf>] <138>*<acf> %s's quota flips over in <118>ten minutes<acf>.<099>} {$quota[who]}; #format {quota_display_line} {%c[Quota] %c*%c %s's quota flips over in %cten minutes%c.<099>} {bold blue} {bold yellow} {bold blue} {$quota[who]} {bold red} {bold blue};
#echo {$quota_display_line \a}; #echo {$quota_display_line \a};
}; };
}; };

Binary file not shown.

View File

@ -2,363 +2,265 @@
#CLASS {xptimers} {open}; #CLASS {xptimers} {open};
#VARIABLE {xptimer_file} {logs/xptimers.log}; #VARIABLE {xptimer_file} {logs/xptimers.log};
#VARIABLE {xptimersync_file} {logs/features/xptimers_sync.tin};
#VARIABLE {killtimers} { #VARIABLE {killtimers} {
{Delbert}{ {Delbert}{
{time}{0} {time}{0}
{name}{delbert} {name}{delbert}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{the Triad boss}{ {the Triad boss}{
{time}{0} {time}{0}
{name}{medina boss} {name}{medina boss}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{the bandit leader}{ {the bandit leader}{
{time}{0} {time}{0}
{name}{bandits} {name}{bandit leader}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{Hlakket the Bartender}{ {Hlakket the Bartender}{
{time}{0} {time}{0}
{name}{hlakket} {name}{hlakket}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{the Zoon Liar}{ {the Zoon Liar}{
{time}{0} {time}{0}
{name}{zoon liar} {name}{zoon liar}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{Slim Stevie}{ {Slim Stevie}{
{time}{0} {time}{0}
{name}{rogues} {name}{rogues}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{the %* grflx worker}{ {the %* grflx worker}{
{time}{0} {time}{0}
{name}{grflx} {name}{grflx}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{the %* student}{ {the %* student}{
{time}{0} {time}{0}
{name}{dojo} {name}{dojo}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{the ceremonial guard}{ {the ceremonial guard}{
{time}{0} {time}{0}
{name}{cguards} {name}{cguards}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{the smuggler captain}{ {the smuggler captain}{
{time}{0} {time}{0}
{name}{smug cap} {name}{smug captain}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{the giant leader}{ {the giant leader}{
{time}{0} {time}{0}
{name}{giants} {name}{giants}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{the %* rujona}{ {the %* rujona}{
{time}{0} {time}{0}
{name}{snail} {name}{snail}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{the %* nitsuni}{ {the %* nitsuni}{
{time}{0} {time}{0}
{name}{snail} {name}{snail}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{the Ome outlaw}{ {the Ome outlaw}{
{time}{0} {time}{0}
{name}{snail} {name}{snail}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{the %* lion}{ {the %* lion}{
{time}{0} {time}{0}
{name}{shaker} {name}{shaker lions}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
}
{the %* crocodile}{
{time}{0}
{name}{offler}
{group}{false}
{respawn}{40}
} }
{Louis Accardo}{ {Louis Accardo}{
{time}{0} {time}{0}
{name}{stables} {name}{stables}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{Samuel Casso}{ {Samuel Casso}{
{time}{0} {time}{0}
{name}{stables} {name}{stables}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{Enrico Persuica}{ {Enrico Persuica}{
{time}{0} {time}{0}
{name}{stables} {name}{stables}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{Joe Corrola}{ {Joe Corrola}{
{time}{0} {time}{0}
{name}{stables} {name}{stables}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{Marlon Gumboni}{ {Marlon Gumboni}{
{time}{0} {time}{0}
{name}{casino} {name}{casino}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{Frankie Harvard}{ {Frankie Harvard}{
{time}{0} {time}{0}
{name}{casino} {name}{casino}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{Geraldo Ciaco}{ {Geraldo Ciaco}{
{time}{0} {time}{0}
{name}{casino} {name}{casino}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{Charles Marchella}{ {Charles Marchella}{
{time}{0} {time}{0}
{name}{casino} {name}{casino}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{the %* hermit}{ }
{time}{0}
{name}{oasis}
{group}{true}
{respawn}{40}
}
{the %* patroller}{
{time}{0}
{name}{oasis}
{group}{true}
{respawn}{40}
}
{the {strict|serious|grim|tough|stern} captain}{
{time}{0}
{name}{oasis}
{group}{true}
{respawn}{40}
}
{the %* desert nomad}{
{time}{0}
{name}{oasis}
{group}{true}
{respawn}{40}
}
{the peacekeeper commander}{
{time}{0}
{name}{oasis}
{group}{true}
{respawn}{40}
}
{the %* mystic}{
{time}{0}
{name}{oasis}
{group}{true}
{respawn}{40}
}
{the {Tang|Fang|Sung|Hong|McSweeney} captain}{
{time}{0}
{name}{bmarket}
{group}{true}
{respawn}{40}
}
{the citadel guard}{
{time}{0}
{name}{citguard}
{group}{false}
{respawn}{40}
}
};
#VARIABLE {visittimers} { #VARIABLE {visittimers} {
{AMShades}{ {AMShades}{
{time}{0} {time}{0}
{name}{shades} {name}{shades}
{group}{false} {group}{false}
{respawn}{20} {respawn}{12}
} }
{ebff897af2b8bb6800a9a8636143099d0714be07}{ {ebff897af2b8bb6800a9a8636143099d0714be07}{
{time}{0} {time}{0}
{name}{smugglers} {name}{smugglers}
{group}{false} {group}{false}
{respawn}{20} {respawn}{12}
} }
{70546ec71867645ab5c51e9ce6087b75dcf4176f}{ {70546ec71867645ab5c51e9ce6087b75dcf4176f}{
{time}{0} {time}{0}
{name}{offler} {name}{offler}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
}
{2950a174f65ef8e38eee444295c9b4832d36ab60}{
{time}{0}
{name}{dragon}
{group}{false}
{respawn}{40}
} }
{f6c60dd36ed38707eb954c3a670f2f9370a79399}{ {f6c60dd36ed38707eb954c3a670f2f9370a79399}{
{time}{0} {time}{0}
{name}{bmarket} {name}{black market}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{e4646eab906aef1187a9dd3e980441b8f6b8d68c}{ {e4646eab906aef1187a9dd3e980441b8f6b8d68c}{
{time}{0} {time}{0}
{name}{bmarket} {name}{black market}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{0ae9d8c4f2b48f4fcc4cb57fd85443399be2ecc5}{ {0ae9d8c4f2b48f4fcc4cb57fd85443399be2ecc5}{
{time}{0} {time}{0}
{name}{bmarket} {name}{black market}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{c7c6f5720d2c587f80696b6f0ec7f9ac0f084b06}{ {c7c6f5720d2c587f80696b6f0ec7f9ac0f084b06}{
{time}{0} {time}{0}
{name}{bmarket} {name}{black market}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{3862c5fd0fe83f4080bdb9b94519bf8da89d5015}{ {3862c5fd0fe83f4080bdb9b94519bf8da89d5015}{
{time}{0} {time}{0}
{name}{parades} {name}{parades}
{group}{true} {group}{true}
{respawn}{40} {respawn}{30}
} }
{cca9645565f2bb0d017ea9b1dcc9d1b3e9fcfe72}{ {cca9645565f2bb0d017ea9b1dcc9d1b3e9fcfe72}{
{time}{0} {time}{0}
{name}{cabbage} {name}{cabbage}
{group}{false} {group}{false}
{respawn}{40} {respawn}{30}
} }
{7377f4483763eca72e0b97a87f71c5266e33f2cd}{ }
{time}{0}
{name}{cocoons}
{group}{false}
{respawn}{40}
}
};
#ALIAS {dtreset} { #ALIAS {dtreset} {
#variable {dtreset_all} {0};
#regex {%1} {all} { #regex {%1} {all} {
#foreach {*killtimers[]} {spot} { #foreach {$killtimers[]} {spot} {
#format {killtimers[$spot][time]} {0}; #format {killtimers[$spot][time]} {0};
}; }
#foreach {*visittimers[]} {spot} { #foreach {$visittimers[]} {spot} {
#format {visittimers[$spot][time]} {0}; #format {visittimers[$spot][time]} {0};
}; }
#format {xptimer_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Resetting all spots to Unseen.<099>}; #format {xptimer_message} {%c[XPTimer] %c*%c Resetting all spots to Unseen.} {bold blue} {bold yellow} {bold blue};
#echo {$xptimer_message}; #echo {$xptimer_message};
#variable {dtreset_all} {1}; #variable {dtreset_all} {1};
}; };
#if {$dtreset_all < 1} { #if {$dtreset_all < 1} {
#list {spot_groups} {clear}; #foreach {$killtimers[]} {spot} {
#foreach {*killtimers[]} {spot} {
#var {xptimer_message} {};
#regex {%1 %2} {$killtimers[$spot][name]} { #regex {%1 %2} {$killtimers[$spot][name]} {
#format {killtimers[$spot][time]} {%T}; #format {killtimers[$spot][time]} {%T};
#if {"$killtimers[$spot][group]" == "true"} { #if {"$killtimers[$spot][group]" == "true"} {
#list {spot_groups} {find} {$killtimers[$spot][name]} {group_exists}; #format {xptimer_message} {%c[XPTimer] %c*%c Resetting death timer for%c $killtimers[$spot][name] ($spot)%c.} {bold blue} {bold yellow} {bold blue} {bold green} {bold blue};
#if {"$group_exists" == "0"} {
#list {spot_groups} {add} {$killtimers[$spot][name]};
#format {xptimer_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Resetting death timer for%c $killtimers[$spot][name]%c.<099>} {Green} {<acf>};
};
}; };
#else { #else {
#format {xptimer_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Resetting death timer for%c $killtimers[$spot][name]%c.<099>} {Green} {<acf>}; #format {xptimer_message} {%c[XPTimer] %c*%c Resetting death timer for%c $killtimers[$spot][name]%c.} {bold blue} {bold yellow} {bold blue} {bold green} {bold blue};
}; };
#format {xp_message_check} {%L} {$xptimer_message};
#if {$xp_message_check > 0} {
#echo {$xptimer_message}; #echo {$xptimer_message};
}; };
}; }
}; #foreach {$visittimers[]} {spot} {
#list {spot_groups} {clear};
#foreach {*visittimers[]} {spot} {
#var {xptimer_message} {};
#regex {%1 %2} {$visittimers[$spot][name]} { #regex {%1 %2} {$visittimers[$spot][name]} {
#format {visittimers[$spot][time]} {%T}; #format {visittimers[$spot][time]} {%T};
#if {"$visittimers[$spot][group]" == "true"} { #if {"$visittimers[$spot][group]" == "true"} {
#list {spot_groups} {find} {$visittimers[$spot][name]} {group_exists}; #format {xptimer_message} {%c[XPTimer] %c*%c Resetting visit timer for%c $visittimers[$spot][name] ($spot)%c.} {bold blue} {bold yellow} {bold blue} {bold green} {bold blue};
#if {"$group_exists" == "0"} {
#list {spot_groups} {add} {$visittimers[$spot][name]};
#format {xptimer_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Resetting visit timer for%c $visittimers[$spot][name]%c.<099>} {Green} {<acf>};
};
}; };
#else { #else {
#format {xptimer_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Resetting visit timer for%c $visittimers[$spot][name]%c.<099>} {Green} {<acf>}; #format {xptimer_message} {%c[XPTimer] %c*%c Resetting visit timer for%c $visittimers[$spot][name]%c.} {bold blue} {bold yellow} {bold blue} {bold green} {bold blue};
}; };
#format {xp_message_check} {%L} {$xptimer_message};
#if {$xp_message_check > 0} {
#echo {$xptimer_message}; #echo {$xptimer_message};
}; };
}; }
}; }
};
#unvariable {dtreset_all}; #unvariable {dtreset_all};
}; }
#ACTION {%1 deals the death blow to %2.} { #ACTION {%1 deals the death blow to %2.} {
#foreach {*killtimers[]} {spot} { #foreach {$killtimers[]} {spot} {
#regex {%2} {$spot} { #regex {%2} {$spot} {
#format {killtimers[$spot][time]} {%T}; #format {killtimers[$spot][time]} {%T};
}; };
}; }
}; }
#ACTION {You kill %1.} { #ACTION {You kill %1.} {
#foreach {*killtimers[]} {spot} { #foreach {$killtimers[]} {spot} {
#regex {%1} {$spot} { #regex {%1} {$spot} {
#format {killtimers[$spot][time]} {%T}; #format {killtimers[$spot][time]} {%T};
}; };
}; }
}; }
#nop The smuggler captain dies.
#ACTION {^%1 dies.$} {
#foreach {*killtimers[]} {spot} {
#nop Force case insensitivity on the match due to "The" "A" being capitalized
#regex {%1} {%i$spot} {
#format {killtimers[$spot][time]} {%T};
};
};
};
#FUNCTION {write_spot} { #FUNCTION {write_spot} {
#var {spotname} {%1}; #var {spotname} {%1};
@ -375,45 +277,18 @@
#math {mins} {($mins - (60 - 1)) / 60}; #math {mins} {($mins - (60 - 1)) / 60};
#nop Choose a color-code based on downtime; #nop Choose a color-code based on downtime;
#nop #if {$mins > ($spotrespawn + 40)} { #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 if rat is 40, 30-45 yellow, 45-60 red, beyond 60 miss;
#math {low_b} {$spotrespawn - 10};
#math {up_b} {$spotrespawn + 5};
#math {miss_b} {$spotrespawn + 20};
#nop if we're at or beyond the lower bound;
#if {$mins >= $low_b} {
#nop are we at or below upper bound? YELLOW;
#if {$mins <= $up_b} {
#var {current_spot_color} {<139>};
};
#nop are we beyond the miss zone? show grey;
#elseif {$mins > $miss_b} {
#var {current_spot_color} {<099>}; #var {current_spot_color} {<099>};
}; };
#elseif {$mins > ($spotrespawn + 20)} {
#nop otherwise we're in sweet spot, RED;
#else {
#var {current_spot_color} {<119>}; #var {current_spot_color} {<119>};
}; };
#elseif {$mins > $spotrespawn} {
#var {current_spot_color} {<139>};
}; };
#else { #else {
#var {current_spot_color} {<099>}; #var {current_spot_color} {<099>};
}; }
#if {$mins > 99} { #var {mins} {99} }; #if {$mins > 99} { #var {mins} {99} };
@ -424,11 +299,11 @@
#else { #else {
#nop Zero pad under 10 mins; #nop Zero pad under 10 mins;
#format {spotstring} { - (0%dm) %c%s<099> } {$mins} {$current_spot_color} {$spotname}; #format {spotstring} { - (0%dm) %c%s<099> } {$mins} {$current_spot_color} {$spotname};
}; }
}; };
#return {$spotstring}; #return {$spotstring};
}; }
#ALIAS {dt} { #ALIAS {dt} {
#format {current_time} {%T}; #format {current_time} {%T};
@ -436,13 +311,13 @@
#var {spot_groups_respawn} {}; #var {spot_groups_respawn} {};
#echo {.:: Death Timers ::.}; #echo {.:: Death Timers ::.};
#foreach {*killtimers[]} {spot} { #foreach {$killtimers[]} {spot} {
#if {"$killtimers[$spot][group]" == "true"} { #if {"$killtimers[$spot][group]" == "true"} {
#if {&spot_groups[$killtimers[$spot][name]] == 0} { #if {&spot_groups[$killtimers[$spot][name]] == 0} {
#var {spot_groups[$killtimers[$spot][name]]} {$killtimers[$spot][time]}; #var {spot_groups[$killtimers[$spot][name]]} {$killtimers[$spot][time]};
#var {spot_groups_respawn[$killtimers[$spot][name]]} {$killtimers[$spot][respawn]}; #var {spot_groups_respawn[$killtimers[$spot][name]]} {$killtimers[$spot][respawn]};
}; };
#if {$killtimers[$spot][time] != 0 && $killtimers[$spot][time] > $spot_groups[$killtimers[$spot][name]]} { #if {$killtimers[$spot][time] < $spot_groups[$killtimers[$spot][name]]} {
#var {spot_groups[$killtimers[$spot][name]]} {$killtimers[$spot][time]}; #var {spot_groups[$killtimers[$spot][name]]} {$killtimers[$spot][time]};
#var {spot_groups_respawn[$killtimers[$spot][name]]} {$killtimers[$spot][respawn]}; #var {spot_groups_respawn[$killtimers[$spot][name]]} {$killtimers[$spot][respawn]};
}; };
@ -452,12 +327,12 @@
#var {spotstring} {@write_spot{$killtimers[$spot][name];$killtimers[$spot][time];$killtimers[$spot][respawn]}}; #var {spotstring} {@write_spot{$killtimers[$spot][name];$killtimers[$spot][time];$killtimers[$spot][respawn]}};
#echo {$spotstring}; #echo {$spotstring};
}; }
#foreach {*spot_groups[]} {spot} { #foreach {$spot_groups[]} {spot} {
#var {spotstring} {@write_spot{$spot;$spot_groups[$spot];$spot_groups_respawn[$spot]}}; #var {spotstring} {@write_spot{$spot;$spot_groups[$spot];$spot_groups_respawn[$spot]}};
#echo {$spotstring}; #echo {$spotstring};
}; }
#echo {\n}; #echo {\n};
@ -466,13 +341,13 @@
#echo {.:: Visit Timers ::.}; #echo {.:: Visit Timers ::.};
#format {current_time} {%T}; #format {current_time} {%T};
#foreach {*visittimers[]} {spot} { #foreach {$visittimers[]} {spot} {
#if {"$visittimers[$spot][group]" == "true"} { #if {"$visittimers[$spot][group]" == "true"} {
#if {&spot_groups[$visittimers[$spot][name]] == 0} { #if {&spot_groups[$visittimers[$spot][name]] == 0} {
#var {spot_groups[$visittimers[$spot][name]]} {$visittimers[$spot][time]}; #var {spot_groups[$visittimers[$spot][name]]} {$visittimers[$spot][time]};
#var {spot_groups_respawn[$visittimers[$spot][name]]} {$visittimers[$spot][respawn]}; #var {spot_groups_respawn[$visittimers[$spot][name]]} {$visittimers[$spot][respawn]};
}; };
#if {$visittimers[$spot][time] != 0 && $visittimers[$spot][time] > $spot_groups[$visittimers[$spot][name]]} { #if {$visittimers[$spot][time] < $spot_groups[$visittimers[$spot][name]]} {
#var {spot_groups[$visittimers[$spot][name]]} {$visittimers[$spot][time]}; #var {spot_groups[$visittimers[$spot][name]]} {$visittimers[$spot][time]};
#var {spot_groups_respawn[$visittimers[$spot][name]]} {$visittimers[$spot][respawn]}; #var {spot_groups_respawn[$visittimers[$spot][name]]} {$visittimers[$spot][respawn]};
}; };
@ -482,17 +357,17 @@
#var {spotstring} {@write_spot{$visittimers[$spot][name];$visittimers[$spot][time];$visittimers[$spot][respawn]}}; #var {spotstring} {@write_spot{$visittimers[$spot][name];$visittimers[$spot][time];$visittimers[$spot][respawn]}};
#echo {$spotstring}; #echo {$spotstring};
}; }
#foreach {*spot_groups[]} {spot} { #foreach {$spot_groups[]} {spot} {
#var {spotstring} {@write_spot{$spot;$spot_groups[$spot];$spot_groups_respawn[$spot]}}; #var {spotstring} {@write_spot{$spot;$spot_groups[$spot];$spot_groups_respawn[$spot]}};
#echo {$spotstring}; #echo {$spotstring};
}; }
#echo {\n}; #echo {\n};
}; }
#ALIAS {/writetimerstofile} { #ALIAS {writetimerstofile} {
#system {> $xptimer_file}; #system {> $xptimer_file};
#format {current_time} {%T}; #format {current_time} {%T};
#var {spot_groups} {}; #var {spot_groups} {};
@ -500,13 +375,13 @@
#line {log} {$xptimer_file} {.:: Death Timers ::. }; #line {log} {$xptimer_file} {.:: Death Timers ::. };
#foreach {*killtimers[]} {spot} { #foreach {$killtimers[]} {spot} {
#if {"$killtimers[$spot][group]" == "true"} { #if {"$killtimers[$spot][group]" == "true"} {
#if {&spot_groups[$killtimers[$spot][name]] == 0} { #if {&spot_groups[$killtimers[$spot][name]] == 0} {
#var {spot_groups[$killtimers[$spot][name]]} {$killtimers[$spot][time]}; #var {spot_groups[$killtimers[$spot][name]]} {$killtimers[$spot][time]};
#var {spot_groups_respawn[$killtimers[$spot][name]]} {$killtimers[$spot][respawn]}; #var {spot_groups_respawn[$killtimers[$spot][name]]} {$killtimers[$spot][respawn]};
}; };
#if {$killtimers[$spot][time] != 0 && $killtimers[$spot][time] > $spot_groups[$killtimers[$spot][name]]} { #if {$killtimers[$spot][time] != 0 && $killtimers[$spot][time] < $spot_groups[$killtimers[$spot][name]]} {
#var {spot_groups[$killtimers[$spot][name]]} {$killtimers[$spot][time]}; #var {spot_groups[$killtimers[$spot][name]]} {$killtimers[$spot][time]};
#var {spot_groups_respawn[$killtimers[$spot][name]]} {$killtimers[$spot][respawn]}; #var {spot_groups_respawn[$killtimers[$spot][name]]} {$killtimers[$spot][respawn]};
}; };
@ -516,24 +391,24 @@
#var {spotstring} {@write_spot{$killtimers[$spot][name];$killtimers[$spot][time];$killtimers[$spot][respawn]}}; #var {spotstring} {@write_spot{$killtimers[$spot][name];$killtimers[$spot][time];$killtimers[$spot][respawn]}};
#line {log} {$xptimer_file} {$spotstring}; #line {log} {$xptimer_file} {$spotstring};
}; }
#foreach {*spot_groups[]} {spot} { #foreach {$spot_groups[]} {spot} {
#var {spotstring} {@write_spot{$spot;$spot_groups[$spot];$spot_groups_respawn[$spot]}}; #var {spotstring} {@write_spot{$spot;$spot_groups[$spot];$spot_groups_respawn[$spot]}};
#line {log} {$xptimer_file} {$spotstring}; #line {log} {$xptimer_file} {$spotstring};
}; }
#line {log} {$xptimer_file} {\n\r\n\r.:: Visit Timers ::. }; #line {log} {$xptimer_file} {\n\r\n\r.:: Visit Timers ::. };
#var {spot_groups} {}; #var {spot_groups} {};
#var {spot_groups_respawn} {}; #var {spot_groups_respawn} {};
#foreach {*visittimers[]} {spot} { #foreach {$visittimers[]} {spot} {
#if {"$visittimers[$spot][group]" == "true"} { #if {"$visittimers[$spot][group]" == "true"} {
#if {&spot_groups[$visittimers[$spot][name]] == 0} { #if {&spot_groups[$visittimers[$spot][name]] == 0} {
#var {spot_groups[$visittimers[$spot][name]]} {$visittimers[$spot][time]}; #var {spot_groups[$visittimers[$spot][name]]} {$visittimers[$spot][time]};
#var {spot_groups_respawn[$visittimers[$spot][name]]} {$visittimers[$spot][respawn]}; #var {spot_groups_respawn[$visittimers[$spot][name]]} {$visittimers[$spot][respawn]};
}; };
#if {$visittimers[$spot][time] != 0 && $visittimers[$spot][time] > $spot_groups[$visittimers[$spot][name]]} { #if {$visittimers[$spot][time] != 0 && $visittimers[$spot][time] < $spot_groups[$visittimers[$spot][name]]} {
#var {spot_groups[$visittimers[$spot][name]]} {$visittimers[$spot][time]}; #var {spot_groups[$visittimers[$spot][name]]} {$visittimers[$spot][time]};
#var {spot_groups_respawn[$visittimers[$spot][name]]} {$visittimers[$spot][respawn]}; #var {spot_groups_respawn[$visittimers[$spot][name]]} {$visittimers[$spot][respawn]};
}; };
@ -541,53 +416,24 @@
#continue; #continue;
}; };
#var {spotstring} {@write_spot{$visittimers[$spot][name];$visittimers[$spot][time];$visittimers[$spot][respawn]}}; #var {spotstring} {@write_spot{$visittimers[$spot][name];$visittimers[$spot][time];$visittimers[spot][respawn]}};
#line {log} {$xptimer_file} {$spotstring}; #line {log} {$xptimer_file} {$spotstring};
}; }
#foreach {*spot_groups[]} {spot} { #foreach {$spot_groups[]} {spot} {
#var {spotstring} {@write_spot{$spot;$spot_groups[$spot];$spot_groups_respawn[$spot]}}; #var {spotstring} {@write_spot{$spot;$spot_groups[$spot];$spot_groups_respawn[$spot]}};
#line {log} {$xptimer_file} {$spotstring}; #line {log} {$xptimer_file} {$spotstring};
}; }
}; }
#EVENT {SEND OUTPUT} {/writetimerstofile;}; #EVENT {SEND OUTPUT} {writetimerstofile};
#FUNCTION {parse_spot} { #FUNCTION {parse_spot} {
#var {spot_sync_raw} {%0}; #var {spot_sync_raw} {%0};
#replace {spot_sync_raw} {=} {;}; #replace {spot_sync_raw} {=} {;};
#list {spot_sync} {create} {${spot_sync_raw}}; #list {spot_sync} {create} {${spot_sync_raw}};
#return {$spot_sync}; #return {$spot_sync};
}; }
#ALIAS {^dtload$} {
#class {dtsync} {clear};
#class {dtsync} {read} {$xptimersync_file};
#variable {killtimers} {$killtimers_sync};
#variable {visittimers} {$visittimers_sync};
#showme {1};
#format {dtsync_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Synced all available hotspot timers for %clast session%c from the disk.<099>} {Green}{<acf>};
#echo {$dtsync_message};
};
#ALIAS {^dtsave$} {
/writetimerstosyncfile;
#showme {2};
#format {dtsync_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Saved all available hotspot timers from %cthis session%c to the disk.<099>} {Green}{<acf>};
#echo {$dtsync_message};
};
#ALIAS {/writetimerstosyncfile} {
#class {dtsync} {clear};
#class {dtsync} {open};
#var {killtimers_sync} {$killtimers};
#var {visittimers_sync} {$visittimers};
#class {dtsync} {close};
#class {dtsync} {write} {$xptimersync_file};
};
#ACTION {%1 tells you: ruhs_dtsync=[%2] | ruhs_vtsync=[%3]} { #ACTION {%1 tells you: ruhs_dtsync=[%2] | ruhs_vtsync=[%3]} {
#var {synccount} {0}; #var {synccount} {0};
@ -600,83 +446,82 @@
#list dtsync_list create {${dtsync}}; #list dtsync_list create {${dtsync}};
#list vtsync_list create {${vtsync}}; #list vtsync_list create {${vtsync}};
#foreach {*dtsync_list[]} {spot} { #foreach {$dtsync_list[]} {spot} {
#var {syncitem} {@parse_spot{$dtsync_list[$spot]}}; #var {syncitem} {@parse_spot{$dtsync_list[$spot]}};
#var {syncname} {$syncitem[1]}; #var {syncname} {$syncitem[1]};
#var {synctime} {$syncitem[2]}; #var {synctime} {$syncitem[2]};
#foreach {*killtimers[]} {spotident} { #foreach {$killtimers[]} {spotident} {
#var {spotname} {$killtimers[$spotident][name]}; #var {spotname} {$killtimers[$spotident][name]};
#if {"$spotname" == "$syncname"} { #if {"$spotname" == "$syncname"} {
#var {killtimers[$spotident][time]} {$synctime}; #var {killtimers[$spotident][time]} {$synctime};
#math {synccount} {$synccount + 1}; #math {synccount} {$synccount + 1};
}; };
}; }
}; }
#foreach {*vtsync_list[]} {spot} { #foreach {$vtsync_list[]} {spot} {
#var {syncitem} {@parse_spot{$vtsync_list[$spot]}}; #var {syncitem} {@parse_spot{$vtsync_list[$spot]}};
#var {syncname} {$syncitem[1]}; #var {syncname} {$syncitem[1]};
#var {synctime} {$syncitem[2]}; #var {synctime} {$syncitem[2]};
#foreach {*visittimers[]} {spotident} { #foreach {$visittimers[]} {spotident} {
#var {spotname} {$killtimers[$spotident][name]}; #var {spotname} {$killtimers[$spotident][name]};
#if {"$spotname" == "$syncname"} { #if {"$spotname" == "$syncname"} {
#var {visittimers[$spotident][time]} {$synctime}; #var {visittimers[$spotident][time]} {$synctime};
#math {synccount} {$synccount + 1}; #math {synccount} {$synccount + 1};
}; };
}; }
}; }
#format {dtsync_message} {<acf>[<fff>hotspots<acf>] <138>*<acf> Synced %c%d%c spots from %c%s%c.<099>} {Orange}{$synccount}{<acf>}{Green}{%1}{<acf>}; #format {dtsync_message} {%c[XPTimer] %c*%c Synced %c%d%c spots from %c%s%c.} {bold blue}{yellow}{bold blue}{orange}{$synccount}{bold blue}{green}{%1}{bold blue};
#echo {$dtsync_message}; #echo {$dtsync_message};
}; }
#ALIAS {dtsync %1} { #ALIAS {dtsync %1} {
#var {dtsync_msg} {}; #var {dtsync_msg} {};
#var {vtsync_msg} {}; #var {vtsync_msg} {};
#foreach {*killtimers[]} {spotident} { #foreach {$killtimers[]} {spotident} {
#if {$killtimers[$spotident][time] > 0} { #if {$killtimers[$spotident][time] > 0} {
#format {dtsync_msg} {%s,%s=%d} {$dtsync_msg}{$killtimers[$spotident][name]}{$killtimers[$spotident][time]}; #format {dtsync_msg} {%s,%s=%d} {$dtsync_msg}{$killtimers[$spotident][name]}{$killtimers[$spotident][time]};
}; };
}; }
#regex {$dtsync_msg} {^,{(.+)}$} { #var {dtsync_msg} {&1}; }; #regex {$dtsync_msg} {^,{(.+)}$} { #var {dtsync_msg} {&1}; };
#foreach {*visittimers[]} {spotident} { #foreach {$visittimers[]} {spotident} {
#if {$visittimers[$spotident][time] > 0} { #if {$visittimers[$spotident][time] > 0} {
#format {vtsync_msg} {%s,%s=%d} {$vtsync_msg}{$visittimers[$spotident][name]}{$visittimers[$spotident][time]}; #format {vtsync_msg} {%s,%s=%d} {$vtsync_msg}{$visittimers[$spotident][name]}{$visittimers[$spotident][time]};
}; };
}; }
#regex {$vtsync_msg} {^,{(.+)}$} { #var {vtsync_msg} {&1}; }; #regex {$vtsync_msg} {^,{(.+)}$} { #var {vtsync_msg} {&1}; };
#format {sync_message} {tell %s ruhs_dtsync=[%s] | ruhs_vtsync=[%s]} {%1} {$dtsync_msg} {$vtsync_msg}; #format {sync_message} {tell %s ruhs_dtsync=[%s] | ruhs_vtsync=[%s]} {%1} {$dtsync_msg} {$vtsync_msg};
#send {$sync_message}; #send {$sync_message};
}; }
#nop #EVENT {IAC SB GMCP room.info IAC SE}; #nop #EVENT {IAC SB GMCP room.info IAC SE}
#ALIAS {/spottimercheckroomid %1} { #ALIAS {/spottimercheckroomid %1} {
#var {room_info} {%1}; #var {room_info} {%1};
#foreach {*visittimers[]} {spot} { #foreach {$visittimers[]} {spot} {
#regex {$room_info} {$spot} { #regex {$room_info} {$spot} {
#format {visittimers[$spot][time]} {%T}; #format {visittimers[$spot][time]} {%T};
}; }
}; }
}; }
#ALIAS {gsdt} { #ALIAS {gsdt} {
#var {gsdt_string} {}; #var {gsdt_string} {};
#var {spot_groups} {}; #var {spot_groups} {};
#var {group_spot_label} {}; #var {group_spot_label} {};
#foreach {*killtimers[]} {spot} { #foreach {$killtimers[]} {spot} {
#format {spotname} {$killtimers[$spot][name]}; #format {spotname} {$killtimers[$spot][name]};
#var {mins} {???}; #var {mins} {???};
#if {$killtimers[$spot][time] == 0} { #if {$killtimers[$spot][time] == 0} {
#format {spotstring} {%s: ??? |} {$spotname}; #format {spotstring} {%s: ??? |} {$spotname};
#continue;
}; };
#else { #else {
#math {mins} {$current_time - $killtimers[$spot][time]}; #math {mins} {$current_time - $killtimers[$spot][time]};
@ -690,7 +535,7 @@
#else { #else {
#format {spotstring} {%s: %dm |} {$spotname} {$mins} ; #format {spotstring} {%s: %dm |} {$spotname} {$mins} ;
}; };
}; }
#if {"$killtimers[$spot][group]" == "true"} { #if {"$killtimers[$spot][group]" == "true"} {
#if {&spot_groups[$killtimers[$spot][name]] == 0} { #if {&spot_groups[$killtimers[$spot][name]] == 0} {
@ -706,22 +551,21 @@
}; };
#format {gsdt_string} {%s %s} {$gsdt_string} {$spotstring}; #format {gsdt_string} {%s %s} {$gsdt_string} {$spotstring};
}; }
#foreach {*spot_groups} {spot} { #foreach {$spot_groups} {spot} {
#format {gsdt_string} {%s %s} {$gsdt_string} {$group_spot_label[$spot]}; #format {gsdt_string} {%s %s} {$gsdt_string} {$group_spot_label[$spot]};
}; };
#var {spot_groups} {}; #var {spot_groups} {};
#var {group_spot_label} {}; #var {group_spot_label} {};
#foreach {*visittimers[]} {spot} { #foreach {$visittimers[]} {spot} {
#format {spotname} {$visittimers[$spot][name]}; #format {spotname} {$visittimers[$spot][name]};
#var {mins} {???}; #var {mins} {???};
#if {$visittimers[$spot][time] == 0} { #if {$visittimers[$spot][time] == 0} {
#format {spotstring} {%s: ??? |} {$spotname}; #format {spotstring} {%s: ??? |} {$spotname};
#continue;
}; };
#else { #else {
#math {mins} {$current_time - $visittimers[$spot][time]}; #math {mins} {$current_time - $visittimers[$spot][time]};
@ -735,7 +579,7 @@
#else { #else {
#format {spotstring} {%s: %dm |} {$spotname} {$mins} ; #format {spotstring} {%s: %dm |} {$spotname} {$mins} ;
}; };
}; }
#if {"$visittimers[$spot][group]" == "true"} { #if {"$visittimers[$spot][group]" == "true"} {
#if {&spot_groups[$visittimers[$spot][name]] == 0} { #if {&spot_groups[$visittimers[$spot][name]] == 0} {
@ -751,15 +595,15 @@
}; };
#format {gsdt_string} {%s %s} {$gsdt_string} {$spotstring}; #format {gsdt_string} {%s %s} {$gsdt_string} {$spotstring};
}; }
#foreach {*spot_groups} {spot} { #foreach {$spot_groups} {spot} {
#format {gsdt_string} {%s %s} {$gsdt_string} {$group_spot_label[$spot]}; #format {gsdt_string} {%s %s} {$gsdt_string} {$group_spot_label[$spot]};
}; };
#regex {$gsdt_string} {^{(.+)} \|$} {#var {gsdt_string} {&1}; }; #regex {$gsdt_string} {^{(.+)} \|$} {#var {gsdt_string} {&1}; };
#send {group say $gsdt_string}; #send {group say $gsdt_string};
}; }
#CLASS {xptimers} {close}; #CLASS {xptimers} {close};

View File

@ -1,23 +1,16 @@
#CLASS {tpamonitor} {kill}; #CLASS {tpamonitor} {kill};
#CLASS {tpamonitor} {open}; #CLASS {tpamonitor} {open};
#nop ### Turn TPA indicator on ### #nop ### Turn TPA indicator on ###
#action {^ * You are surrounded by a magical impact shield.$} { #action {^ * You are surrounded by a magical impact shield.$} {
#var {tpa_status} {1}; #var {tpa_status} {1};
#var {tpa_color} {invisible}; #var {tpa_color} {invisible};
#nop Update ourselves in the group shield monitor;
#variable {group_shields[$GMCP[charinfo][capname]][tpa]} {1};
/softwritegroupshieldstofile;
update_prompt; update_prompt;
} }
#action {^ * You are surrounded by a %+ magical impact shield.$} #action {^ * You are surrounded by a %+ magical impact shield.$}
{ {
#var {tpa_status} {1}; #var {tpa_status} {1};
#var {tpa_color} {%1}; #var {tpa_color} {%1};
#nop Update ourselves in the group shield monitor;
#variable {group_shields[$GMCP[charinfo][capname]][tpa]} {1};
/softwritegroupshieldstofile;
update_prompt; update_prompt;
} }
#action {^With a noise that sounds like "Plink!", everything around you flashes red for a moment.$} { #action {^With a noise that sounds like "Plink!", everything around you flashes red for a moment.$} {
@ -27,30 +20,18 @@
#nop Update ourselves in the group shield monitor; #nop Update ourselves in the group shield monitor;
#variable {group_shields[$GMCP[charinfo][capname]][tpa]} {1}; #variable {group_shields[$GMCP[charinfo][capname]][tpa]} {1};
/writegroupshieldstofile; /writegroupshieldstofile
update_prompt; update_prompt
} }
#nop ### Turn TPA indicator off ### #nop ### Turn TPA indicator off ###
#action {^There is a sudden white flash. Your magical shield has broken.$} { #action {^There is a sudden white flash. Your magical shield has broken.$} {
#line {log} {$chat_file};
#var {tpa_status} {0}; #var {tpa_status} {0};
#var {tpa_color} {0};
#format {tpa_end} {%T}; #format {tpa_end} {%T};
/break_tpa; /break_tpa
#return @log_line_to_chat{};
} }
#action {^You do not have any arcane or divine protection.$} {
#var {tpa_status} {0};
#var {tpa_color} {0};
#nop Update ourselves in the group shield monitor;
#variable {group_shields[$GMCP[charinfo][capname]][tpa]} {0};
#variable {group_shields[$GMCP[charinfo][capname]][ccc]} {0};
#variable {group_shields[$GMCP[charinfo][capname]][ms]} {0};
#variable {group_shields[$GMCP[charinfo][capname]][kii]} {0};
};
#nop ### Track TPA colors ### #nop ### Track TPA colors ###
#action {^As your shield absorbs the impact, it becomes visible as a %1 glow.$} #action {^As your shield absorbs the impact, it becomes visible as a %1 glow.$}
@ -83,25 +64,24 @@
#math {tpa_dur} {$tpa_end - $tpa_start}; #math {tpa_dur} {$tpa_end - $tpa_start};
#math {tpa_dur} {($tpa_dur - (60 - 1)) / 60}; #math {tpa_dur} {($tpa_dur - (60 - 1)) / 60};
#echo {<168>*** TPA broken! (lasted for $tpa_dur minutes) ***<099>}; #echo {<168>*** TPA broken! (lasted for $tpa_dur minutes) ***<099>};
}; }
#nop Update ourselves in the group shield monitor; #nop Update ourselves in the group shield monitor;
#variable {group_shields[$GMCP[charinfo][capname]][tpa]} {0}; #variable {group_shields[$GMCP[charinfo][capname]][tpa]} {0};
/writegroupshieldstofile; /writegroupshieldstofile
#unvar {tpa_start}; #unvar {tpa_start};
#unvar {tpa_end}; #unvar {tpa_end};
update_prompt; update_prompt
} }
#nop ### alias to reset TPA status, if it breaks and we didn't catch it ###; #nop ### alias to reset TPA status, if it breaks and we didn't catch it ###
#alias {tpareset} { #alias {tpareset} {
#unvar {tpa_start}; #unvar {tpa_start};
#unvar {tpa_end}; #unvar {tpa_end};
#var {tpa_status} {0}; #var {tpa_status} {0};
}; }
#var {tpa_status} {0}; #var {tpa_status} {0};
#variable {tpa_color} {0};
#CLASS {tpamonitor} {close}; #CLASS {tpamonitor} {close};

View File

@ -1,8 +1,6 @@
#CLASS {xpmonitor} {kill}; #CLASS {xpmonitor} {kill};
#CLASS {xpmonitor} {open}; #CLASS {xpmonitor} {open};
#nop window_xp = since last reset, session_xp = overall
#ALIAS {xp_monitor} { #ALIAS {xp_monitor} {
#var {previous_xp} {$latest_xp}; #var {previous_xp} {$latest_xp};
#var {latest_xp} {$GMCP[vitals][xp]}; #var {latest_xp} {$GMCP[vitals][xp]};
@ -10,69 +8,40 @@
#if {$previous_xp != 0} { #if {$previous_xp != 0} {
#math {gained_xp} {$latest_xp - $previous_xp}; #math {gained_xp} {$latest_xp - $previous_xp};
#if {$gained_xp > 0} { #if {$gained_xp > 0} {
#math {window_xp} {$window_xp + $gained_xp};
#math {session_xp} {$session_xp + $gained_xp}; #math {session_xp} {$session_xp + $gained_xp};
}; };
}; };
#format {check_time} {%T}; #format {check_time} {%T};
#nop Calculate the window XP (how much earned since last xpreset); #format {uptime[hours]} {%m} {($check_time - $start_time) / 60 / 60};
#format {uptime[window][hours]} {%m} {($check_time - $start_time) / 60 / 60}; #format {uptime[minutes]} {%m} {($check_time - $start_time) / 60 % 60};
#format {uptime[window][minutes]} {%m} {($check_time - $start_time) / 60 % 60}; #format {uptime[display]} {%th %tm} {$uptime[hours]} {$uptime[minutes]};
#format {uptime[window][display]} {%th %tm} {$uptime[window][hours]} {$uptime[window][minutes]};
#format {xprate} {%d} { ($window_xp / ($uptime[window][hours] + ($uptime[window][minutes] / 60.0))) * 0.001 };
#nop Calculate the session XP (how much earned since client started up); #format {xprate} {%d} { ($session_xp / ($uptime[hours] + ($uptime[minutes] / 60.0))) * 0.001 };
#format {uptime[session][hours]} {%m} {($check_time - $session_start_time) / 60 / 60}; }
#format {uptime[session][minutes]} {%m} {($check_time - $session_start_time) / 60 % 60};
#format {uptime[session][display]} {%th %tm} {$uptime[session][hours]} {$uptime[session][minutes]};
#format {session_xprate} {%d} { ($session_xp / ($uptime[session][hours] + ($uptime[session][minutes] / 60.0))) * 0.001 };
};
#ALIAS {^gsxp$} { #ALIAS {gsxp} {
#format {prompt_xp} {%Gxp in %s (%Gk/h)} {$window_xp} {$uptime[window][display]} {$xprate}; #format {prompt_xp} {%Gxp in %s (%Gk/h)} {$session_xp} {$uptime[display]} {$xprate};
#send {group say $prompt_xp}; #send {group say $prompt_xp};
}; }
#ALIAS {^gsxp all$} {
#format {prompt_xp} {Window: %Gxp in %s (%Gk/h) <|> Session: %Gmil in %s (%Gk/h)} {$window_xp} {$uptime[window][display]} {$xprate} {$session_xp / 1000000.00} {$uptime[session][display]} {$session_xprate};
#send {group say $prompt_xp};
};
#ALIAS {xpreport} {
#format {xpr_window} {%Gxp total in %s @ %Gk/h} {$window_xp} {$uptime[window][display]} {$xprate};
#format {xpr_session} {%Gxp total in %s @ %Gk/h} {$session_xp} {$uptime[session][display]} {$session_xprate};
#showme {=><= XP Report =><=};
#showme {Window: $xpr_window};
#showme {Session: $xpr_session};
};
#ALIAS {xpreset} { #ALIAS {xpreset} {
#var {window_xp} {0}; #var {session_xp} {0};
#var {previous_xp} {0}; #var {previous_xp} {0}
#var {latest_xp} {0};
#var {gained_xp} {0};
#var {uptime[window][hours]} {0}; #var {uptime[hours]} {0};
#var {uptime[window][minutes]} {0}; #var {uptime[minutes]} {0};
#var {uptime[window][seconds]} {0}; #var {uptime[seconds]} {0};
#var {uptime[window][display]} {0};
#format {start_time} {%T}; #format {start_time} {%T};
#format {check_time} {%T}; #format {check_time} {%T};
#format {uptime[window][display]} {%th %tm} {11} {0}; #format {uptime[display]} {%th %tm} {11} {0};
}; }
#var {window_xp} {0};
#var {previous_xp} {0}; #var {previous_xp} {0};
#var {latest_xp} {0}; #var {latest_xp} {0};
#var {gained_xp} {0}; #var {gained_xp} {0};
#var {session_xp} {0}; #var {session_xp} {0};
#var {uptime} {};
#format {start_time} {%T};
#format {check_time} {%T};
#format {session_start_time} {%T};
#CLASS {xpmonitor} {close}; #CLASS {xpmonitor} {close};