Abandoned Realms Logo
Forums/Newbie Q/A/Tintin++ script

Tintin++ script

deauja
Avatar
Posts: 162
10/6/2008, 6:48:47 AM
ARTT (Abandoned Realms TinTin++) scripts

screenshot:
https://a.fsdn.com/con/app/proj/artt/screenshots/Screenshot%20at%202021-03-04%2017-11-10.png/max/max/1

latest revision (source forge):
https://sourceforge.net/projects/artt/files/latest/download

latest revision (GitHub):
https://github.com/animalprimate/ARTT/archive/3.1.9.zip

TinTin++ Client (dependency):
http://tintin.sourceforge.net/download.php

Here is a good place to share. Revision posted on 03/17/2021

All (four) needed files posted below:

readme.txt

main.tin

tmux.conf

tt.vim

Notes or requests for specific updates?

-enemy damage bar near enemy hp bar
On scale from scratches to ERADICATES
Dispater
Avatar
Posts: 780
10/6/2008, 4:24:50 PM
#action {You fade into existence.} {
#var {ivisnow} {-}
} {5}


This ruins it, as you get this message anytime when combating while invis.

Also with meditation, one should prolly replace all the spells with their own choice. I wrote a similiar tick script for JMC, but i used VBscripts for that.
deauja
Avatar
Posts: 162
10/6/2008, 8:39:21 PM
edit
deauja
Avatar
Posts: 162
3/30/2009, 1:46:36 PM
main.tin

you can launch this using 'tt++ main.tin' or open Tintin++/Wintin++ and '#read main.tin'


#nop { AbandonedRealms.com };

#nop { A Playerkilling, Roleplaying MUD };
#nop { Scripts need Tintin++/Wintin++ to run };

#kill;

#nop { Config };
#nop { ****** };

#var {tmux[use]} {yes};

#var {tmux[main_wide]} {81};

#var {tmux[left_wide]} {15};

#nop { Alias };
#nop { ***** };

#alias {exit} { #if { "$tmux[use]" == "no" } {#end} {#sys tmux kill-server} };

#nop { Is it linux? };
#nop { ************ };

#script {path} {

uname | grep -o "Linux" > /dev/null 2>&1 && echo 'yes' || echo 'no';

};

#var {have[linux]} {$path[1]};

#nop { Is it Windows Subsystem for Linux (WSL)? };
#nop { **************************************** };

#script {path} {

uname -a | grep -o "Microsoft" > /dev/null 2>&1 && echo 'yes' || echo 'no';

};

#var {have[windows]} {$path[1]};

#if { "$have[linux]" == "yes" } {

#nop { Check/kill existing tt++ process };
#nop { ******************************** };

#script {path} {pidof tt++};

#if { "$path[1]" != "%d" && "$tmux[use]" == "yes" } {

#show {<118>IMPROPER PROGRAM SHUTDOWN DETECTED, RESTART!<088>};

#show {<118>EXIT GAME USING 'quit' OR 'exit' NEXT TIME!!<088>};

#sys {sleep 3};

#sys {tmux kill-server};

};

#nop { Tintin help info };
#nop { **************** };

#show {<138>'#help' learn tt++ language.<088>};

#show {<138>'exit' to quit artt/tintin++<088>};

#nop { Chosen to use tmux? };
#nop { ******************* };

#script {path} {command -v tmux && echo 'yes' || echo 'no'};

#var {tmux[have]} {$path[2]};

#if { "$tmux[have]" == "yes" && "$tmux[use]" == "yes" } {

#nop { Is tmux open? };
#nop { ************* };

#script {path} {env | grep -q tmux && echo 'yes' || echo 'no'};

#var {tmux[open]} {$path[1]};

#if { "$tmux[open]" == "yes" } {

#nop { Count open panes, if count is 1 tmux is not setup };
#nop { ************************************************* };

#script {path} {tmux list-panes};

#var {tmux[open_panes]} {&path[]};

#if { "$tmux[open_panes]" == "1" } {

#nop { Sleep 1/2 second letting term reach maximized width };
#sys { sleep .5 };

};

#nop { Get terminal width etc };
#nop { ********************** };

#script {path} {tput cols};
#var {tmux[term_wide]} {$path[1]};

#script {path} {tput lines};
#var {tmux[term_high]} {$path[1]};

#math {both_wide} { $tmux[main_wide] + $tmux[left_wide] };

#math {tmux[right_wide]} { $tmux[term_wide] - $both_wide };

#if { $tmux[term_wide] > 119 && $tmux[open_panes] == 1 } {

#sys { tmux source $HOME/ARTT/tmux.conf };

#script {path} {

if [ ! -d "$HOME/ARTT/log" ];

then mkdir $HOME/ARTT/log;

fi;

};

#loop 5 1 cnt {#sys > log/0$cnt};

#nop { Any other tmux sessions named artt open? };
#nop { **************************************** };

#script {path} {

tmux has -t artt > /dev/null 2>&1 && echo 'yes' || echo 'no'

};

#if { "$path[1]" == "yes" } {

#sys {tmux attach -t artt};

} {

#sys {tmux rename-session artt};

};

#nop { Setup tmux panes for tail command of MUD logs };

#sys { tmux split -b -h -l $tmux[left_wide] 'tail -f log/01' };

#sys { tmux split -t %1 -l 1 'tail -f log/02' };

#sys { tmux split -t %0 -h -l $tmux[right_wide] };

#nop { Create pane 3. killp 3 so pane_id matches pane_indexes };

#sys { tmux split -t %3 -p 75 'tail -f log/04' };

#sys { tmux killp -t %3 };

#sys { tmux split -t %4 -l 1 'tail -f log/05' };

#sys { tmux selectp -L };

};

#elseif { $tmux[term_wide] <= 120 && $tmux[open_panes] == 1 } {

#show {<138>Maximize window size to use tmux.<088>};

#show {<138>Or edit #var tmux[use] = no<088>};

#sys {sleep 3};

exit;

};

#unvar {tmux[open_panes]};

} {

#show {<138>Please enter 'tmux' first.<088>};

#show {<138>Or edit #var tmux[use] = no<088>};

#sys {sleep 3};

exit;

};

};

#elseif { "$tmux[have]" == "no" && "$tmux[use]" == "yes" } {

#show {<138>Please install tmux.<088>};

#sys {sleep 3};

exit;

};

#nop { List scripts };
#nop { ************ };

#alias {ls} {

#script {path} {pwd};

#show <148>$path[1]<088>;

#script {path} {ls *.tin};

#if { "$path[1]" == "%!*.tin" } {

#system { ls *.tin; };

};

};

#show {<138>use ls to list tt++ scripts.<088>};

#nop { Use vi/vim to edit scripts };
#nop { ************************** };

#show {<138>vi script.tin for CLI edits.<088>};

#alias {vi %1} {

#system { vi %1; };

};

#nop { Check if vim is installed };
#nop { ************************* };

#script {path} {command -v vim > /dev/null 2>&1 && echo 'yes' || echo 'no'};

#var have[vim] {$path[1]};

#if { "$have[vim]" == "yes" } {

#nop { Configure tt++/vim highlighting syntax };
#nop { ************************************** };

#alias {syntax} {

#script path {cat ~/.vimrc | grep 'syntax *'};

#if { "$path[1]" == "syntax on" } {

#sys {

find ~/ -name '.vimrc' |
xargs sed -i 's/syntax on/syntax off/g';

};

#show {<138>coloured vim syntax off<088>};

};

#elseif { "$path[1]" == "syntax off" } {

#sys {

find ~/ -name '.vimrc' |
xargs sed -i 's/syntax off/syntax on/g';

};

#show {<138>coloured vim syntax on<088>};

};

};

#script {path} {

[ -f $HOME/.vim/ftdetect/tt.vim ]

&& echo "<138>'syntax' toggles vim colors.<088>"

|| echo "<138>Added colored syntax to vim.<088>";

};

#show $path[1];

#script {path} {

if [ ! -d "$HOME/.vim" ];

then mkdir $HOME/.vim;

fi;

if [ ! -d "$HOME/.vim/syntax" ];

then mkdir $HOME/.vim/syntax;

fi;

if [ ! -d "$HOME/.vim/ftdetect" ];

then mkdir $HOME/.vim/ftdetect;

fi;

if [ ! -f "$HOME/.vim/syntax/tt.vim" ];

then cp $HOME/ARTT/tt.vim $HOME/.vim/syntax;

fi;

if [ ! -f "$HOME/.vim/ftdetect/tt.vim" ];

then echo "au BufNewFile,BufRead *.tt,*.tin set ft=tt" >>
$HOME/.vim/ftdetect/tt.vim;

fi;

if [ ! -f "$HOME/.vimrc" ];

then echo "syntax on" >> $HOME/.vimrc;

fi;

};

} {

#show {<138>Please install vim.<088>};

};

#show {<138>Ctrl++ and Ctrl+- zooms font<088>};

} {

#show {<138>Please install Linux.<088>};

};

#nop { MSDP is a data protocol to send out of bounds communication between a MUD
server and a MUD client, and is specifically targeted at client side scripts:
http://tintin.sourceforge.net/msdp/ };

#format IAC %a 255;
#format DONT %a 254;
#format DO %a 253;
#format WONT %a 252;
#format WILL %a 251;
#format SB %a 250;
#format SE %a 240;
#format MSDP %a 69;
#format VAR %a 01;
#format VAL %a 02;

#nop { Replace MSDP color codes with ones that work in my terminal emulator. };

#alias {replace_color_codes} {

#replace {%1} {`1} {<018>}; #nop {RED};
#replace {%1} {`2} {<028>}; #nop {GREEN};
#replace {%1} {`3} {<038>}; #nop {YELLOW};
#replace {%1} {`4} {<048>}; #nop {BLUE};
#replace {%1} {`5} {<058>}; #nop {PURPLE};
#replace {%1} {`6} {<068>}; #nop {CYAN};
#replace {%1} {`7} {<eee>}; #nop {WHITE};
#replace {%1} {`8} {<ccc>}; #nop {GRAY};
#replace {%1} {`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`!} {<118>}; #nop {RED BOLD};
#replace {%1} {`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {`\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {``} {<088>}; #nop {RESET TO DEFAULT};

};

#event {IAC WILL MSDP} {#send {$IAC$DO$MSDP\}};

#nop { This event sets our MSDP variables. };

#event {IAC SB MSDP} {

#if { "%0" == "ROOM_%w" } {

#regexp {%0} {ROOM_{.*}} {

#if { "&1" != "MAP" } {

#format {temp} {%l} {&1};

#var room[$temp] {%1};

} {

#var {ROOM_MAP} {%1};

};
};
};

#elseif { "%0" == "AREA_NAME" } {

#var {room[area]} {%1};

};

#elseif { "%0" == "ADRENALINE" } {

#var {msdp[adrenaline]} {%1};

};

#elseif { "%0" == "WORLD_TIME" } {

#if { "%1" != "" && "%1" != " " } {

#var {log06[time]} {#[fg=white]%1};

#delay {24} {

#var {log06[time]} {#[fg=yellow blink]%1#[fg=white none]};

};

};

};

#elseif { "%0" == "THIRST" } {

#if { "%1" == "[*----]" || "%1" == "[-----]" } {

#var {log06[thirst]} {#[fg=white][thirst]#[fg=red]%1};

} {

#var {log06[thirst]} {#[fg=white][thirst]#[fg=white]%1};

};

};

#elseif { "%0" == "HUNGER" } {

#if { "%1" == "[*----]" || "%1" == "[-----]" } {

#var {log06[hunger]} {#[fg=white][hunger]#[fg=red]%1};

} {

#var {log06[hunger]} {#[fg=white][hunger]#[fg=white]%1};

};

};

#elseif { "%0" == "HITROLL" } {

#var {msdp[hit]} {%1};

};

#elseif { "%0" == "DAMROLL" } {

#var {msdp[dam]} {%1};

};

#elseif { "%0" == "EXPERIENCE_MAX" } {

#var {log05[max]} {%1};

};

#elseif { "%0" == "EXPERIENCE_TNL" } {

#var {log05[xptnl]} {%1};

};

#elseif { "%0" == "EXPERIENCE" } {

#var {log05[xpreg]} {%1};

};

#elseif { "%0" == "GOLD" } {

#var {temp} {%1};

#format {temp} {%g} {$temp};

#if { %1 >= 10000 } {

#var {log05[gold]} {<038>$temp gold<088>};

} {

#var {log05[gold]} {<088>$temp gold<088>};

};

};

#elseif { "%0" == "CHANNELS" } {

#var {chat} {%1};

replace_color_codes chat;

#replace {chat} {\n} { };

#line log {log/04} { $chat};

};

#elseif { "%0" == "AFFECTS" } {

#var {log05[affe]} {%1};

};

#elseif { "%0" == "INVENTORY" } {

#var {log05[inve]} {%1};

};

#elseif { "%0" == "GROUP" } {

#var {log05[group]} {%1};

};

#elseif { "%0" == "WEIGHT" } {

#var {log05[lb]} {%1};

};

#elseif { "%0" == "WEIGHT_MAX" } {

#var {log05[lb_max]} {%1};

};

#elseif { "%0" == "TANK_NAME" && "%1" != "" } {

#var {tank} {%1};

};

#elseif { "%0" == "CHARACTER_NAME" } {

#var {whoami} {%1};

};

#unvar temp;

};

#nop { This event is generated at the end of an MSDP sub negotiation. };

#event {IAC SB MSDP IAC SE} {#nop};

#act {Torrents of rain flood through the area.} {msdp_report};

#nop { Ask the server to report all keys inside REPORTABLE_VARIABLES. };

#alias {msdp_report} {

#var REPORTABLE_VARIABLES {
{AFFECTS};
{EXPERIENCE};
{EXPERIENCE_MAX};
{EXPERIENCE_TNL};
{SHIELD};
{POWER};
{CHII};
{HEALTH};
{HEALTH_MAX};
{MANA};
{MANA_MAX};
{MOVEMENT};
{MOVEMENT_MAX};
{HITROLL};
{DAMROLL};
{COMBAT_STYLE};
{AREA_NAME};
{ROOM_EXITS};
{ROOM_NAME};
{ROOM_VNUM};
{ROOM_DESC};
{WORLD_TIME};
{ROOM_MAP};
{ROOM_TERRAIN};
{GROUP};
{CHANNELS};
{INVENTORY};
{OPPONENT_NAME};
{OPPONENT_LEVEL};
{OPPONENT_HEALTH};
{OPPONENT_HEALTH_MAX};
{OPPONENT_COMBAT_STYLE};
{OPPONENT_WEAPON_OFFH};
{CHARACTER_NAME};
{TITLE};
{ADRENALINE};
{RACE};
{CLASS};
{GOLD};
{SHIELD_MAX};
{AC_PIERCE};
{AC_BASH};
{AC_SLASH};
{AC_MAGIC};
{SAVING_AFF};
{SAVING_MAL};
{SAVING_MEN};
{WEIGHT};
{WEIGHT_MAX};
{TANK_NAME};
{HUNGER};
{THIRST};
{OVERLORD};
{POKER};
{HINT};
};

#var result {$IAC$SB$MSDP${VAR}REPORT};

#foreach {$REPORTABLE_VARIABLES[]} {tmp} {

#var result {$result${VAL}$tmp};

};

#send {$result$IAC$SE\};

#unvar REPORTABLE_VARIABLES

};

#alias {msdp_list} {#send {$IAC$SB$MSDP${VAR}LIST${VAL}%0$IAC$SE\}};

#alias {msdp_send} {#send {$IAC$SB$MSDP${VAR}SEND${VAL}%0$IAC$SE\}};

#nop { If msdp_report hasn't been sent, send msdp_report and unevent. };

#if { "$msdp[active]" != "1" } {

#event {RECEIVED OUTPUT} {

#delay {.50} {msdp_report};

#unevent {RECEIVED OUTPUT};

};

};

#nop { Are you online? };
#nop { *************** };

#nop { When offline connection attempt freezes artt launch, this will solve };

#script {path} {ping -c 1 -q google.com > /dev/null 2>&1; echo $?};

#if { "$path[1]" == "0" } { #var {have[net]} {yes} } { #var {have[net]} {no} };

#nop { Connect to your MUD };
#nop { ******************* };

#var mud[name] abandonedrealms;

#var mud[host] abandonedrealms.com;

#var mud[port] 9000;

#if { "$have[net]" == "yes" } {

#ses $mud[name] $mud[host] $mud[port];

} {

#show {<118>Unable to reach ${mud[host]}<088>};

#show {<118>Check internet connection.<088>};

#sys {sleep 3};

exit;

};

#event {SESSION DEACTIVATED} {

#gts {

#delay {.5} {

#show {<138>Recconect? y/n<088>};

#macro {n} {

#if { "$tmux[use]" == "no" } { #end } { #sys tmux kill-server };

};

#macro {y} {

#unmacro {n}; #unmacro {y}; #read {main.tin};

};
};
};
};

#nop { Exits trigger };
#nop { ************* };

#act {~^[Exits: %1]$} {

#var exits {%1};

#if { "$gag_exits" == "1" } { #line gag };

};

#nop { Various character states are set here };
#nop { ************************************* };

#nop { Character is/isn't overburnded };

#act {You feel suddenly overburdened by weight.} { #var burden 1; };

#act {You are no longer overburdened by weight.} { #var burden 0; };

#nop { Character is a ghost };

#act {You turn into an invincible ghost for a few minutes.} {

#var my[state] {ghost};

};

#nop { Character is/isn't daydreaming };

#act {Your mind wanders into a daydream of another, much stranger world.} {

#var my[state] {daydreaming};

};

#act {You snap suddenly out of the daydream you were in.} {

#var my[state] {standing};

};

#nop { Character is standing };

#act {You wake and stand up.} { #var my[state] {standing} };

#act {You stand up.} { #var my[state] {standing} };

#nop { Character is sleeping };

#act {You go to sleep on %1.} { #var my[state] {sleeping} };

#act {You go to sleep.} { #var my[state] {sleeping} };

#act {In your dreams, or what?} { #var my[state] {sleeping} };

#act {You are already sleeping.} { #var my[state] {sleeping} };

#act {You can't see anything, you're sleeping!} { #var my[state] {sleeping} };

#nop { Character is sitting };

#act {You wake and sit on %1.} { #var my[state] {sitting} };

#act {You wake and sit up.} { #var my[state] {sitting} };

#act {You stop resting.} { #var my[state] {sitting} };

#act {You sit down.} { #var my[state] {sitting} };

#nop { Character is resting };

#act {You wake up and start resting.} { #var my[state] {resting} };

#act {You wake up and rest on %1.} { #var my[state] {resting} };

#act {You have been KILLED!!} { #var my[state] {resting} };

#act {You rest.} { #var my[state] {resting} };

#nop { Make who list };
#nop { ************* };

#act {^Players found: %1} {
#list who clear;
#foreach {$player[]} {add} {
#list who add $add;
};
#unvar {add};
#unvar {player};
#if { "$gag_who" == "on" } { #delay {.5} { #var gag_who off }};
#if { "$gag_who" == "on" } { #line gag };
}

#act {^[%1] %2.$} {#var control {%1}} {0};

#act {^There is %1 character on\; the most on this past month was %2.$} {
#if { "$gag_who" == "on" } { #line gag };
}

#act {^There are %1 characters on\; the most on this past month was %2.$} {
#if { "$gag_who" == "on" } { #line gag };
}

#act {^[%1] %2 %3 %4$} {
#if { "%2" != "Lord"
&& "%2" != "Duchess"
&& "%2" != "Dame"
&& "%2" != "Sir"
&& "%2" != "Duke"
&& "%2" != "[%*]"
&& "%2" != "<%*>"
&& "%2" != "(%*)" } {
#var {player[%2]} {};
};

#elseif { "%3" != "Lord"
&& "%3" != "Duchess"
&& "%3" != "Dame"
&& "%3" != "Sir"
&& "%3" != "Duke"
&& "%3" != "[%*]"
&& "%3" != "<%*>"
&& "%3" != "(%*)" } {
#var {player[%3]} {};
};

#elseif { "%4" != "Lord"
&& "%4" != "Duchess"
&& "%4" != "Dame"
&& "%4" != "Sir"
&& "%4" != "Duke"
&& "%4" != "[%*]"
&& "%4" != "<%*>"
&& "%4" != "(%*)" } {
#var {player[%4]} {};
};

#if { "$gag_who" == "on" } { #line gag };
} {5};

#act {^[%1] %2 %3 %4 %5$} {
#if { "%2" != "Lord"
&& "%2" != "Duchess"
&& "%2" != "Dame"
&& "%2" != "Sir"
&& "%2" != "Duke"
&& "%2" != "[%*]"
&& "%2" != "<%*>"
&& "%2" != "(%*)" } {
#var {player[%2]} {};
};

#elseif { "%3" != "Lord"
&& "%3" != "Duchess"
&& "%3" != "Dame"
&& "%3" != "Sir"
&& "%3" != "Duke"
&& "%3" != "[%*]"
&& "%3" != "<%*>"
&& "%3" != "(%*)" } {
#var {player[%3]} {};
};

#elseif { "%4" != "Lord"
&& "%4" != "Duchess"
&& "%4" != "Dame"
&& "%4" != "Sir"
&& "%4" != "Duke"
&& "%4" != "[%*]"
&& "%4" != "<%*>"
&& "%4" != "(%*)" } {
#var {player[%4]} {};
};

#elseif { "%5" != "Lord"
&& "%5" != "Duchess"
&& "%5" != "Dame"
&& "%5" != "Sir"
&& "%5" != "Duke"
&& "%5" != "[%*]"
&& "%5" != "<%*>"
&& "%5" != "(%*)" } {
#var {player[%5]} {};
};

#if { "$gag_who" == "on" } { #line gag };
} {4};

#act {^[%1] %2 %3 %4 %5 %6$} {
#if { "%2" != "Lord"
&& "%2" != "Duchess"
&& "%2" != "Dame"
&& "%2" != "Sir"
&& "%2" != "Duke"
&& "%2" != "[%*]"
&& "%2" != "<%*>"
&& "%2" != "(%*)" } {
#var {player[%2]} {};
};

#elseif { "%3" != "Lord"
&& "%3" != "Duchess"
&& "%3" != "Dame"
&& "%3" != "Sir"
&& "%3" != "Duke"
&& "%3" != "[%*]"
&& "%3" != "<%*>"
&& "%3" != "(%*)" } {
#var {player[%3]} {};
};

#elseif { "%4" != "Lord"
&& "%4" != "Duchess"
&& "%4" != "Dame"
&& "%4" != "Sir"
&& "%4" != "Duke"
&& "%4" != "[%*]"
&& "%4" != "<%*>"
&& "%4" != "(%*)" } {
#var {player[%4]} {};
};

#elseif { "%5" != "Lord"
&& "%5" != "Duchess"
&& "%5" != "Dame"
&& "%5" != "Sir"
&& "%5" != "Duke"
&& "%5" != "[%*]"
&& "%5" != "<%*>"
&& "%5" != "(%*)" } {
#var {player[%5]} {};
};

#elseif { "%6" != "Lord"
&& "%6" != "Duchess"
&& "%6" != "Dame"
&& "%6" != "Sir"
&& "%6" != "Duke"
&& "%6" != "[%*]"
&& "%6" != "<%*>"
&& "%6" != "(%*)" } {
#var {player[%6]} {};
};

#if { "$gag_who" == "on" } { #line gag };
} {3};

#act {^[%1] %2 %3 %4 %5 %6 %7$} {
#if { "%2" != "Lord"
&& "%2" != "Duchess"
&& "%2" != "Dame"
&& "%2" != "Sir"
&& "%2" != "Duke"
&& "%2" != "[%*]"
&& "%2" != "<%*>"
&& "%2" != "(%*)" } {
#var {player[%2]} {};
};

#elseif { "%3" != "Lord"
&& "%3" != "Duchess"
&& "%3" != "Dame"
&& "%3" != "Sir"
&& "%3" != "Duke"
&& "%3" != "[%*]"
&& "%3" != "<%*>"
&& "%3" != "(%*)" } {
#var {player[%3]} {};
};

#elseif { "%4" != "Lord"
&& "%4" != "Duchess"
&& "%4" != "Dame"
&& "%4" != "Sir"
&& "%4" != "Duke"
&& "%4" != "[%*]"
&& "%4" != "<%*>"
&& "%4" != "(%*)" } {
#var {player[%4]} {};
};

#elseif { "%5" != "Lord"
&& "%5" != "Duchess"
&& "%5" != "Dame"
&& "%5" != "Sir"
&& "%5" != "Duke"
&& "%5" != "[%*]"
&& "%5" != "<%*>"
&& "%5" != "(%*)" } {
#var {player[%5]} {};
};

#elseif { "%6" != "Lord"
&& "%6" != "Duchess"
&& "%6" != "Dame"
&& "%6" != "Sir"
&& "%6" != "Duke"
&& "%6" != "[%*]"
&& "%6" != "<%*>"
&& "%6" != "(%*)" } {
#var {player[%6]} {};
};

#elseif { "%7" != "Lord"
&& "%7" != "Duchess"
&& "%7" != "Dame"
&& "%7" != "Sir"
&& "%7" != "Duke"
&& "%7" != "[%*]"
&& "%7" != "<%*>"
&& "%7" != "(%*)" } {
#var {player[%7]} {};
};

#if { "$gag_who" == "on" } { #line gag };
} {2};

#act {^[%1] %2 %3 %4 %5 %6 %7 %8$} {
#if { "%2" != "Lord"
&& "%2" != "Duchess"
&& "%2" != "Dame"
&& "%2" != "Sir"
&& "%2" != "Duke"
&& "%2" != "[%*]"
&& "%2" != "<%*>"
&& "%2" != "(%*)" } {
#var {player[%2]} {};
};

#elseif { "%3" != "Lord"
&& "%3" != "Duchess"
&& "%3" != "Dame"
&& "%3" != "Sir"
&& "%3" != "Duke"
&& "%3" != "[%*]"
&& "%3" != "<%*>"
&& "%3" != "(%*)" } {
#var {player[%3]} {};
};

#elseif { "%4" != "Lord"
&& "%4" != "Duchess"
&& "%4" != "Dame"
&& "%4" != "Sir"
&& "%4" != "Duke"
&& "%4" != "[%*]"
&& "%4" != "<%*>"
&& "%4" != "(%*)" } {
#var {player[%4]} {};
};

#elseif { "%5" != "Lord"
&& "%5" != "Duchess"
&& "%5" != "Dame"
&& "%5" != "Sir"
&& "%5" != "Duke"
&& "%5" != "[%*]"
&& "%5" != "<%*>"
&& "%5" != "(%*)" } {
#var {player[%5]} {};
};

#elseif { "%6" != "Lord"
&& "%6" != "Duchess"
&& "%6" != "Dame"
&& "%6" != "Sir"
&& "%6" != "Duke"
&& "%6" != "[%*]"
&& "%6" != "<%*>"
&& "%6" != "(%*)" } {
#var {player[%6]} {};
};

#elseif { "%7" != "Lord"
&& "%7" != "Duchess"
&& "%7" != "Dame"
&& "%7" != "Sir"
&& "%7" != "Duke"
&& "%7" != "[%*]"
&& "%7" != "<%*>"
&& "%7" != "(%*)" } {
#var {player[%7]} {};
};

#elseif { "%8" != "Lord"
&& "%8" != "Duchess"
&& "%8" != "Dame"
&& "%8" != "Sir"
&& "%8" != "Duke"
&& "%8" != "[%*]"
&& "%8" != "<%*>"
&& "%8" != "(%*)" } {
#var {player[%8]} {};
};

#if { "$gag_who" == "on" } { #line gag };
} {1};

#nop { Ctrl + Shift + = or Ctrl + - zoom terminal text but panes need resize };

#delay {1} {

#event {SCREEN RESIZE} {

#sys tmux resize-pane -t %%1 -x $tmux[left_wide];

#sys tmux resize-pane -x $tmux[main_wide];

msdp_report;

};

};

#event {VARIABLE UPDATE log06} {

#delay {.1} {

#sys {

tmux set -g status-left
" $log06[time]";

};

#sys {

tmux set -g status-right
"$log06[hunger] $log06[thirst] ";

};

};

};

#event {VARIABLE UPDATE log05} {

#delay {.1} {

#nop { INVENTORY };
#nop { ********* };

#line log {log/05} { <174>INVENTORY<088> };

#foreach {$log05[inve][]} {item} {

#if { "$log05[inve][$item]" > "1" } {

#line log {log/05} { $item ($log05[inve][$item])};

} {

#line log {log/05} { $item };

};

};

#unvar {item};

#line log {log/05} { ($log05[lb]/$log05[lb_max] lbs & $log05[gold])};

#nop { GROUP };
#nop { ***** };

#line log {log/05} {\n <174> GROUP <088> };

#nop { Calculate xptnl };
#nop { *************** };

#math {temp} { $log05[xptnl] - $log05[xpreg] };

#format {temp} {%g} {$temp};

#if { $temp > 0 } {

#if { $temp <= 1000 } {

#var {true_tnl} {[<158>$temp tnl<088>]};

} {

#var {true_tnl} {[<088>$temp tnl<088>]};

};

};

#foreach {$log05[group][]} {memb} {

#regexp {$log05[group][$memb]} {"hp":%d,"mp":%d} {

#if { &1 >= 41 } {

#if { "$memb" == "$whoami" } {

#line log {log/05} { <088>(&1) $memb<088> $true_tnl};

} {

#line log {log/05} { <088>(&1) $memb<088>};

};

};

#elseif { &1 <= 40 && &1 >= 21 } {

#if { "$memb" == "$whoami" } {

#line log {log/05} { <538>(&1) $memb<088> $true_tnl};

} {

#line log {log/05} { <538>(&1) $memb<088>};

};

};

#elseif { &1 <= 20 } {

#if { "$memb" == "$whoami" } {

#line log {log/05} { <518>(&1) $memb<088> $true_tnl};

} {

#line log {log/05} { <518>(&1) $memb<088>};

};

};

};

};

#nop { AFFECTS };
#nop { ******* };

#line log {log/05} {\n <174> AFFECTS <088> };

#if { "$log05[affe][$spell]" == "0" } {

#line log {log/05} { You are not under any affects.};

} {

#foreach {$log05[affe][]} {spell} {

#line log {log/05} { $spell $log05[affe][$spell] };

};

};

#nop { Adjust tmux pane height };
#nop { *********************** };

#math {tmux[y]} {&log05[group][] + &log05[inve][] + &log05[affe][] + 7};

#script {path} {tmux display -t 5 -p "#{pane_height}"};

#if { "$path[1]" != "$tmux[y]" } {

#sys { tmux resize-pane -t %%5 -y $tmux[y] };

};

#unvar {tmux[y]};

};
};

#event {VARIABLE UPDATE ROOM_MAP} {

#var {room[map]} {%1};

replace_color_codes room[map];

#math {pad} { ( $tmux[left_wide] - 9 ) / 2 };

#format {pad} {%+${pad}s} {};

#replace {room[map]} {\r} {$pad};

#script {path} {tmux display -t 2 -p "#{pane_height}"};

#if { "$path[1]" != "12" } {

#sys tmux resize-pane -t 2 -y 12;

};

#if { "$room[map]" == " " } {

#12 { #line log {log/02} { } };

} {

#line log {log/02} {${pad}<174> MAP <088>};

#line log {log/02} {${pad}$room[map]};

};

#unvar {ROOM_MAP};

#unvar {pad};

};
deauja
Avatar
Posts: 162
4/15/2009, 4:50:34 AM
tmux.conf

# change the prefix from 'C-b' to 'C-a'

# (remap capslock to CTRL for easy access)
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# start with window 1 (instead of 0)
set -g base-index 1

# start with pane 1
set -g pane-base-index 1

unbind '"'
unbind %

# reload config file
bind r source-file ~/ARTT/tmux.conf

# shorten command delay
set -sg escape-time 1

# don't rename windows automatically
set -g allow-rename off

# mouse control (clickable windows, panes, resizable panes)
set -g mouse off

# enable vi mode keys
set-window-option -g mode-keys vi

# set default terminal mode to 256 colors
set -g default-terminal "screen-256color"


######################
### DESIGN CHANGES ###
######################

# modes
setw -g clock-mode-colour colour5
setw -g mode-style 'fg=colour1 bg=colour18 bold'

# window
set -g window-style 'fg=colour247,bg=colour236'

# panes
set -g pane-border-style 'fg=colour236,bg=colour236'
set -g pane-active-border-style 'fg=colour236,bg=colour236'

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style 'fg=colour247,bg=colour236'

# statusbar left msg
set -g status-left ''
set -g status-right '%d %b %Y %l:%M %p '
set -g status-right-length 50
set -g status-left-length 80

# statusbar left msg
setw -g window-status-current-style 'fg=colour247,bg=colour236'
setw -g window-status-current-format ''

setw -g window-status-style 'fg=colour247,bg=colour236'
setw -g window-status-format '#I #W #F'

setw -g window-status-bell-style 'fg=white bg=colour1 bold'

# messages
set -g message-style 'fg=colour18 bg=colour4 bold'
RebornShadows
Avatar
Posts: 272
4/15/2009, 5:35:34 AM
deauja marry me
Mahkan
Posts: 264
4/15/2009, 3:11:27 PM
you guys are funny
deauja
Avatar
Posts: 162
4/15/2009, 4:49:29 PM
yes I'll marry you, i'm so happy you asked. :P
Stiehl26
Posts: 743
4/15/2009, 4:51:58 PM
I havet seen a wintin version other than the old wintin 95....i googled the version you had mentioned and came up with nada. Where can a newer version of wintin be found?
deauja
Avatar
Posts: 162
4/15/2009, 4:55:12 PM
blank
Xerties
Posts: 484
4/15/2009, 7:15:16 PM
So I just started using tintin++, but I have a problem. How do I keep it from deleting all my triggers and whatnot after I logout?
deauja
Avatar
Posts: 162
4/15/2009, 11:56:10 PM
You edit your script file with notepad++ or Gedit.

http://notepad-plus-plus.org/
https://wiki.gnome.org/Apps/Gedit

Using the command '#write' will save your triggers but will not necessarily save your 'whatnot'.
goofy
Avatar
Posts: 54
4/24/2011, 2:41:18 PM
AR isn't about writing huge pages of script its about hacking monsters fighting together. You've put lots of work into these i can see, you must really like scripting maybe you should move unto learning a real programmers language like C.
deauja
Avatar
Posts: 162
3/20/2012, 1:38:46 AM
Thank you, I agree.
Eloret
Posts: 403
3/20/2012, 2:04:31 PM
Gibrish...just sayin.
Grunchel
Posts: 80
3/20/2012, 5:16:54 PM
I like the vim directional keys, I always thought about making a layout similar to that of nethack.
Davairus
Avatar
Posts: 10674
3/22/2012, 5:30:33 AM
macroing char creation... wat
deauja
Avatar
Posts: 162
3/22/2012, 2:39:30 PM
deauja
Avatar
Posts: 162
3/25/2012, 6:49:34 AM
deauja
Avatar
Posts: 162
9/4/2012, 8:31:31 AM
it's an honor to be allowed here. you're all so great. thank you for letting me share this.
deauja
Avatar
Posts: 162
2/7/2013, 12:45:47 AM
deauja
Avatar
Posts: 162
1/27/2014, 4:30:37 PM
deauja
Avatar
Posts: 162
2/10/2014, 7:50:30 PM
Niladein
Posts: 60
2/11/2014, 7:44:57 AM
This is why I will never really be good at this game... Cause I see all that and all I can say is... What?
kento
Posts: 338
2/11/2014, 8:05:17 AM
Man, that guy put a stupid amount of time into those scripts. lol You would need to invest time to even figure out the intention of each script, and then know the commands of the client involved, to understand them. Dayum that is so much work.
deauja
Avatar
Posts: 162
2/11/2014, 2:15:14 PM
deauja
Avatar
Posts: 162
2/15/2014, 9:17:49 PM
Linux saves...
deauja
Avatar
Posts: 162
3/4/2014, 4:23:12 AM
deauja
Avatar
Posts: 162
3/5/2014, 10:08:29 AM
Beauty is in the eye of the beholder.
Image
deauja
Avatar
Posts: 162
3/8/2014, 1:50:03 AM
Ergorion
Posts: 2157
9/23/2014, 6:43:10 PM
This is what I was thinking of.
deauja
Avatar
Posts: 162
11/17/2014, 2:47:54 PM
deauja
Avatar
Posts: 162
11/20/2014, 2:44:49 AM
deauja
Avatar
Posts: 162
11/20/2014, 11:18:40 PM
deauja
Avatar
Posts: 162
11/26/2014, 5:21:19 AM
Faelon
Posts: 938
11/26/2014, 5:33:18 AM
To be honest, I am completely clueless when it comes to Tintin - to me it simply looks like a dos window. Not sure even how to open and run the game, let alone the script you've uploaded here. Lol
deauja
Avatar
Posts: 162
11/26/2014, 11:15:37 AM
I will do what I can to make it simpler.

I appreciate your comment my friend.
deauja
Avatar
Posts: 162
11/26/2014, 11:32:52 AM
deauja
Avatar
Posts: 162
11/26/2014, 11:35:12 AM
deauja
Avatar
Posts: 162
11/26/2014, 12:41:05 PM
deauja
Avatar
Posts: 162
12/1/2014, 2:29:09 AM
deauja
Avatar
Posts: 162
12/2/2014, 3:49:23 AM
Davairus
Avatar
Posts: 10674
12/2/2014, 4:18:38 AM
Awesome.
deauja
Avatar
Posts: 162
12/5/2014, 1:38:11 AM
Yay me! Many thanks...
deauja
Avatar
Posts: 162
12/5/2014, 12:31:20 PM
Davairus
Avatar
Posts: 10674
12/5/2014, 5:36:14 PM
fyi added eMSDP_QUESTOR
Lariel
Posts: 9
8/9/2015, 2:48:39 PM
Do I need to fiddle with this if I use a mac? I am very new to scripting and gave up tintin++ a while ago until I decided to come back to AR...

I have followed all steps and installed tmux.
But I have difficulty getting AR to launch.

When I try ./ARTT.sh , I get

"
You're using a CLI
./ARTT.sh: line 8: /usr/bin/tmux: No such file or directory
"

I have literally flooded all my folders with copies of ARTT and TMUX and tt++ to get ./ARTT.sh to launch but it does not work...

I have also tried to #read the .tt files in tintin++ after launching it but I have a feeling that doesn't work...

I use a mac (no Cmud no Mushclient) and any help would be much appreciated!
Lariel
Posts: 9
8/9/2015, 2:54:38 PM
I forgot to add, I also tried to change as follows:

else
echo "You're using a CLI"
user/<user name>/tmux new-session -s ARTT "tt++ ~/ARTT/abandonedrealms.tt"
fi

I did put in my user name in the <> to point to the tmux directory accurately

I also tried a terminal emulator (iTerm2).. no improvement
Nycticora
Posts: 2277
8/9/2015, 6:05:06 PM
install tmux bro
Lariel
Posts: 9
8/10/2015, 5:20:53 AM
Thanks for feedback!

But I did that already since it was clearly in the readme. I had to install homebrew, update to yosemite, install xcode, before I could install tmux but it is there now...

I thought the shell file could not find the directory of my tt++ or tmux folder so I tried to copy those two items everywhere to no avail.

Then I tried changing the directories in the ARTT.sh file to no avail.

Have not tried changing the directories in the abandonedrealms.tt file since I think that would be getting ahead of myself for now.
Davairus
Avatar
Posts: 10674
8/10/2015, 9:22:36 AM
have you tried running it as an app

i.e. open -a <whatevername>
Lariel
Posts: 9
8/10/2015, 10:00:22 AM
Thanks for the attention! Really appreciate it.

Just tried open -a to no avail.
"open -a artt.sh" = "unable to find application named artt.sh"
"open -a /artt.sh" = FSPathMakeRef failed
"open -a ./artt.sh" = "unable to find application named ./artt.sh"

./artt.sh works fine with the problem that the shell script artt.sh (I'm guessing it is a shell script) itself cannot find the tmux file or directory.

I have tmux2.0. Tried it. Tried renaming it to tmux (no 2.0).

On another note, the reason I am back to tintin++ is because I have no idea how to get msdp to work on mudlet. If anyone has experience with msdp and mudlet, that would help immensely too.
m1coftw
Avatar
Posts: 286
8/10/2015, 6:39:01 PM
Sometimes it gives a fubar error, depending on OS because it can't execute a script due to CHMOD permissions. Try setting chmod 777 and retry? Make sure the directories included also have 777 chmod...

Or try to CHOWN it for you user if that doesnt help...

Either that or you have some dependency libraries missing.
Lariel
Posts: 9
8/11/2015, 4:57:38 PM
Mudding really seems like rocket science sometimes.

Thanks for the help all! Gave up trying to load the file and figured I'd just fiddle around to try and understand how the files work, then write my own files.

=)
Nycticora
Posts: 2277
8/11/2015, 6:08:53 PM
I have a mac and I've been meaning to figure out how to install one of the AR plugins for a decent client anyway. I think tintin is most likely to be the best client

I'll spend some time trying to get this working and write a howto for you or something Lariel. Not sure when I'll have time but I'll try to get to it by this weekend.
Nycticora
Posts: 2277
8/15/2015, 12:59:47 AM
I gave it a shot, there are lots of problems with paths and stuff even if you get tmux working right. It's probably not worth me trying to make it work on a mac. I bet deauja could do it without much trouble but the error messages are a little to arcane for it to be worth doing for me I think.
Lariel
Posts: 9
8/15/2015, 3:47:41 PM
That's alright! Thanks for trying... really appreciate it.

Think I'll settle for a less sup-ed up set-up.

I am having issue with the .log files though, if anybody can help.

I tried tailing the .log files and displaying them in a separate tmux pane but since the logs are getting updated with every msdp event, what appears on my screen are the changes as it happens..
e.g.:

"
Inventory
an adventurers guide (6)
an adventurers guide (5)
"
when I drop my guide to trigger event, this happens.
Nycticora
Posts: 2277
8/15/2015, 7:53:12 PM
try watch -tn 1 "cat foo.log"
Vanisse
Avatar
Posts: 2782
8/18/2015, 5:30:45 AM
insomnia tonight, so decided to try this out (w/ubuntu). looks nice! too bad i missed the version with the matrix thing and soundtrack lol. i tried out the fate thing but it was a bit wonky (i chose thief;half-elf - the speech got all messed up and said i was an invoker of $chosen_race, and then at no point did i get to choose a password so i didn't know how to delete it after creation o.O) but it was an amusing experience :lol:
Lariel
Posts: 9
8/22/2015, 9:04:57 AM
Insomnia for many nights..

Managed to sort out

1. how displaying the log files work.. there was something in there that created a blank log, which would display below the list (affects or inventory), thereby making it appear normal

2. path directories for tintin++ on mac are wonky. tt++ only reads the folder in which it is launched.. There might be something else but I was happy enough with that. ~/user/<user_name> replaces ~/home/$home/ in all logs and it should work okay... Can't remember if there was anything else significant
deauja
Avatar
Posts: 162
1/27/2021, 10:42:20 AM
It's been a while. Posted an update at the beginning of this thread. Hope this helps.
deauja
Avatar
Posts: 162
2/24/2021, 7:09:02 AM
Go tmux web frontend - display current tmux session and window information via browser (gin, bower)

https://leanpub.com/the-tao-of-tmux/read#example-projects
deauja
Avatar
Posts: 162
3/16/2021, 5:31:14 PM
Now compatible with Windows 10 via WSL
(Windows Subsystems for Linux)

How to install:
    1) Use search assistant to open the 'For Developers' setting and enable 'Developer Mode'.  Accept it.


2) Ctrl+Esc & type 'Turn Windows features on or off' select and turn on 'Windows Subsystem for Linux'

3) Open web browser and type 'https://aka.ms/wslstore' now select/install Ubuntu, set up and sign in.

4) Type 'sudo apt-get update' & 'sudo apt-get upgrade' & 'sudo apt-get install tintin++ imagemagick'

5) Download and run relevant wsltty installer from github: https://github.com/mintty/wsltty/releases

6) In WSL Terminal home directory, type 'git clone https://github.com/AbandonedRealms-tintin/ARTT.git'

7) In WSL Terminal type 'cd ~/ARTT' & 'chmod +x linux.sh' & './linux.sh' this will setup/launch game.
deauja
Avatar
Posts: 162
11/26/2023, 8:59:28 PM
restarting for simplicity. It will be imperfect and may not function as intended.
plan is to continue improving without sacrificing simplicity.

even if you aren't using tintin++ you might get some ideas from it.
this code is for tintin++ with msdp function working

I will save my progress here and provide updates here
here we go back to 1.0

My hope is to interest players in the mechanics and implications of scripting both for discussion and implementation. Also I need a place to back up my code. I hope I am welcome to do so, if not let me know and I'll keep it to myself. :wink:

artt 1.0


#nop abandonedrealms.com

#nop SECTION: WIELD

#act {<worn as shield> a spiked buckler} {#var shield buckler};
#act {<wielded> (Glowing) a sword with a swiftbird hilt} {#var weapon swift};
#act {<dual wielded> (Glowing) a fiery dagger} {#var offhand fiery};

#act {%1 disarms you and sends your weapon flying!} {get $weapon;wield $weapon};

#nop SECTION: MSDP

#EVENT {SESSION CONNECTED}
{
#variable TELNET[IAC] \xFF;
#variable TELNET[DONT] \xFE;
#variable TELNET[DO] \xFD;
#variable TELNET[WONT] \xFC;
#variable TELNET[WILL] \xFB;
#variable TELNET[SB] \xFA;
#variable TELNET[SE] \xF0;
#variable TELNET[MSDP] \x45;
#variable MSDP[VAR] \x01;
#variable MSDP[VAL] \x02;
#variable MSDP[TABLE_OPEN] \x03;
#variable MSDP[TABLE_CLOSE] \x04;
#variable MSDP[ARRAY_OPEN] \x05;
#variable MSDP[ARRAY_CLOSE] \x06;
#variable {MSDP_REPORTABLE_VARIABLES}{
{AC_BASH};
{AC_MAGIC};
{AC_PIERCE};
{AC_SLASH};
{ADRENALINE};
{AFFECTS};
{AREA_NAME};
{CHANNELS};
{CHARACTER_NAME};
{CHII_BOLT};
{CLASS};
{COMBAT_STYLE};
{CON};
{CON_PERM};
{DAMROLL};
{DEX};
{DEX_PERM};
{ENERGY};
{ENERGY_MAX};
{EXPERIENCE};
{EXPERIENCE_MAX};
{EXPERIENCE_TNL};
{GOLD};
{GROUP};
{HEALTH};
{HEALTH_MAX};
{HINT};
{HITROLL};
{HUNGER};
{INT};
{INT_PERM};
{INVENTORY};
{LEVEL};
{MANA};
{MANA_MAX};
{MOVEMENT};
{MOVEMENT_MAX};
{OPPONENT_COMBAT_STYLE};
{OPPONENT_HEALTH};
{OPPONENT_HEALTH_MAX};
{OPPONENT_LEVEL};
{OPPONENT_NAME};
{OPPONENT_WEAPON_OFFH};
{OPPONENT_WEAPON_TYPE};
{OVERLORD};
{OVERLORD_NAME};
{POKER};
{POWER};
{QUESTOR};
{RACE};
{ROOM_DESC};
{ROOM_EXITS};
{ROOM_MAP};
{ROOM_NAME};
{ROOM_TERRAIN};
{ROOM_VNUM};
{SAVING_AFF};
{SAVING_MAL};
{SAVING_MEN};
{SHIELD};
{SHIELD_MAX};
{STR};
{STR_PERM};
{TANK_NAME};
{TARGET};
{THIRST};
{TITLE};
{WEAPON_OFFH};
{WEAPON_TYPE};
{WEIGHT};
{WEIGHT_MAX};
{WIMPY};
{WIS};
{WIS_PERM};
{WORLD_TIME};};
#nop Turn telnet debug on if there are problems.;
#config {debug telnet} {off};
#split 0 1;
}

#EVENT {SESSION DISCONNECTED}
{
#write $msdp_character_name.tt;
}

#EVENT {IAC WILL MSDP}
{
#send {$TELNET[IAC]$TELNET[DO]$TELNET[MSDP]\};
msdp_report
}

#alias {replace_color_codes} {

#replace {%1} {`1} {<018>}; #nop {RED};
#replace {%1} {`2} {<028>}; #nop {GREEN};
#replace {%1} {`3} {<038>}; #nop {YELLOW};
#replace {%1} {`4} {<048>}; #nop {BLUE};
#replace {%1} {`5} {<058>}; #nop {PURPLE};
#replace {%1} {`6} {<068>}; #nop {CYAN};
#replace {%1} {`7} {<eee>}; #nop {WHITE};
#replace {%1} {`8} {<ccc>}; #nop {GRAY};
#replace {%1} {`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`!} {<118>}; #nop {RED BOLD};
#replace {%1} {`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {`\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {``} {<088>}; #nop {RESET TO DEFAULT};

};

#EVENT {IAC SB MSDP}
{
#nop Save all variables with an msdp_ prefix.;
#nop Set all variables to lower case msdp_blah;

#format {test} {%l} {%0};
#variable {msdp_$test} {%1};

#if { "%0" == "ROOM_MAP" } {
#var {msdp_room_map} {%1};
replace_color_codes msdp_room_map;
};

#elseif { "%0" == "CHANNELS" } {
#var {msdp_channels} {%1};
replace_color_codes msdp_channels;
#replace {msdp_channels} {\n} { };
};

#elseif { "%0" == "OPPONENT_COMBAT_STYLE" } {
#var {msdp_opponent_combat_style} {%1};
replace_color_codes msdp_opponent_combat_style;
#replace {msdp_opponent_combat_style} {\n} { };
};

#elseif { "%0" == "COMBAT_STYLE" } {
#var {msdp_combat_style} {%1};
replace_color_codes msdp_combat_style;
#replace {msdp_combat_style} {\n} { };
};
}

#EVENT {IAC SB MSDP IAC SE}
{
#if {&{msdp_room_exits} == 0}
{
#return
};

#showme {<$msdp_health\hp $msdp_mana\m $msdp_movement\mv $msdp_opponent_combat_style> $msdp_world_time} {0};
}

#EVENT {IAC SB MSDP ROOM}
{
#variable {MSDP_ROOM} {%1};
}

#ALIAS {msdp_report}
{
#nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
#variable result {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]REPORT};
#foreach {*MSDP_REPORTABLE_VARIABLES[]} {tmp}
{
#variable result {$result$MSDP[VAL]$tmp}
};
#send {$result$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {msdp_list}
{
#send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]LIST$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {msdp_send}
{
#send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]SEND$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {example}
{
msdp_list COMMANDS;
msdp_list REPORTABLE_VARIABLES;
msdp_report
}

#nop SECTION: CONNECTION;

#ses abandonedrealms abandonedrealms.com 9000;

#act {By what name do you wish to be remembered?} {};
#act {Password:} {};
deauja
Avatar
Posts: 162
11/28/2023, 3:15:39 PM
edit
deauja
Avatar
Posts: 162
12/4/2023, 5:13:14 PM
this post is right here.
deauja
Avatar
Posts: 162
12/7/2023, 7:18:17 PM
this post is gone.
deauja
Avatar
Posts: 162
12/16/2023, 6:38:38 PM
This botting may work well on mobs however use against other players at your risk and concurrent demise. getting neater. check it out. set various weapon variables before enabling autoweapontype and autocombatstyle. configured for warrior class but should be easilly modifiable for other classes as well. This kind of thing should free up some of your energy for focusing on immersion and roleplay. Don't hesitate to try scripting some RP moves as well. Godspeed.

screenshot:
https://postimg.cc/4mWhMR8g

map.tt:
https://ufile.io/aax359qh



#nop https://tintin.mudhalla.net/manual/;
#nop ####### MUD clients manual ########;

#nop https://abandonedrealms.com/
#nop ###### game website #######;

#class all open;

#nop Global variables;
#nop ################;

#nop gag, reformat.;
#var gagdamage yes;
#var gagmissed yes;
#var concatenate yes;
#var gagcondition yes;

#nop auto login.;
#var autosign no;
#var autopass no;
#var charname
#var password

#nop combat related.;
#var autochase no;
#var autoattack no;
#var autoweapon no;
#var autocombat no;

#var autowarcry yes;
#var autohobble yes;
#var autodirt yes;
#var autodisarm no;

#nop weapon/shield default.;
#nop set b4 autocombat=yes.;
#var buckler shield;
#var blade swo;
#var shaft mace;
#var segment whip;
#var dual dagger;

#nop onehanded wpn default.;
#var onehand swo;

#nop twohanded wpn default.;
#var twohand forged;

#nop tintin++ map.;
#var tintinmap no;
#var autofind no;

#nop Movement keys;
#nop see #help macro;
#nop #############;

#mac {^H} {w};
#mac {^J} {s};
#mac {^K} {n};
#mac {^L} {e};
#mac {^O} {u};
#mac {^>} {d};
#mac {^M} {m};
#mac {^U} {whe};
#mac {^I} {sca};
#mac {^<} {flee};
#mac {*} {$murder $player};

#nop including msdp variables!;
#nop #########################;
#nop 'help msdp', '#help msdp';
#nop for further informations.;

#EVENT {SESSION CONNECTED} {
#variable TELNET[IAC] \xFF;
#variable TELNET[DONT] \xFE;
#variable TELNET[DO] \xFD;
#variable TELNET[WONT] \xFC;
#variable TELNET[WILL] \xFB;
#variable TELNET[SB] \xFA;
#variable TELNET[SE] \xF0;
#variable TELNET[MSDP] \x45;
#variable MSDP[VAR] \x01;
#variable MSDP[VAL] \x02;
#variable MSDP[TABLE_OPEN] \x03;
#variable MSDP[TABLE_CLOSE] \x04;
#variable MSDP[ARRAY_OPEN] \x05;
#variable MSDP[ARRAY_CLOSE] \x06;
#variable {REPORTABLE_VARIABLES}{
{AC_BASH};{AC_MAGIC};{AC_PIERCE};{AC_SLASH};{ADRENALINE};{AFFECTS};
{AREA_NAME};{CHANNELS};{CHARACTER_NAME};{CHII_BOLT};{CLASS};{COMBAT_STYLE};
{CON};{CON_PERM};{DAMROLL};{DEX};{DEX_PERM};{ENERGY};
{ENERGY_MAX};{EXPERIENCE};{EXPERIENCE_MAX};{EXPERIENCE_TNL};{GOLD};{GROUP};
{HEALTH};{HEALTH_MAX};{HINT};{HITROLL};{HUNGER};{INT};
{INT_PERM};{INVENTORY};{LEVEL};{MANA};{MANA_MAX};{MOVEMENT};
{MOVEMENT_MAX};{OPPONENT_COMBAT_STYLE};{OPPONENT_HEALTH};{OPPONENT_HEALTH_MAX};
{OPPONENT_LEVEL};{OPPONENT_NAME};{OPPONENT_WEAPON_OFFH};{OPPONENT_WEAPON_TYPE};
{OVERLORD};{OVERLORD_NAME};{POKER};{POWER};{QUESTOR};{RACE};
{ROOM_DESC};{ROOM_EXITS};{ROOM_MAP};{ROOM_NAME};{ROOM_TERRAIN};{ROOM_VNUM};
{SAVING_AFF};{SAVING_MAL};{SAVING_MEN};{SHIELD};{SHIELD_MAX};{STR};
{STR_PERM};{TANK_NAME};{TARGET};{THIRST};{TITLE};{WEAPON_OFFH};
{WEAPON_TYPE};{WEIGHT};{WEIGHT_MAX};{WIMPY};{WIS};{WIS_PERM};{WORLD_TIME};
};
#nop Turn telnet debug on if there are problems.;
#config {debug telnet} {off};
#split 0 1;
};

#EVENT {IAC WILL MSDP} {
#send {$TELNET[IAC]$TELNET[DO]$TELNET[MSDP]\};
report
};

#alias {replace_color_codes} {
#replace {%1} {`1} {<018>}; #nop {RED};
#replace {%1} {`2} {<028>}; #nop {GREEN};
#replace {%1} {`3} {<038>}; #nop {YELLOW};
#replace {%1} {`4} {<048>}; #nop {BLUE};
#replace {%1} {`5} {<058>}; #nop {PURPLE};
#replace {%1} {`6} {<068>}; #nop {CYAN};
#replace {%1} {`7} {<eee>}; #nop {WHITE};
#replace {%1} {`8} {<ccc>}; #nop {GRAY};
#replace {%1} {`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`!} {<118>}; #nop {RED BOLD};
#replace {%1} {`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {`\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {``} {<088>}; #nop {RESET TO DEFAULT};
};

#alias {strip_color_codes} {
#replace {%1} {`1} {};#replace {%1} {`2} {};#replace {%1} {`3} {};
#replace {%1} {`4} {};#replace {%1} {`5} {};#replace {%1} {`6} {};
#replace {%1} {`7} {};#replace {%1} {`8} {};#replace {%1} {`9} {};
#replace {%1} {`!} {};#replace {%1} {`@} {};#replace {%1} {`#} {};
#replace {%1} {`\$} {};#replace {%1} {`%} {};#replace {%1} {`^} {};
#replace {%1} {`&} {};#replace {%1} {``} {};
};

#EVENT {IAC SB MSDP} {

#format {test} {%l} {%0};
#variable {$test} {%1};

#if { "%0" == "ROOM_MAP" } {
#var {room_map} {%1};
replace_color_codes room_map;
};

#elseif { "%0" == "CHANNELS" } {
#var {channels} {%1};
replace_color_codes channels;
#replace {channels} {\n} { };
};

#elseif { "%0" == "OPPONENT_COMBAT_STYLE" } {
#var {opponent_combat_style} {%1};
strip_color_codes opponent_combat_style;
#var {opponent_combat_style_clr} {%1};
replace_color_codes opponent_combat_style_clr;
};

#elseif { "%0" == "COMBAT_STYLE" } {
#var {combat_style} {%1};
strip_color_codes combat_style;
#var {combat_style_clr} {%1};
replace_color_codes combat_style_clr;
};

#elseif { "%0" == "OPPONENT_WEAPON_TYPE" } {
#var {opponent_weapon_type} {%1};
strip_color_codes opponent_weapon_type;
#var {opponent_weapon_type_clr} {%1};
replace_color_codes opponent_weapon_type_clr;
};

#elseif { "%0" == "GROUP" } {

#nop set lower_case and upper_case;
#nop for attacking and being attacked.;
#nop so fight_check triggers rightly.;

#var group_01 *group[-1]; #replace {group_01} {a %+} {A &1};
#var group_02 *group[-2]; #replace {group_02} {a %+} {A &1};
#var group_03 *group[-3]; #replace {group_03} {a %+} {A &1};
#var group_04 *group[-4]; #replace {group_04} {a %+} {A &1};
#var group_05 *group[-5]; #replace {group_05} {a %+} {A &1};
#var group_06 *group[-6]; #replace {group_06} {a %+} {A &1};
#var group_07 *group[-7]; #replace {group_07} {a %+} {A &1};
#var group_08 *group[-8]; #replace {group_08} {a %+} {A &1};
#var group_09 *group[-9]; #replace {group_09} {a %+} {A &1};
#var group_10 *group[-10]; #replace {group_10} {a %+} {A &1};
#var group_11 *group[-11]; #replace {group_11} {a %+} {A &1};
#var group_12 *group[-12]; #replace {group_12} {a %+} {A &1};
#var group_13 *group[-13]; #replace {group_13} {a %+} {A &1};

#var group_14 *group[-14];
#replace {group_14} {a %+} {A &1};


};

#if { "$tank_name" != "" } {
#regexp {$group[$tank_name]} {"hp":%+,"mp":%+} {#var tank_life &1};
};

#elseif { "%0" == "WORLD_TIME" } {
#var tick 35;
#if { "%1" != "" && "%1" != " " } {
#tick {tick} {#math {tick} {$tick-1}} {1};
#var {time} {%1};
#regexp {$time} {{.*} {(.*)}} {#var hour &1};
};
};
};

#alias {report} {
#nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
#variable result {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]REPORT};

#foreach {*REPORTABLE_VARIABLES[]} {tmp} {
#variable result {$result$MSDP[VAL]$tmp}
};

#send {$result$TELNET[IAC]$TELNET[SE]\};
};

#alias {msdp_list} {
#send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]LIST$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\};
};

#alias {send} {
#send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]SEND$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\};
};

#nop enter the multiuser dungeon abandoned realms.;
#nop #############################################;

#act {By what name do you wish to be remembered?} {
#if { "$autosign" == "yes" } { $charname };
};

#act {Password:} {
#if { "$autopass" == "yes" } { $password };
};

#ses abandonedrealms abandonedrealms.com 9000;

#event {SESSION DEACTIVATED} {
#gts {
#delay {.5} {
#show {Recconect? y/n};
#macro {n} {
#end
};
#macro {y} {
#unmacro {n}; #unmacro {y}; #read {ar.tt};
};
};
};
};

#nop SECTION: POTIONS;
#nop ################;

#nop quaff purple;
#alias {pp} {
#if { "$opponent_name" != "None." && "$opponent_name" != "" } {
get purple sac;hold purple;quaf purple;
};
#else { get purple sac;quaf purple };
};

#alias {gp} {
#if { "$opponent_name" != "None." && "$opponent_name" != "" } {
get gyvel sac;hold gyvel;quaf gyvel;
};
#else { get gyvel sac;quaf gyvel };
};

#nop quaff recall;
#alias {rp} {get recall sac;quaf recall };

#nop ###### where into approach ########;

#act {<PK> %1 %s %2} {
#if { "%1" == "$player" && "%1" != "$character_name" && "$autofind" == "yes" } {
#map run %2;
};
};

#nop ###### scan into auto chase ########;

#nop for testing
#var target boogum;

#event {VARIABLE UPDATED opponent_name} {
#if { "$opponent_name" != "None." && "$opponent_name" != "" } {
#var {player} {$opponent_name};
#format {target} {%l} {$opponent_name};
};
};

#nop *** Range 2 (south, 2 west) ***;
#nop *** Range 2 (2 north, west) ***;

#act {*** Range %1 (%2) ***} {#alias {approach_opponent} {#%1 %2}} {4}

#act {*** Range %1 (%2, %3 %4) ***} {#alias {approach_opponent} {%2; #%3 %4}} {1}
#act {*** Range %1 (%2 %3, %4) ***} {#alias {approach_opponent} {#%2 %3; %4}} {2}
#act {*** Range %1 (%2, %3) ***} {#alias {approach_opponent} {%2; %3}} {3}

#var {player} {};
#var murder murder;

#act {You scan all around.} {
#class {scan} {open};
#act {${target}} {
#if { "$autochase" == "yes" } {
approach_opponent;
$murder $target;
};
#class scan kill;
} {2};
#if { "$target" != "$player" && "$player" != "" } {
#act {${player}} {
#if { "$autochase" == "yes" } {
approach_opponent;
$murder $player;
};
#class scan kill;
} {2};
};
#delay {.2} {#class scan kill};
};

#nop ####### Loot #########;

#act {%1 drops a fancy lockbox.} {
get lockbox;
unlock lockbox;
open lockbox;
get all lockbox;
drop lockbox;
sac lockbox;
};

#nop ########## prompt ############;

#split 2 2

#nop hide variable until initialized.;
#var tick_bar {};
#var hour {};

#nop set tickbar variable and show prompt.;
#event {VARIABLE UPDATE tick} {
#if { "$tick" == "35" } { #var {tick_bar} {[<038>-----<088>-----------|]}};
#if { "$tick" == "33" } { #var {tick_bar} {[<038>-----<088>----------|-]}};
#if { "$tick" == "31" } { #var {tick_bar} {[<038>-----<088>---------|--]}};
#if { "$tick" == "29" } { #var {tick_bar} {[<038>-----<088>--------|---]}};
#if { "$tick" == "27" } { #var {tick_bar} {[<038>-----<088>-------|----]}};
#if { "$tick" == "25" } { #var {tick_bar} {[<038>-----<088>------|-----]}};
#if { "$tick" == "23" } { #var {tick_bar} {[<038>-----<088>-----|------]}};
#if { "$tick" == "21" } { #var {tick_bar} {[<038>-----<088>----|-------]}};
#if { "$tick" == "19" } { #var {tick_bar} {[<038>-----<088>---|--------]}};
#if { "$tick" == "17" } { #var {tick_bar} {[<038>-----<088>--|---------]}};
#if { "$tick" == "15" } { #var {tick_bar} {[<038>-----<088>-|----------]}};
#if { "$tick" == "13" } { #var {tick_bar} {[<038>-----<088>|-----------]}};
#if { "$tick" == "11" } { #var {tick_bar} {[<038>----|<088>------------]}};
#if { "$tick" == "9" } { #var {tick_bar} {[<038>----|<088>------------]}};
#if { "$tick" == "7" } { #var {tick_bar} {[<038>---|-<088>------------]}};
#if { "$tick" == "5" } { #var {tick_bar} {[<038>--|--<088>------------]}};
#if { "$tick" == "3" } { #var {tick_bar} {[<038>-|---<088>------------]}};
#if { "$tick" == "1" } { #var {tick_bar} {[<038>|----<088>------------]}};

#showme { < $mylife $mymana $mymove > $tick_bar <058>$xptnl<088> <038>$gold<088>
$hour $adrenaline} {0};
};

#EVENT {IAC SB MSDP IAC SE} {
#nop if you aren't in a room stop.;
#if {&{room_exits} == 0} {#return};

#nop center area/room name at top.;
#var {screen_title} {$area_name};
#var {screen_title2} {$room_name};
#screen get cols columns;
#math halfcols { $columns / 2 };
#format {length_title} {%L} {$screen_title};
#format {length_title2} {%L} {$screen_title2};
#math halftitle { $length_title / 2};
#math halftitle2 { $length_title2 / 2};
#math padtitle { $halfcols + $halftitle };
#math padtitle2 { $halfcols + $halftitle2 };
#format {test} {%+${padtitle}s} {$screen_title};
#format {test2} {%+${padtitle2}s} {$screen_title2};

#nop showme them.;
#showme {$test} {1};
#showme {$test2} {2};

#nop calculate life, mana, move percentages.;
#math {mylife} { 100 * $health / $health_max };
#math {mymana} { 100 * $mana / $mana_max };
#math {mymove} { 100 * $movement / $movement_max };

#nop colorize my hp percent.;
#if { $mylife > 59 } { #var {mylife} {<088>$mylife<088>} };
#elseif { $mylife < 30 } { #var {mylife} {<118>$mylife<088>} };
#elseif { $mylife < 60 } { #var {mylife} {<138>$mylife<088>} };

#nop colorize opponent hp percent.;
#if { $opponent_health > 59 } { #var {opponent_health} {<088>$opponent_health<088>} };
#elseif { $opponent_health < 30 } { #var {opponent_health} {<118>$opponent_health<088>} };
#elseif { $opponent_health < 60 } { #var {opponent_health} {<138>$opponent_health<088>} };

#nop calculate xptnl.;
#math {xptnl} { $experience_tnl - $experience };
#math {xptnl_max} { $experience_tnl - $experience_max };

#nop show me prompt.;
#showme { < $mylife $mymana $mymove > $tick_bar <058>$xptnl<088> <038>$gold<088>
$hour $adrenaline} {0};

#if { "$opponent_combat_style" != "no opponent" && "$opponent_name" != "" } {
#if { "$tank_name" != "" } {
#showme { < $tank_name < $tank_life vs $opponent_health > $opponent_name >
$opponent_combat_style_clr $opponent_weapon_type_clr } {-3};
};
#elseif { "$tank_name" == "" } {
#showme { < $character_name < $mylife vs $opponent_health > $opponent_name >
$opponent_combat_style_clr $opponent_weapon_type_clr } {-3};
};
} {
#showme { } {-3};
};
};

#nop ########## COMBAT ##########;

#nop concatenate fighting data (remove empty lines).;
#act {%0} {
#if { "%0" == "" && "$opponent_combat_style" != "no opponent" && "$opponent_name" != "" } {
#if { "$concatenate" == "yes" } {#line gag};
};
} {9};

#nop remember what weapon I am using to grab it in case I'm disarmed.;
#event {VARIABLE UPDATED weapon_type} {
#if { "%1" != "none" } {
#var weapon $%1;
};
};

#nop get/wield weapon/shield when disarmed.;
#act {%1 disarms your shield, sending it flying!} {get $buckler;wield $buckler};
#act {%1 disarms you and sends your weapon flying!} {get $weapon;wield $weapon};
#act {%1 disarms you!} {wield $weapon};

#var lag 0;

#event {RECEIVED LINE} {

#nop if msdp exits variable doesn't exist, return.;
#if {&{room_exits} == 0} {#return};

#nop in case I am NOT fighting.;

#if { "$opponent_combat_style" == "no opponent" } {
#if { "$lag" != "0" } { #var {lag} {0} };
reset_combat;
};

#nop in case that I AM fighting.;

#if { "$opponent_combat_style" != "no opponent" && "$opponent_name" != "" && "$lag" == "0" && "$autoattack" == "yes" } {

#nop auto switch weapon type.;
#nop ########################;

#if { "$autoweapon" == "yes" } {

#if { "$opponent_weapon_type" == "segment"
&& "$weapon_type" == "blade" ||
"$opponent_weapon_type" == "segment"
&& "$weapon_type" == "none" ||
"$opponent_weapon_type" == "segment"
&& "$weapon_type" == "segment" } {wi $shaft};

#elseif { "$opponent_weapon_type" == "blade"
&& "$weapon_type" == "shaft" ||
"$opponent_weapon_type" == "blade"
&& "$weapon_type" == "none" ||
"$opponent_weapon_type" == "blade"
&& "$weapon_type" == "blade" } {wi $segment};

#elseif { "$opponent_weapon_type" == "shaft"
&& "$weapon_type" == "segment" ||
"$opponent_weapon_type" == "shaft"
&& "$weapon_type" == "none" ||
"$opponent_weapon_type" == "shaft"
&& "$weapon_type" == "shaft" } {wi $blade};
};

#nop auto switch combat style.;
#nop #########################;

#if { "$autocombat" == "yes" } {

#nop assuming your combat style is armed here.;
#nop than wield a weapon if you unarmed.;

#if { "$weapon_type" == "none" } {wi $onehand};

#nop enemy is using 'balanced' combat style!;
#nop #######################################;

#if { "$opponent_combat_style" == "balanced"
&& "$combat_style" == "offensive" ||
"$opponent_combat_style" == "balanced"
&& "$combat_style" == "none" } {wi $buckler};

#elseif { "$opponent_combat_style" == "balanced"
&& "$combat_style" == "balanced" } {
wi $onehand;
wi $buckler;
};

#nop enemy is using 'offensive' combat style!;
#nop ########################################;

#elseif { "$opponent_combat_style" == "offensive"
&& "$combat_style" == "defensive" } {
rem $weapon;
rem $buckler;
wi $twohand;
#var weapon $twohand;
};

#elseif { "$opponent_combat_style" == "offensive"
&& "$combat_style" == "offensive" ||
"$opponent_combat_style" == "offensive"
&& "$combat_style" == "none" } {
wi $twohand;
#var weapon $twohand;
};

#nop enemy is using 'defensive' combat style!;
#nop ########################################;

#elseif { "$opponent_combat_style" == "defensive"
&& "$combat_style" == "balanced" } {
wi $onehand;
dual $dual;
};

#elseif { "$opponent_combat_style" == "defensive"
&& "$combat_style" == "defensive" ||
"$opponent_combat_style" == "defensive"
&& "$combat_style" == "none" } {
dual $dual;
};

#elseif { "$opponent_combat_style" == "mob"
&& "$combat_style" == "none" } {
dual $dual;
};
};

#nop automatically choose and execute attacks.;
#nop #########################################;

#if { "$autoattack" == "yes" } {

#if { "$warcried" != "true" && "$autowarcry" == "yes" } {
#var attack warcry;
};

#elseif { "$hobbled" != "true" &&
"$weapon_type" != "none" &&
"$autohobble" == "yes" &&
"$usingbow" != "true" } {
#var {attack} {overpower hobble};
};

#elseif { "$dirted" != "true" &&
"$autodirt" == "yes" &&
"$room_terrain" != "river (%D)" &&
"$room_terrain" != "ocean (%D)" &&
"$room_terrain" != "rapids (%D)" &&
"$room_terrain" != "lagoon (%D)" &&
"$room_terrain" != "pond (%D)" &&
"$room_terrain" != "underwater (%D)" } {
#var {attack} {dirt};
};


#elseif { "$room_terrain" == "pond %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "lagoon %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "rapids %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};


#elseif { "$disarmed" != "true" &&
"$autodisarm" == "yes" &&
"$opponent_weapon_type" != "none" &&
"$opponent_weapon_type" != "unknown" } {
#var {attack} {disarm};
};

#elseif { "$opponent_combat_style" == "defensive"
&& "$combat_style" == "offensive"
&& "$counterbalance" != "true"
&& "$distended" != "true"
&& "$handed" != "two" } {
#var {attack} {barrage};
};

#elseif { "$opponent_combat_style" == "offensive"
&& "$combat_style" == "balanced"
&& "$usingbow" != "true" ||
"$opponent_combat_style" == "mob"
&& "$combat_style" == "balanced"
&& "$usingbow" != "true" } {
#var {attack} {over};
};

#elseif { "$opponent_combat_style" == "balanced"
&& "$combat_style" == "defensive" ||
"$opponent_combat_style" == "mob"
&& "$combat_style" == "defensive" } {
#var {attack} {swipe};
};

#else {#var {attack} {overpower kick}};

#echo { };
#show {<108><$count seconds lag, $attack><088>};
#var count 0;
$attack;
#var lag 1;
#nop cmd below returns after attack lag ends.;
release;
};
};
};

#nop count seconds in lag between attacks.;
#var count 0;
#tick {new} {#math count $count + .25} {.25}

#nop knowing attack lag ended, submit lag as 0, send next atck;
#act {Release whom?} {
#var lag 0;
#line gag;
};

#nop when fight stops reset these variables.;
#alias {reset_combat} {
#if { "$counterbalance" == "true" } { #var counterbalance false };
#if { "$itsflying" == "true" } { #var itsflying false };
#if { "$distended" == "true" } { #var distended false };
#if { "$disarmed" == "true" } { #var disarmed false };
#if { "$usingbow" == "true" } { #var usingbow false };
#if { "$hobbled" == "true" } { #var hobbled false };
#if { "$dirted" == "true" } { #var dirted false };
#var {handed} {};
};

#act {You can't do that with a bow.} {
#var usingbow true;
};

#act {You are now off-balance.} {
#var weaponlag true;
};
#act {Your dominant hand steadies.} {
#var weaponlag false;
};

#act {You swing your weapons at mid-air.} {
#var counterbalance true;
};
#act {%1 feet aren't on the ground.} {
#var itsflying true;
};

#act {%1's shield arm regains its strength.} {
#var distended false;
};

#act {%1's shield arm distends from the assault.} {
#var distended true;
};

#act {%1 wields %2.} {
#var disarmed false;
};
#act {You disarm %1 to the ground!} {
#var disarmed true;
};

#act {%1 is blinded by the dirt in %2 eyes!} {
#var dirted true;
};
#act {%1 eyes stop watering.} {
#if { "%1" != "Your" } {
#var dirted false;
};
};

#act {%1 clutches %2 leg painfully as %3 begins to hobble.} {
#var hobbled true;
};
#act {You cripple %1 ankles with a double strike!} {
#var hobbled true;
};
#act {%1 stops hobbling around.} {
#var hobbled false;
};

#act {Not with a weapon that can only be used two-handed.} {
#var handed two;
};

#act {You prepare your resolve and stand ready for battle.} {
#var tenacity true;
};
#act {Your body relaxes as you fall into slumber.} {
#var tenacity false;
};
#act {You are already fighting with full resolve.} {
#var tenacity true;
};
#act {You relax your posture as your resolve fades.} {
#var tenacity false;
};

#act {You get a little madder.} {
#var berserked true;
};
#act {You feel your pulse slow down.} {
#var berserked false;
};
#act {Your pulse races as you are consumed by rage!} {
#var berserked true;
};

#act {Not with a weapon that requires two hands.} {
#var handed two;
};

#act {You feel righteous as you yell out your warcry.} {
#var warcried true;
};
#act {You already feel righteous.} {
#var warcried true;
};
#act {Your warcry wears off.} {
#var warcried false;
};

#nop mute various combat related messages.;
#act {You didn't autoloot because you already have %1.} {#line gag};
#act {^The corpse of %1 is lying here.} {#line gag};

#nop mute opponent condition statements as combat prompt shows opponent health.;

#act {%1 is in excellent condition.} {
#var condition {%1 is in excellent condition.};
#if { "$opponent_combat_style" != "no opponent" && "$gagcondition" == "yes" } {#line gag};
};
#act {%1 has a few scratches.} {
#var condition {%1 has a few scratches.};
#if { "$opponent_combat_style" != "no opponent" && "$gagcondition" == "yes" } {#line gag};
};
#act {%1 has some small wounds and bruises.} {
#var condition {%1 has some small wounds and bruises.};
#if { "$opponent_combat_style" != "no opponent" && "$gagcondition" == "yes" } {#line gag};
};
#act {%1 has quite a few wounds.} {
#var condition {%1 has quite a few wounds.};
#if { "$opponent_combat_style" != "no opponent" && "$gagcondition" == "yes" } {#line gag};
};
#act {%1 has some big nasty wounds and scratches.} {
#var condition {%1 has some big nasty wounds and scratches.};
#if { "$opponent_combat_style" != "no opponent" && "$gagcondition" == "yes" } {#line gag};
};
#act {%1 looks pretty hurt.} {
#var condition {%1 looks pretty hurt.};
#if { "$opponent_combat_style" != "no opponent" && "$gagcondition" == "yes" } {#line gag};
};
#act {%1 is in awful condition.} {
#var condition {%1 is in awful condition.};
#if { "$opponent_combat_style" != "no opponent" && "$gagcondition" == "yes" } {#line gag};
};

#var combat 0;

#alias {fight_check} {
#if $combat==0 {
#var combat 1;
#echo { };
#showme {You begin fighting.};
} {#var combat 2};
};

#act {You flee from combat!} {
#var combat 0;
#show {You stop fighting.};
#echo {$condition};
#if { "$map" == "loaded" } {
#delay {.2} {#map goto $room_name};
};
};

#act {%1 has fled!} {
#var combat 0;
#show {You stop fighting.};
#echo {$condition};
};

#act {You have been KILLED!!} {
#var combat 0;
#show {You stop fighting.};
#if { "$map" == "loaded" } {
#delay {.2} {#map goto $room_name};
};
};

#act {%1 is DEAD!!} {
#var combat 0;
#show {You stop fighting.};
};

#act {Your %1 {scratch|graze|hit|injure|wound|maul|decimate|devastate|maim|MUTILATE|DISEMBOWEL|DISMEMBER|MASSACRE|MANGLE|DEMOLISH|DEVASTATE|OBLITERATE|ANNIHILATE|ERADICATE|scratches|grazes|hits|injures|wounds|mauls|decimates|devastates|maims|MUTILATES|DISEMBOWELS|DISMEMBERS|MASSACRES|MANGLES|DEMOLISHES|DEVASTATES|OBLITERATES|ANNIHILATES|ERADICATES} %2{.|!}} {
fight_check;
#if { "$gagdamage" == "yes" } {#line gag};
};

#act {Your %1 {miss|misses} %2{.|!}} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};

#act {%1's %2 {scratch|graze|hit|injure|wound|maul|decimate|devastate|maim|MUTILATE|DISEMBOWEL|DISMEMBER|MASSACRE|MANGLE|DEMOLISH|DEVASTATE|OBLITERATE|ANNIHILATE|ERADICATE|scratches|grazes|hits|injures|wounds|mauls|decimates|devastates|maims|MUTILATES|DISEMBOWELS|DISMEMBERS|MASSACRES|MANGLES|DEMOLISHES|DEVASTATES|OBLITERATES|ANNIHILATES|ERADICATES} you{.|!}} {
fight_check;
#if { "$gagdamage" == "yes" } {#line gag};
};

#act {%1's %2 {miss|misses} you{.|!}} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};

#act {{$group_01|$group_02|$group_03|$group_04|$group_05|$group_06|$group_07|$group_08|$group_09|$group_10|$group_11|$group_12|$group_13|$group_14}'s %1 {scratch|graze|hit|injure|wound|maul|decimate|devastate|maim|MUTILATE|DISEMBOWEL|DISMEMBER|MASSACRE|MANGLE|DEMOLISH|DEVASTATE|OBLITERATE|ANNIHILATE|ERADICATE|scratches|grazes|hits|injures|wounds|mauls|decimates|devastates|maims|MUTILATES|DISEMBOWELS|DISMEMBERS|MASSACRES|MANGLES|DEMOLISHES|DEVASTATES|OBLITERATES|ANNIHILATES|ERADICATES} %2{.|!}} {
fight_check;
#if { "$gagdamage" == "yes" } {#line gag};
};

#act {{$group_01|$group_02|$group_03|$group_04|$group_05|$group_06|$group_07|$group_08|$group_09|$group_10|$group_11|$group_12|$group_13|$group_14}'s %1 {miss|misses} %2{.|!}} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};

#act {%1's %2 {scratch|graze|hit|injure|wound|maul|decimate|devastate|maim|MUTILATE|DISEMBOWEL|DISMEMBER|MASSACRE|MANGLE|DEMOLISH|DEVASTATE|OBLITERATE|ANNIHILATE|ERADICATE|scratches|grazes|hits|injures|wounds|mauls|decimates|devastates|maims|MUTILATES|DISEMBOWELS|DISMEMBERS|MASSACRES|MANGLES|DEMOLISHES|DEVASTATES|OBLITERATES|ANNIHILATES|ERADICATES} {$group_01|$group_02|$group_03|$group_04|$group_05|$group_06|$group_07|$group_08|$group_09|$group_10|$group_11|$group_12|$group_13|$group_14}{.|!}} {
fight_check;
#if { "$gagdamage" == "yes" } {#line gag};
};

#act {%1's %2 {miss|misses} {$group_01|$group_02|$group_03|$group_04|$group_05|$group_06|$group_07|$group_08|$group_09|$group_10|$group_11|$group_12|$group_13|$group_14}{.|!}} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};

#nop SECTION: TAG DATA;
#nop PARRY;

#act {%1 thrusts your %2 aside in a skillful parry.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You dual parry %1.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 weapon advantage overcomes your parry attempt.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {Your weapon advantage overcomes %1 parry attempt.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {A quick swipe of your off-hand weapon parries %1 aside easily.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You deflect %1 aside in an ungraceful parry.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You parry %1 with an easy flourish.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 deflects your %2 aside in an ungraceful parry.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 awkwardly parries your %2 with a loud clang.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You thrust %1 aside in a skillful parry.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You awkwardly parry %1 with a loud clang.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 parries your %2.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You parry %1.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};

#nop DODGE;

#act {%1 can't dodge away from the reach of %2 fast enough.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 dodges your %2.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You manage to dodge %1 with a lot of effort.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 stumbles and barely dodges your %2.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You dance around %1 and easily dodge it.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You dodge %1.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You nimbly dodge %1 with a practiced maneuver.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 dances around your %2, easily dodging it.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 manages to dodge your %2 with a lot of effort.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You stumble and barely manage to dodge %1.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You concentrate on your combat style to prevent %1 from dodging.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 concentrates on %2 combat style to prevent %3 from dodging.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1's weapon advantage overcomes %2's parry attempt.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You concentrate on your combat style to inflict more damage.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};

#nop SHIELD BLOCK;

#act {%1 grips %2 shield firmly, staving off your %3.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 shield jolts under your %2, but holds.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 shield wobbles and barely deflects your %2.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 blocks your attack with %2 shield.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You block %1 with your shield.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {Your shield jolts under %1, but holds.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {Your shield wobbles and barely deflects %1.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {Your shield absorbs the impact of %1 easily.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1's shield absorbs the impact of your %2 easily.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You grip your shield firmly, staving off %1.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {You block %1 and attempt to strike at the brief opening.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};
#act {%1 blocks your attack and attempts to strike at the brief opening.} {
fight_check;
#if { "$gagmissed" == "yes" } {#line gag};
};

#nop These are not suppose to trigger fightcheck
#nop ***************************************************************

#gag {A goblin dart %1 you.}
#gag {Your thirst %1 you!}
#gag {Your thirst %1 you.}
#gag {Your hunger %1 you!}
#gag {Your hunger %1 you.}
#gag {The old sign %1 you.}
#gag {Your poison %1 you!}
#gag {Your poison %1 you.}
#gag {Your mystic tendrils %1 you.}
#gag {Your mystic tendrils %1 you!}
#gag {A drow hustler's backstab %1 you%2}

#act {~A drow hustler's backstab %1 you%2} {
#echo {A drow hustler's backstab %1 you%2}} {2}
#act {~Your mystic tendrils %1 you.} {
#echo {Your mystic tendrils %1 you.}} {2}
#act {~Your mystic tendrils %1 you!} {
#echo {Your mystic tendrils %1 you!}} {2}
#act {~A goblin dart %1 you.} {
#echo {A goblin dart %1 you.}} {2}
#act {~Your thirst %1 you.} {
#echo {Your thirst %1 you.}} {2}
#act {~Your hunger %1 you.} {
#echo {Your hunger %1 you.}} {2}
#act {~Your thirst %1 you!} {
#echo {Your thirst %1 you!}} {2}
#act {~Your hunger %1 you!} {
#echo {Your hunger %1 you!}} {2}
#act {~The old sign %1 you.} {
#echo {The old sign %1 you.}} {2}
#act {~Your poison %1 you.} {
#echo {Your poison %1 you.}} {2}
#act {~Your poison %1 you!} {
#echo {Your poison %1 you!}} {2}

#nop artificial intelligence;
#nop #######################;

#act {In your dreams, or what?} {#var state sleeping};
#act {You go to sleep.} {#var state sleeping};
#act {You wake and stand up.} {#var state standing};
#act {You rest.} {#var state resting};
#act {You stop resting.} {#var state sitting};
#act {You are already sitting down.} {#var state sitting};
#act {You sit down.} {#var state sitting};
#act {You stand up.} {#var state standing};
#act {You are already standing.} {#var sate standing};
#act {You are already resting.} {#var state resting};
#act {You wake and sit up.} {#var state sitting};
#act {You wake up and start resting.} {#var state resting};

#nop for hiding abandonedrealms castle.;
#nop ##################################;

#class hide_castle open

#act {^ ]=I==II==I=[ _/} {
#line gag;
#act {~%%0} {#line gag} {4};
};

#act { -------------------------------------------------------------------} {
#line gag;
#unact {~%%0};
} {3};

#class hide_castle close

#nop for mapping world!;
#nop ##################;

#map read map.tt

#nop run these two commands after creating new maps;
#map flag vtmap on
#map offset 3 101 -4 -1

#nop reset loaded value;
#var map loading;

#event {VARIABLE UPDATED room_name} {
#if { "$map" != "loaded" && "$room_name" != "" && "$tintinmap" == "yes" } {
#map goto $room_name;
};
};

#event {MAP ENTER MAP} {
#split 2 2 0 -100;
#var map loaded;
};

#EVENT {SESSION DISCONNECTED} {
#map write map.tt;
};

#act {[Exits:%1]} {

#if { "$map" == "loaded" } { #map get {roomid} {checkid} };

#if { "$room_vnum" != "$checkid" && "$map_aligned" != "yes" && "$tintinmap" == "yes" } {
#map flag static on;
#show Move around to align tintin++ map.;
#map goto $room_name;
};
#elseif { "$room_vnum" == "$checkid" && "$map_aligned" != "yes" } {
#var map_aligned yes;
#show Unique room name. Map aligned!;
};

#if { "$map" == "loaded" } { #map get {roomname} {checkroomname} };

#if { "$checkroomname" == "" } {
#nop write said info to map.tt;
#map set roomname $room_name;
#map set roomarea $area_name;
#map set roomterrain $room_terrain;
#map set roomid $room_vnum;
#map set roomdesc $room_desc;

#nop set room symbols and colors;
#nop note:;
#nop I've used a %D to replace;
#nop (indoors) and (outdoors);
#nop (not discriminating here);
#nop see #help reg for more info;

#if { "$room_terrain" == "cave %D" } {
#map set roomsymbol <108>o;
#map set roomcolor <108>;
};
#elseif { "$room_terrain" == "inside %D" } {
#map set roomsymbol <078>*;
#map set roomcolor <078>;
};
#elseif { "$room_terrain" == "field %D" } {
#map set roomsymbol <028>o;
#map set roomcolor <028>;
};
#elseif { "$room_terrain" == "hills %D" } {
#map set roomsymbol <028>z;
#map set roomcolor <028>;
};
#elseif { "$room_terrain" == "road %D" } {
#map set roomsymbol <108>+;
#map set roomcolor <108>;
};
#elseif { "$room_terrain" == "forest %D" } {
#map set roomsymbol <028>f;
#map set roomcolor <028>;
};
#elseif { "$room_terrain" == "city %D" } {
#map set roomsymbol <108>+;
#map set roomcolor <108>;
};
#elseif { "$room_terrain" == "mountain %D" } {
#map set roomsymbol <038>x;
#map set roomcolor <038>;
};
#elseif { "$room_terrain" == "pond %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "lagoon %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "rapids %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "river %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "ocean %D" } {
#map set roomsymbol <048>~;
#map set roomcolor <048>;
};
#elseif { "$room_terrain" == "underwater %D" } {
#map set roomsymbol <048>~;
#map set roomcolor <048>;
};
#elseif { "$room_terrain" == "sand %D" } {
#map set roomsymbol <038>!;
#map set roomcolor <038>;
};
};
};

#alias {mapdown} {
#map set roomcolor <048>;
};

#alias {mapup} {
#map set roomcolor <158>;
};

#alias {mapwater} {
#map set roomsymbol <078>W;
};

#alias {mapshop} {
#map set roomnote shop;
#map set roomsymbol <038>S;
};

#alias {mapfood} {
#map set roomnote food;
#map set roomsymbol <038>F;
};

#alias {mapnexus} {
#map set roomnote nexus;
#map set roomsymbol <078>N;
};

#alias {mapbank} {
#map set roomnote bank;
#map set roomsymbol <078>B;
};

#alias {mapguild} {
#map set roomnote guild;
#map set roomsymbol <178>G;
};

#alias {maptemple} {
#map set roomnote temple;
#map set roomsymbol <178>T;
};

#act {No way! You are still fighting!} {#map undo};

#act {The world around you begins disintegrating.} {#delay 6 #map goto $room_name};

#alias {runexile} {#map run {A Small Boat Ramp} {.5}}
#alias {runseringale} {#map run {South Square} {.5}}
#alias {runtimaran} {#map run {City Centre of Timaran} {.5}}
#alias {rundarkhaven} {#map run {An opening in the fog} {.5}}

#nop designed with xfce4-terminal emulator.;
#nop If the colors off, try xfce4-terminal.;
Davairus
Avatar
Posts: 10674
12/16/2023, 7:27:33 PM
That's amazing man! I noticed though you do not have any MXP handler. Is that something I can help with? I can supply the control code sequences if you need them
deauja
Avatar
Posts: 162
12/17/2023, 12:31:38 AM
Yeah, that would be good. I haven't done much with MXP however it's something I'd be willing to learn about for the fun of it.
Davairus
Avatar
Posts: 10674
12/17/2023, 1:39:48 AM
\033[1z and \033[7z and I think we have \t (tab) to separate things inside but thats a bit fuzzy for me.
deauja
Avatar
Posts: 162
1/7/2024, 9:40:40 AM
ARTT 1.4
I keep updating last posted script.
so for newest version copy, paste.

new screen shot 8)
new code, lots of fixes
added link to dl map.tt

screenshot:
https://postimg.cc/4mWhMR8g

map.tt:
https://ufile.io/aax359qh

questions here, will help if I can.
maeve
Posts: 68
11/20/2024, 7:17:15 PM
deauja idk if you're still around, wanted to test this script but the map file host is unavailable.

Any chance for reupload?
deauja
Avatar
Posts: 162
1/23/2025, 11:42:29 PM
Here to script and stuff. Starting fresh for fun. Here is artt 1.0. Just for linux users and others who can run tmux/tintin++. This is a little early for release really but just for fun here you go. Hope I'll be adding more fun updates and formatting soon! NOTE: Save the three files shared below to a directory. run chmod +x on ar.sh, than just do './ar.sh' cmd within tmux to launch it baby. 8)

ARTT 1.0

screenshot:
Image

https://i.postimg.cc/hPZF2zv8/2025-01-26-094338-1920x1080-scrot.png

ar.sh
tmux killp -a -t 0

> score.log
tmux split -v -l 11 'tail -f score.log'
> map.log
tmux split -h -b -l 11 'tail -f map.log'
tmux selectp -t 0
tmux source ar.tmux.conf
tt++ ar.tt


ar.tt
#nop abandonedrealms.com


#nop SECTION: MOVING AROUND

#mac {^H} {w};
#mac {^J} {s};
#mac {^K} {n};
#mac {^L} {e};
#mac {^O} {u};
#mac {^>} {d};
#mac {^M} {m};
#mac {^U} {whe};
#mac {^I} {sca};
#mac {^<} {flee};

#nop SECTION: MSDP

#EVENT {SESSION CONNECTED}
{
#variable TELNET[IAC] \xFF;
#variable TELNET[DONT] \xFE;
#variable TELNET[DO] \xFD;
#variable TELNET[WONT] \xFC;
#variable TELNET[WILL] \xFB;
#variable TELNET[SB] \xFA;
#variable TELNET[SE] \xF0;
#variable TELNET[MSDP] \x45;
#variable MSDP[VAR] \x01;
#variable MSDP[VAL] \x02;
#variable MSDP[TABLE_OPEN] \x03;
#variable MSDP[TABLE_CLOSE] \x04;
#variable MSDP[ARRAY_OPEN] \x05;
#variable MSDP[ARRAY_CLOSE] \x06;
#variable {MSDP_REPORTABLE_VARIABLES}{
{AC_BASH};
{AC_MAGIC};
{AC_PIERCE};
{AC_SLASH};
{ADRENALINE};
{AFFECTS};
{AREA_NAME};
{CHANNELS};
{CHARACTER_NAME};
{CHII_BOLT};
{CLASS};
{COMBAT_STYLE};
{CON};
{CON_PERM};
{DAMROLL};
{DEX};
{DEX_PERM};
{ENERGY};
{ENERGY_MAX};
{EXPERIENCE};
{EXPERIENCE_MAX};
{EXPERIENCE_TNL};
{GOLD};
{GROUP};
{HEALTH};
{HEALTH_MAX};
{HINT};
{HITROLL};
{HUNGER};
{INT};
{INT_PERM};
{INVENTORY};
{LEVEL};
{MANA};
{MANA_MAX};
{MOVEMENT};
{MOVEMENT_MAX};
{OPPONENT_COMBAT_STYLE};
{OPPONENT_HEALTH};
{OPPONENT_HEALTH_MAX};
{OPPONENT_LEVEL};
{OPPONENT_NAME};
{OPPONENT_WEAPON_OFFH};
{OPPONENT_WEAPON_TYPE};
{OVERLORD};
{OVERLORD_NAME};
{POKER};
{POWER};
{QUESTOR};
{RACE};
{ROOM_DESC};
{ROOM_EXITS};
{ROOM_MAP};
{ROOM_NAME};
{ROOM_TERRAIN};
{ROOM_VNUM};
{SAVING_AFF};
{SAVING_MAL};
{SAVING_MEN};
{SHIELD};
{SHIELD_MAX};
{STR};
{STR_PERM};
{TANK_NAME};
{TARGET};
{THIRST};
{TITLE};
{WEAPON_OFFH};
{WEAPON_TYPE};
{WEIGHT};
{WEIGHT_MAX};
{WIMPY};
{WIS};
{WIS_PERM};
{WORLD_TIME};};
#nop Turn telnet debug on if there are problems.;
#config {debug telnet} {off};
#split 0 1;
}

#EVENT {IAC WILL MSDP}
{
#send {$TELNET[IAC]$TELNET[DO]$TELNET[MSDP]\};
msdp_report
}

#alias {replace_color_codes} {

#replace {%1} {`1} {<018>}; #nop {RED};
#replace {%1} {`2} {<028>}; #nop {GREEN};
#replace {%1} {`3} {<038>}; #nop {YELLOW};
#replace {%1} {`4} {<048>}; #nop {BLUE};
#replace {%1} {`5} {<058>}; #nop {PURPLE};
#replace {%1} {`6} {<068>}; #nop {CYAN};
#replace {%1} {`7} {<eee>}; #nop {WHITE};
#replace {%1} {`8} {<ccc>}; #nop {GRAY};
#replace {%1} {`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`!} {<118>}; #nop {RED BOLD};
#replace {%1} {`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {`\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {``} {<088>}; #nop {RESET TO DEFAULT};

};

#EVENT {IAC SB MSDP}
{
#nop Save all variables with an msdp_ prefix.;
#nop Set all variables to lower case msdp_blah;

#format {test} {%l} {%0};
#variable {msdp_$test} {%1};

#if { "%0" == "ROOM_MAP" } {
#var {msdp_room_map} {%1};
replace_color_codes msdp_room_map;
#line log map.log $msdp_room_map;
};

#elseif { "%0" == "WORLD_TIME" } {
#var tick 35;
#if { "%1" != "" && "%1" != " " } {
#tick {tick} {#math {tick} {$tick-1}} {1};
#var {time} {%1};
#regexp {$time} {{.*} {(.*)}} {#var hour &1};
};
};

#elseif { "%0" == "CHANNELS" } {
#var {msdp_channels} {%1};
replace_color_codes msdp_channels;
#replace {msdp_channels} {\n} { };
};

#elseif { "%0" == "OPPONENT_COMBAT_STYLE" } {
#var {msdp_opponent_combat_style} {%1};
replace_color_codes msdp_opponent_combat_style;
#replace {msdp_opponent_combat_style} {\n} { };
};

#elseif { "%0" == "COMBAT_STYLE" } {
#var {msdp_combat_style} {%1};
replace_color_codes msdp_combat_style;
#replace {msdp_combat_style} {\n} { };
};

#nop stuff to prepare for score.log;
#math {xptnl} {$msdp_experience_tnl - $msdp_experience};
#if {"$msdp_opponent_name" == ""} {#var msdp_opponent_name None.};

#nop calculate life, mana, move percentages.;
#math {mylife} { 100 * $msdp_health / $msdp_health_max };
#math {mymana} { 100 * $msdp_mana / $msdp_mana_max };
#math {mymove} { 100 * $msdp_movement / $msdp_movement_max };

#nop colorize my hp/mp/mv percent.;
#if { $mylife > 59 } { #var {mylife_clr} {<088>} };
#elseif { $mylife < 30 } { #var {mylife_clr} {<118>} };
#elseif { $mylife < 60 } { #var {mylife_clr} {<138>} };

#if { $mymana > 59 } { #var {mymana_clr} {<088>} };
#elseif { $mymana < 30 } { #var {mymana_clr} {<118>} };
#elseif { $mymana < 60 } { #var {mymana_clr} {<138>} };

#if { $mymove > 59 } { #var {mymove_clr} {<088>} };
#elseif { $mymove < 30 } { #var {mymove_clr} {<118>} };
#elseif { $mymove < 60 } { #var {mymove_clr} {<138>} };

#if { $tick < 7 } { #var tick_clr {<018>} };
#if { $tick < 15 && $tick > 6 } { #var tick_clr {<038>} };
#if { $tick > 14 } { #var tick_clr {<088>} };

LOG_SCORE;

#sys {tmux set -g status-right "#[fg=gray bold]Str:#[fg=white] $msdp_str_perm($msdp_str) #[fg=gray bold]Int:#[fg=white] $msdp_int_perm($msdp_int) #[fg=gray bold]Wis:#[fg=white] $msdp_wis_perm($msdp_wis) #[fg=gray bold]Dex:#[fg=white] $msdp_dex_perm($msdp_dex) #[fg=gray bold]Con:#[fg=white] $msdp_con_perm($msdp_con)"};

#sys {tmux set -g status-left "$msdp_area_name"};
};

#alias {LOG_SCORE} {
#line log score.log {
\n
$mylife_clr$mylife\% life<088> <g13>|<088> $mymana_clr$mymana\% mana<088> <g13>|<088> $mymove_clr$mymove\% move<088>\n
\n
hitroll: $msdp_hitroll <g13>|<088> damroll: $msdp_damroll <g13>|<088> $msdp_weapon_type\n
time: $tick_clr$time<088> <g13>|<088> lbs: $msdp_weight/$msdp_weight_max\n
gold:$msdp_gold <g13>|<088> xptnl: $xptnl <g13>|<088> rank: $msdp_level\n
hunger: $msdp_hunger <g13>|<088> thirst: $msdp_thirst\n
\n
\n
\n
};
};

prompt Now fighting %f %T;
#gag {Now fighting *none*};

#EVENT {IAC SB MSDP IAC SE}
{
#if {&{msdp_room_exits} == 0}
{
#return
};
#nop prompt was shown here before;
}

#EVENT {IAC SB MSDP ROOM}
{
#variable {MSDP_ROOM} {%1};
}

#ALIAS {msdp_report}
{
#nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
#variable result {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]REPORT};
#foreach {*MSDP_REPORTABLE_VARIABLES[]} {tmp}
{
#variable result {$result$MSDP[VAL]$tmp}
};
#send {$result$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {msdp_list}
{
#send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]LIST$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {msdp_send}
{
#send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]SEND$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {example}
{
msdp_list COMMANDS;
msdp_list REPORTABLE_VARIABLES;
msdp_report
}

#nop SECTION: CONNECTION;

#EVENT {SESSION DISCONNECTED} {
#sys {tmux killp -a -t 0;};
#sys {rm map.log;};
#sys {rm score.log;};
#sys {tmux set -g status-left '$msdp_character_name slowly fades away.'};
#sys {tmux set -g status-right 'You become yourself again.'};
#sys {clear};
};

#ses abandonedrealms abandonedrealms.com 9000;

#split 0 0;


ar.tmux.conf
# reload config file (change file location to your the tmux.conf you want to use)

bind r source-file ~/.tmux.conf

# panes
set -g pane-border-style 'fg=black'
set -g pane-active-border-style 'fg=black'

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style 'fg=white'

set -g status-left ''
set -g status-left-length 100

set -g status-right-style 'fg=white'
set -g status-right ''
set -g status-right-length 100

setw -g window-status-current-style 'fg=gray bg=black'
setw -g window-status-current-format ''

setw -g window-status-style 'fg=red bg=black'
setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '

setw -g window-status-bell-style 'fg=yellow bg=red bold'
deauja
Avatar
Posts: 162
1/28/2025, 3:26:10 AM
Trying to keep this script short and sweet as long as possible.
You'll need to change the charname and password vars now.
enjoy!


You might use a command similar to this to launch the game:
mate-terminal --full-screen -e 'tmux new-session ./ar.sh'

ARTT 1.1 screenshsot:
https://i.postimg.cc/k5P8VpMp/2025-01-30-145941-1920x1080-scrot.png

Image

ar.sh
tmux killp -a -t 0

> fourth.log
tmux split -v -l 8 'tail -f fourth.log'
> third.log
tmux split -h -b -l 135 'tail -f third.log'
> second.log
tmux split -h -b -l 90 'tail -f second.log'
> first.log
tmux split -h -b -l 50 'tail -f first.log'
> bottomleft.log
tmux split -h -b -l 11 'tail -f bottomleft.log'
tmux selectp -t 0
> topleft.log
tmux split -h -b -l 11 'tail -f topleft.log'
> map.log
tmux split -v -l 11 'tail -f map.log'
tmux selectp -t 2
> topright.log
tmux split -h -l 80 'tail -f topright.log'
tmux selectp -t 2
tmux source ar.tmux.conf
tt++ ar.tt


ar.tt
#nop abandonedrealms.com


#nop SECTION: AUTO LOGIN
#var charname {};;
#var password {};

#var autologin false;
#var autotrack true;

#nop state is currently represented in the first.log file.
#event {VARIABLE UPDATED state} { LOG_FIRST };

#nop get characaers state i.e. sleeping/fighting.
#var state {};

#act {^You can't see anything, you're sleeping!} {#var state sleeping};
#act {^You go to sleep in %1.} {#var state sleeping};
#act {^You go to sleep on %1.} {#var state sleeping};
#act {^You can't do that while resting.} {#var state resting};
#act {^In your dreams, or what?} {#var state sleeping};
#act {^You go to sleep.} {#var state sleeping};
#act {^You wake and stand up.} {#var state standing};
#act {^You rest.} {#var state resting};
#act {^You stop resting.} {#var state sitting};
#act {^You are already sitting down.} {#var state sitting};
#act {^You sit down.} {#var state sitting};
#act {^You stand up.} {#var state standing};
#act {^You are already standing.} {#var sate standing};
#act {^You are already resting.} {#var state resting};
#act {^You wake and sit up.} {#var state sitting};
#act {^You wake up and start resting.} {#var state resting};

#nop automatic objective tracking.

#act {~\e[0;33mnorth} {#if {"$autotrack"=="true"} {n}}
#act {~\e[0;33meast} {#if {"$autotrack"=="true"} {e}}
#act {~\e[0;33msouth} {#if {"$autotrack"=="true"} {s}}
#act {~\e[0;33mwest} {#if {"$autotrack"=="true"} {w}}
#act {~\e[0;33mup} {#if {"$autotrack"=="true"} {u}}
#act {~\e[0;33mdown} {#if {"$autotrack"=="true"} {d}}

#nop SECTION: MOVING AROUND

#mac {^H} {w};
#mac {^J} {s};
#mac {^K} {n};
#mac {^L} {e};
#mac {^O} {u};
#mac {^>} {d};
#mac {^M} {m};
#mac {^U} {whe};
#mac {^I} {sca};
#mac {^<} {flee};

#nop SECTION: MSDP

#EVENT {SESSION CONNECTED}
{
#variable TELNET[IAC] \xFF;
#variable TELNET[DONT] \xFE;
#variable TELNET[DO] \xFD;
#variable TELNET[WONT] \xFC;
#variable TELNET[WILL] \xFB;
#variable TELNET[SB] \xFA;
#variable TELNET[SE] \xF0;
#variable TELNET[MSDP] \x45;
#variable MSDP[VAR] \x01;
#variable MSDP[VAL] \x02;
#variable MSDP[TABLE_OPEN] \x03;
#variable MSDP[TABLE_CLOSE] \x04;
#variable MSDP[ARRAY_OPEN] \x05;
#variable MSDP[ARRAY_CLOSE] \x06;
#variable {REPORTABLE_VARIABLES}{
{AC_BASH};
{AC_MAGIC};
{AC_PIERCE};
{AC_SLASH};
{ADRENALINE};
{AFFECTS};
{AREA_NAME};
{CHANNELS};
{CHARACTER_NAME};
{CHII_BOLT};
{CLASS};
{COMBAT_STYLE};
{CON};
{CON_PERM};
{DAMROLL};
{DEX};
{DEX_PERM};
{ENERGY};
{ENERGY_MAX};
{EXPERIENCE};
{EXPERIENCE_MAX};
{EXPERIENCE_TNL};
{GOLD};
{GROUP};
{HEALTH};
{HEALTH_MAX};
{HINT};
{HITROLL};
{HUNGER};
{INT};
{INT_PERM};
{INVENTORY};
{LEVEL};
{MANA};
{MANA_MAX};
{MOVEMENT};
{MOVEMENT_MAX};
{OPPONENT_COMBAT_STYLE};
{OPPONENT_HEALTH};
{OPPONENT_HEALTH_MAX};
{OPPONENT_LEVEL};
{OPPONENT_NAME};
{OPPONENT_WEAPON_OFFH};
{OPPONENT_WEAPON_TYPE};
{OVERLORD};
{OVERLORD_NAME};
{POKER};
{POWER};
{QUESTOR};
{RACE};
{ROOM_DESC};
{ROOM_EXITS};
{ROOM_MAP};
{ROOM_NAME};
{ROOM_TERRAIN};
{ROOM_VNUM};
{SAVING_AFF};
{SAVING_MAL};
{SAVING_MEN};
{SHIELD};
{SHIELD_MAX};
{STR};
{STR_PERM};
{TANK_NAME};
{TARGET};
{THIRST};
{TITLE};
{WEAPON_OFFH};
{WEAPON_TYPE};
{WEIGHT};
{WEIGHT_MAX};
{WIMPY};
{WIS};
{WIS_PERM};
{WORLD_TIME};};
#nop Turn telnet debug on if there are problems.;
#config {debug telnet} {off};
}

#EVENT {IAC WILL MSDP}
{
#send {$TELNET[IAC]$TELNET[DO]$TELNET[MSDP]\};
report
}

#alias {replace_color_codes} {

#replace {%1} {`1} {<018>}; #nop {RED};
#replace {%1} {`2} {<028>}; #nop {GREEN};
#replace {%1} {`3} {<038>}; #nop {YELLOW};
#replace {%1} {`4} {<048>}; #nop {BLUE};
#replace {%1} {`5} {<058>}; #nop {PURPLE};
#replace {%1} {`6} {<068>}; #nop {CYAN};
#replace {%1} {`7} {<eee>}; #nop {WHITE};
#replace {%1} {`8} {<ccc>}; #nop {GRAY};
#replace {%1} {`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`!} {<118>}; #nop {RED BOLD};
#replace {%1} {`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {`\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {``} {<088>}; #nop {RESET TO DEFAULT};

};

#alias {strip_color_codes} {
#replace {%1} {`1} {};#replace {%1} {`2} {};#replace {%1} {`3} {};
#replace {%1} {`4} {};#replace {%1} {`5} {};#replace {%1} {`6} {};
#replace {%1} {`7} {};#replace {%1} {`8} {};#replace {%1} {`9} {};
#replace {%1} {`!} {};#replace {%1} {`@} {};#replace {%1} {`#} {};
#replace {%1} {`\$} {};#replace {%1} {`%} {};#replace {%1} {`^} {};
#replace {%1} {`&} {};#replace {%1} {``} {};
};

#EVENT {IAC SB MSDP} {

#nop Set all variables to lower case;
#format {test} {%l} {%0};
#variable {$test} {%1};

#if { "%0" == "ROOM_MAP" } {
#var {room_map} {%1};
replace_color_codes room_map;
#line log map.log $room_map;
};

#elseif { "%0" == "RACE" } {
#var {race} {%1};
#format {race} {%l} {$race};
};

#elseif { "%0" == "HUNGER" } {
#var {hunger} {%1};
#if { "$hunger" == "[*****]" } {#var hungry false} {#var hungry true};
};

#elseif { "%0" == "THIRST" } {
#var {thirst} {%1};
#if { "$thirst" == "[*****]" } {#var thirsty false} {#var thirsty true};
};

#elseif { "%0" == "WORLD_TIME" } {
#var tick 35;
#if { "%1" != "" && "%1" != " " } {
#tick {tick} {#math {tick} {$tick-1}} {1};
#var {time} {%1};
#regexp {$time} {{.*} {(.*)}} {#var hour &1;#var gentime &2};
};
};

#elseif { "%0" == "CHANNELS" } {
#var {channels} {%1};
replace_color_codes channels;
#replace {channels} {\n} { };
};

#elseif { "%0" == "COMBAT_STYLE" } {
#var {combat_style} {%1};
strip_color_codes combat_style;
#var {combat_style_clr} {%1};
replace_color_codes combat_style_clr;
};

#elseif { "%0" == "OPPONENT_WEAPON_TYPE" } {
#var {opponent_weapon_type} {%1};
strip_color_codes opponent_weapon_type;
#var {opponent_weapon_type_clr} {%1};
replace_color_codes opponent_weapon_type_clr;
#if { "$opponent_weapon_type" == "no opponent" } {
#var {opponent_weapon_type} {none};
#var {opponent_weapon_type_clr} {none};
};
};

#elseif { "%0" == "OPPONENT_WEAPON_OFFH" } {
#var {opponent_weapon_offh} {%1};
strip_color_codes opponent_weapon_offh;
#var {opponent_weapon_offh_clr} {%1};
replace_color_codes opponent_weapon_offh_clr;
#if { "$opponent_weapon_offh" == "no opponent" } {
#var {opponent_weapon_offh} {none};
#var {opponent_weapon_offh_clr} {none};
};
};

#elseif { "%0" == "OPPONENT_COMBAT_STYLE" } {
#var {opponent_combat_style} {%1};
#if { "$opponent_combat_style" != "no opponent" } {
#var state fighting;
};
#if { "$opponent_combat_style" == "no opponent" && "$state" == "fighting" } {
#var state standing;
};
strip_color_codes opponent_combat_style;
#var {opponent_combat_style_clr} {%1};
replace_color_codes opponent_combat_style_clr;
#if { "$opponent_combat_style" == "no opponent" } {
#var {opponent_combat_style} {none};
#var {opponent_combat_style_clr} {none};
};
};

#elseif { "%0" == "CHARACTER_NAME" } {
#var {character_name} {%1};
#if { "$room_exits" == "" } {
#var show_exits {It's time to wake up again};
#var state sleeping;
LOG_FIRST;
};
};

#elseif { "%0" == "ROOM_EXITS" } {
#var {room_exits} {%1};
#foreach {*room_exits[]} {list_exits} {#var new {$new $list_exits}};
#var {list_exits} {$new};
#var {new} {[Exits:};
#var {show_exits} {$list_exits]};
#if { "$room_exits" == "" } {
#var {show_exits} {unknown};
};
};

#elseif { "%0" == "ROOM_TERRAIN" } {
#var {room_terrain} {%1};
#if { "$room_terrain" == "" } {
#var {room_terrain} {unknown};
};
};

#nop stuff to prepare for first/second/third.log;
#math {check_xptnl} {$experience_tnl - $experience};
#if { $check_xptnl > 0 } { #var {xptnl} {$check_xptnl} };
#if {"$opponent_name" == ""} {#var opponent_name None.};

#nop calculate life, mana, move percentages.;
#math {mylife} { 100 * $health / $health_max };
#math {mymana} { 100 * $mana / $mana_max };
#math {mymove} { 100 * $movement / $movement_max };

#nop colorize my hp/mp/mv percent.;
#if { $mylife > 80 } { #var {mylife_clr} {<g13>} };
#elseif { $mylife > 59 && $mylife < 81 } { #var {mylife_clr} {<088>} };
#elseif { $mylife < 30 } { #var {mylife_clr} {<118>} };
#elseif { $mylife < 60 } { #var {mylife_clr} {<138>} };

#if { $mymana > 80 } { #var {mymana_clr} {<g13>} };
#elseif { $mymana > 59 && $mymana < 81 } { #var {mymana_clr} {<088>} };
#elseif { $mymana < 30 } { #var {mymana_clr} {<118>} };
#elseif { $mymana < 60 } { #var {mymana_clr} {<138>} };

#if { $mymove > 80 } { #var {mymove_clr} {<g13>} };
#elseif { $mymove > 59 && $mymove < 81 } { #var {mymove_clr} {<088>} };
#elseif { $mymove < 30 } { #var {mymove_clr} {<118>} };
#elseif { $mymove < 60 } { #var {mymove_clr} {<138>} };

#if { $tick < 7 } { #var tick_clr {<018>} };
#if { $tick < 15 && $tick > 6 } { #var tick_clr {<038>} };
#if { $tick > 14 } { #var tick_clr {<088>} };

LOG_FIRST;
LOG_SECOND;
LOG_THIRD;
LOG_FOURTH;
LOG_TOPLEFT;
LOG_BOTTOMLEFT;

#sys {tmux set -g status-right ""};
#sys {tmux set -g status-left " $room_name [$area_name]"};
};

#alias {LOG_FIRST} {
#line log first.log {
\n
$mylife_clr$mylife% life<088> | $mymana_clr$mymana% mana<088> | $mymove_clr$mymove% move<088>\n
\n
<088>$weapon_type<g13>/<088>$weapon_offh <g13>[<088>$combat_style_clr<g13>]<088>\n
<g13>The $race $class is $state<088>\n
$gold gold <g13>|<088> $gentime\n
<g13>$show_exits<088>\n
};
};

#alias {LOG_SECOND} {
#line log second.log {
\n
<088>$opponent_health% $opponent_name <g13>|<088> $xptnl tnl <g13>|<088> $tick_clr$hour<088> <g13>|<088> $adrenaline \n
\n
$opponent_weapon_type_clr<g13>/<088>$opponent_weapon_offh_clr <g13>[<088>$opponent_combat_style_clr<g13>]<088>\n
<g13>H:$hunger T:$thirst Overlord: $overlord%<088>\n
You are in the $room_terrain\n
<g13>$weight/$weight_max lbs <088>|<g13> $wimpy/$health_max hp wimpy \n
};
};

#alias {LOG_THIRD} {
#line log third.log {
\n
Hit: $hitroll <g13>|<088> Dam: $damroll <g13>|<088> Rank: $level\n
\n
<g13>Armor<088> vs Pierce: $ac_pierce <g13>Saving Throws<088>
\n vs Bash: $ac_bash Afflictive: $saving_aff
\n vs Slash: $ac_slash Maledictive: $saving_mal
\n vs Magic $ac_magic Mental: $saving_men\n
};
};

#alias {LOG_FOURTH} {
#line log fourth.log {
\n
Streng: $str<g13>|<088>$str_perm\n
Intell: $int<g13>|<088>$int_perm\n
Wisdom: $wis<g13>|<088>$wis_perm\n
Dexter: $dex<g13>|<088>$dex_perm\n
Consti: $con<g13>|<088>$con_perm\n
};
};

#alias {LOG_TOPLEFT} {
#line log topleft.log {
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
};
};

#alias {LOG_BOTTOMLEFT} {
#line log bottomleft.log {
\n
\n
\n
\n
\n
\n
};
};

#EVENT {IAC SB MSDP IAC SE}
{
#if {&{room_exits} == 0}
{
#return
};
}

#EVENT {IAC SB MSDP ROOM}
{
#variable {ROOM} {%1};
}

#ALIAS {report}
{
#nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
#variable result {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]REPORT};
#foreach {*REPORTABLE_VARIABLES[]} {tmp}
{
#variable result {$result$MSDP[VAL]$tmp}
};
#send {$result$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {list}
{
#send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]LIST$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {send}
{
#send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]SEND$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {example}
{
list COMMANDS;
list REPORTABLE_VARIABLES;
report
}

#nop SECTION: CONNECTION;

#EVENT {SESSION DISCONNECTED} {
ARTT_SHUTDOWN;
#end;
};

#alias {ARTT_SHUTDOWN} {
#sys {tmux killp -a -t 2;};
#sys {rm map.log;};
#sys {rm first.log;};
#sys {rm second.log;};
#sys {rm third.log;};
#sys {rm fourth.log;};
#sys {rm bottomleft.log;};
#sys {rm topleft.log;};
#sys {rm topright.log;};
#sys {rm blank.log;};
};

#ses abandonedrealms abandonedrealms.com 9000;

#nop enter your characters name;
#act {By what name do you wish to be remembered?} {
#if { "$autologin" == "true" } {$charname;#line gag};
};
#act {By what name do you wish to be known?} {
#if { "$autologin" == "true" } {$charname;#line gag};
};

#act {Password:} {
STARTUP;
#if { "$autologin" == "true" } {$password;#line gag};
};

#alias {STARTUP} {
#split 0 1;
#Show { } {-2};
#screen get ROWS rows;
#var {new} {[Exits:};
};


ar.tmux.conf
# reload config file (change file location to your the tmux.conf you want to use)

bind r source-file ~/.tmux.conf

# panes
set -g pane-border-style 'fg=black'
set -g pane-active-border-style 'fg=black'

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style 'fg=white'

set -g status-left ''
set -g status-left-length 100

set -g status-right-style 'fg=white'
set -g status-right ''
set -g status-right-length 100

setw -g window-status-current-style 'fg=gray bg=black'
setw -g window-status-current-format ''

setw -g window-status-style 'fg=red bg=black'
setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '

setw -g window-status-bell-style 'fg=yellow bg=red bold'
deauja
Avatar
Posts: 162
2/1/2025, 12:45:25 AM
tagged combat damage data

added small map file and alias to expand on it.

enjoi


edit = think makemap alias was broke. I fixed sat feb 1, 2:11 pm
- also started cleanup of combat tags

ar.tt
#nop abandonedrealms.com


#nop SECTION: AUTO LOGIN
#var charname {};
#var password {};

#var autologin false;
#var autotrack false;

#nop set 'tintinmap' variable to 'true' and reload, go to south square.
#nop use the 'makemap' alias below to enter/exit map editing mode.
#nop use 'mapguild, mapshop, etc cmds below to get 'G' and 'S' symbols.

#var tintinmap false;

#nop SECTION: GAG COND;
#gag {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 has some small wounds and bruises.$}
#gag {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 has a few scratches.$}
#gag {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 is in %3 condition.$}
#gag {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 looks pretty hurt.$}
#gag {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 has quite a few wounds.$}
#gag {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 has some big nasty wounds and scratches.$}

#nop SECTION: TAG DATA;

#sub {%1 {miss|scratch|graze|hit|injure|wound|maul|decimate|devastate|maim|MUTILATE|DISEMBOWEL|DISMEMBER|MASSACRE|MANGLE|DEMOLISH|DEVASTATE|OBLITERATE|ANNIHILATE|ERADICATE|misses|scratches|grazes|hits|injures|wounds|mauls|decimates|devastates|maims|MUTILATES|DISEMBOWELS|DISMEMBERS|MASSACRES|MANGLES|DEMOLISHES|DEVASTATES|OBLITERATES|ANNIHILATES|ERADICATES} %3{.|!}} {[ <028>OK<088> ] %1 %2 %3%4};

#nop PARRY;

#sub {%1 thrusts your %2 aside in a skillful parry.} {[ <028>OK<088> ] %1 thrusts your %2 aside in a skillful parry.}
#sub {You dual parry %1.} {[ <028>OK<088> ] You dual parry %1.}
#sub {%1 weapon advantage overcomes your parry attempt.} {[ <028>OK<088> ] %1 weapon advantage overcomes your parry attempt.}
#sub {Your weapon advantage overcomes %1 parry attempt.} {[ <028>OK<088> ] Your weapon advantage overcomes %1 parry attempt.}
#sub {A quick swipe of your off-hand weapon parries %1 aside easily.} {[ <028>OK<088> ] A quick swipe of your off-hand weapon parries %1 aside easily.}
#sub {You deflect %1 aside in an ungraceful parry.} {[ <028>OK<088> ] You deflect %1 aside in an ungraceful parry.}
#sub {^You parry %1 with an easy flourish.} {[ <028>OK<088> ] You parry %1 with an easy flourish.}
#sub {%1 deflects your %2 aside in an ungraceful parry.} {[ <028>OK<088> ] %1 deflects your %2 aside in an ungraceful parry.}
#sub {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 awkwardly parries your %3 with a loud clang.} {[ <028>OK<088> ] %1%2 awkwardly parries your %3 with a loud clang.}
#sub {You thrust %1 aside in a skillful parry.} {[ <028>OK<088> ] You thrust %1 aside in a skillful parry.}
#sub {You awkwardly parry %1 with a loud clang.} {[ <028>OK<088> ] You awkwardly parry %1 with a loud clang.}
#sub {%1 parries your %2.} {[ <028>OK<088> ] %1 parries your %2.}
#sub {You parry %1.} {[ <028>OK<088> ] You parry %1.}

#nop DODGE;

#sub {You deftly perform a counterbalance evasion.} {[ <028>OK<088> ] You deftly perform a counterbalance evasion.}
#sub {%1 can't dodge away from the reach of %2 fast enough.} {[ <028>OK<088> ] %1 can't dodge away from the reach of %2 fast enough.}
#sub {%1 dodges your %2.} {[ <028>OK<088> ] %1 dodges your %2.}
#sub {You manage to dodge %1 with a lot of effort.} {[ <028>OK<088> ] You manage to dodge %1 with a lot of effort.}
#sub {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 stumbles and barely dodges your %2.} {[ <028>OK<088> ] %1 stumbles and barely dodges your %2.}
#sub {You dance around %1 and easily dodge it.} {[ <028>OK<088> ] You dance around %1 and easily dodge it.}
#sub {You dodge %1.} {[ <028>OK<088> ] You dodge %1.}
#sub {You nimbly dodge %1 with a practiced maneuver.} {[ <028>OK<088> ] You nimbly dodge %1 with a practiced maneuver.}
#sub {%1 dances around your %2, easily dodging it.} {[ <028>OK<088> ] %1 dances around your %2, easily dodging it.}
#sub {%1 manages to dodge your %2 with a lot of effort.} {[ <028>OK<088> ] %1 manages to dodge your %2 with a lot of effort.}
#sub {You stumble and barely manage to dodge %1.} {[ <028>OK<088> ] You stumble and barely manage to dodge %1.}
#sub {You concentrate on your combat style to prevent %1 from dodging.} {[ <028>OK<088> ] You concentrate on your combat style to prevent %1 from dodging.}
#sub {%1 concentrates on %2 combat style to prevent %3 from dodging.} {[ <028>OK<088> ] %1 concentrates on %2 combat style to prevent %3 from dodging.}
#sub {%1's weapon advantage overcomes %2's parry attempt.} {[ <028>OK<088> ] %1's weapon advantage overcomes %2's parry attempt.}
#sub {You concentrate on your combat style to inflict more damage.} {[ <028>OK<088> ] You concentrate on your combat style to inflict more damage.}

#nop SHIELD BLOCK;

#sub {%1 grips %2 shield firmly, staving off your %3.} {[ <028>OK<088> ] %1 grips %2 shield firmly, staving off your %3.}
#sub {%1 shield jolts under your %2, but holds.} {[ <028>OK<088> ] %1 shield jolts under your %2, but holds.}
#sub {%1 shield wobbles and barely deflects your %2.} {[ <028>OK<088> ] %1 shield wobbles and barely deflects your %2.}
#sub {%1 blocks your attack with %2 shield.} {[ <028>OK<088> ] %1 blocks your attack with %2 shield.}
#sub {You block %1 with your shield.} {[ <028>OK<088> ] You block %1 with your shield.}
#sub {Your shield jolts under %1, but holds.} {[ <028>OK<088> ] Your shield jolts under %1, but holds.}
#sub {Your shield wobbles and barely deflects %1.} {[ <028>OK<088> ] Your shield wobbles and barely deflects %1.}
#sub {Your shield absorbs the impact of %1 easily.} {[ <028>OK<088> ] Your shield absorbs the impact of %1 easily.}
#sub {%1's shield absorbs the impact of your %2 easily.} {[ <028>OK<088> ] %1's shield absorbs the impact of your %2 easily.}
#sub {You grip your shield firmly, staving off %1.} {[ <028>OK<088> ] You grip your shield firmly, staving off %1.}
#sub {You block %1 and attempt to strike at the brief opening.} {[ <028>OK<088> ] You block %1 and attempt to strike at the brief opening.}
#sub {%1 blocks your attack and attempts to strike at the brief opening.} {[ <028>OK<088> ] %1 blocks your attack and attempts to strike at the brief opening.}

#nop START A.I.

#nop idle count, I'm not pressing any keys here for how long?
#var {idle} {0};
#event {VARIABLE UPDATED room_exits} { #var {idle} {0} };
#event {RECEIVED KEYPRESS} { #var {idle} {0} };

#tick {idle} {
#math {idle} { $idle + 1 };
} {1};

#nop state is currently represented in the first.log file.
#event {VARIABLE UPDATED state} { LOG_FIRST };

#nop get characaers state i.e. sleeping/fighting.
#var state {};

#act {^You can't see anything, you're sleeping!} {#var state sleeping};
#act {^You go to sleep in %1.} {#var state sleeping};
#act {^You go to sleep on %1.} {#var state sleeping};
#act {^You can't do that while resting.} {#var state resting};
#act {^In your dreams, or what?} {#var state sleeping};
#act {^You go to sleep.} {#var state sleeping};
#act {^You wake and stand up.} {#var state standing};
#act {^You rest.} {#var state resting};
#act {^You stop resting.} {#var state sitting};
#act {^You are already sitting down.} {#var state sitting};
#act {^You sit down.} {#var state sitting};
#act {^You stand up.} {#var state standing};
#act {^You are already standing.} {#var sate standing};
#act {^You are already resting.} {#var state resting};
#act {^You wake and sit up.} {#var state sitting};
#act {^You wake up and start resting.} {#var state resting};

#nop automatic objective tracking.

#act {~\e[0;33mnorth} {#if {"$autotrack"=="true"} {n}}
#act {~\e[0;33meast} {#if {"$autotrack"=="true"} {e}}
#act {~\e[0;33msouth} {#if {"$autotrack"=="true"} {s}}
#act {~\e[0;33mwest} {#if {"$autotrack"=="true"} {w}}
#act {~\e[0;33mup} {#if {"$autotrack"=="true"} {u}}
#act {~\e[0;33mdown} {#if {"$autotrack"=="true"} {d}}

#nop SECTION: MOVING AROUND

#mac {^H} {w};
#mac {^J} {s};
#mac {^K} {n};
#mac {^L} {e};
#mac {^O} {u};
#mac {^>} {d};
#mac {^M} {m};
#mac {^U} {whe};
#mac {^I} {sca};
#mac {^<} {flee};

#nop SECTION: MSDP

#EVENT {SESSION CONNECTED}
{
#variable TELNET[IAC] \xFF;
#variable TELNET[DONT] \xFE;
#variable TELNET[DO] \xFD;
#variable TELNET[WONT] \xFC;
#variable TELNET[WILL] \xFB;
#variable TELNET[SB] \xFA;
#variable TELNET[SE] \xF0;
#variable TELNET[MSDP] \x45;
#variable MSDP[VAR] \x01;
#variable MSDP[VAL] \x02;
#variable MSDP[TABLE_OPEN] \x03;
#variable MSDP[TABLE_CLOSE] \x04;
#variable MSDP[ARRAY_OPEN] \x05;
#variable MSDP[ARRAY_CLOSE] \x06;
#variable {REPORTABLE_VARIABLES}{
{AC_BASH};
{AC_MAGIC};
{AC_PIERCE};
{AC_SLASH};
{ADRENALINE};
{AFFECTS};
{AREA_NAME};
{CHANNELS};
{CHARACTER_NAME};
{CHII_BOLT};
{CLASS};
{COMBAT_STYLE};
{CON};
{CON_PERM};
{DAMROLL};
{DEX};
{DEX_PERM};
{ENERGY};
{ENERGY_MAX};
{EXPERIENCE};
{EXPERIENCE_MAX};
{EXPERIENCE_TNL};
{GOLD};
{GROUP};
{HEALTH};
{HEALTH_MAX};
{HINT};
{HITROLL};
{HUNGER};
{INT};
{INT_PERM};
{INVENTORY};
{LEVEL};
{MANA};
{MANA_MAX};
{MOVEMENT};
{MOVEMENT_MAX};
{OPPONENT_COMBAT_STYLE};
{OPPONENT_HEALTH};
{OPPONENT_HEALTH_MAX};
{OPPONENT_LEVEL};
{OPPONENT_NAME};
{OPPONENT_WEAPON_OFFH};
{OPPONENT_WEAPON_TYPE};
{OVERLORD};
{OVERLORD_NAME};
{POKER};
{POWER};
{QUESTOR};
{RACE};
{ROOM_DESC};
{ROOM_EXITS};
{ROOM_MAP};
{ROOM_NAME};
{ROOM_TERRAIN};
{ROOM_VNUM};
{SAVING_AFF};
{SAVING_MAL};
{SAVING_MEN};
{SHIELD};
{SHIELD_MAX};
{STR};
{STR_PERM};
{TANK_NAME};
{TARGET};
{THIRST};
{TITLE};
{WEAPON_OFFH};
{WEAPON_TYPE};
{WEIGHT};
{WEIGHT_MAX};
{WIMPY};
{WIS};
{WIS_PERM};
{WORLD_TIME};};
#nop Turn telnet debug on if there are problems.;
#config {debug telnet} {off};
}

#EVENT {IAC WILL MSDP}
{
#send {$TELNET[IAC]$TELNET[DO]$TELNET[MSDP]\};
report
}

#alias {replace_color_codes} {

#replace {%1} {`1} {<018>}; #nop {RED};
#replace {%1} {`2} {<028>}; #nop {GREEN};
#replace {%1} {`3} {<038>}; #nop {YELLOW};
#replace {%1} {`4} {<048>}; #nop {BLUE};
#replace {%1} {`5} {<058>}; #nop {PURPLE};
#replace {%1} {`6} {<068>}; #nop {CYAN};
#replace {%1} {`7} {<eee>}; #nop {WHITE};
#replace {%1} {`8} {<ccc>}; #nop {GRAY};
#replace {%1} {`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`!} {<118>}; #nop {RED BOLD};
#replace {%1} {`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {`\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {``} {<088>}; #nop {RESET TO DEFAULT};

};

#alias {strip_color_codes} {
#replace {%1} {`1} {};#replace {%1} {`2} {};#replace {%1} {`3} {};
#replace {%1} {`4} {};#replace {%1} {`5} {};#replace {%1} {`6} {};
#replace {%1} {`7} {};#replace {%1} {`8} {};#replace {%1} {`9} {};
#replace {%1} {`!} {};#replace {%1} {`@} {};#replace {%1} {`#} {};
#replace {%1} {`\$} {};#replace {%1} {`%} {};#replace {%1} {`^} {};
#replace {%1} {`&} {};#replace {%1} {``} {};
};

#EVENT {IAC SB MSDP} {

#nop Set all variables to lower case;
#format {test} {%l} {%0};
#variable {$test} {%1};

#if { "%0" == "ROOM_MAP" } {
#var {room_map} {%1};
replace_color_codes room_map;
#line log map.log $room_map;
};

#elseif { "%0" == "RACE" } {
#var {race} {%1};
#format {race} {%l} {$race};
};

#elseif { "%0" == "HUNGER" } {
#var {hunger} {%1};
#if { "$hunger" == "[*****]" } {#var hungry false} {#var hungry true};
};

#elseif { "%0" == "THIRST" } {
#var {thirst} {%1};
#if { "$thirst" == "[*****]" } {#var thirsty false} {#var thirsty true};
};

#elseif { "%0" == "WORLD_TIME" } {
#var tick 35;
#if { "%1" != "" && "%1" != " " } {
#tick {tick} {#math {tick} {$tick-1}} {1};
#var {time} {%1};
#regexp {$time} {{.*} {(.*)}} {#var hour &1;#var gentime &2};
};
};

#elseif { "%0" == "CHANNELS" } {
#var {channels} {%1};
replace_color_codes channels;
#replace {channels} {\n} { };
};

#elseif { "%0" == "COMBAT_STYLE" } {
#var {combat_style} {%1};
strip_color_codes combat_style;
#var {combat_style_clr} {%1};
replace_color_codes combat_style_clr;
};

#elseif { "%0" == "OPPONENT_WEAPON_TYPE" } {
#var {opponent_weapon_type} {%1};
strip_color_codes opponent_weapon_type;
#var {opponent_weapon_type_clr} {%1};
replace_color_codes opponent_weapon_type_clr;
#if { "$opponent_weapon_type" == "no opponent" } {
#var {opponent_weapon_type} {none};
#var {opponent_weapon_type_clr} {none};
};
};

#elseif { "%0" == "OPPONENT_WEAPON_OFFH" } {
#var {opponent_weapon_offh} {%1};
strip_color_codes opponent_weapon_offh;
#var {opponent_weapon_offh_clr} {%1};
replace_color_codes opponent_weapon_offh_clr;
#if { "$opponent_weapon_offh" == "no opponent" } {
#var {opponent_weapon_offh} {none};
#var {opponent_weapon_offh_clr} {none};
};
};

#elseif { "%0" == "OPPONENT_COMBAT_STYLE" } {
#var {opponent_combat_style} {%1};
#if { "$opponent_combat_style" != "no opponent" } {
#var state fighting;
};
#if { "$opponent_combat_style" == "no opponent" && "$state" == "fighting" } {
#var state standing;
};
strip_color_codes opponent_combat_style;
#var {opponent_combat_style_clr} {%1};
replace_color_codes opponent_combat_style_clr;
#if { "$opponent_combat_style" == "no opponent" } {
#var {opponent_combat_style} {none};
#var {opponent_combat_style_clr} {none};
};
};

#elseif { "%0" == "CHARACTER_NAME" } {
#var {character_name} {%1};
#if { "$room_exits" == "" } {
#var show_exits {It's time to wake up again};
#var state sleeping;
LOG_FIRST;
};
};

#elseif { "%0" == "ROOM_EXITS" } {
#var {room_exits} {%1};
#foreach {*room_exits[]} {list_exits} {#var new {$new $list_exits}};
#var {list_exits} {$new};
#var {new} {[Exits:};
#var {show_exits} {$list_exits]};
#if { "$room_exits" == "" } {
#var {show_exits} {unknown};
};
};

#elseif { "%0" == "ROOM_TERRAIN" } {
#var {room_terrain} {%1};
#if { "$room_terrain" == "" } {
#var {room_terrain} {unknown};
};
};

#nop stuff to prepare for first/second/third.log;
#math {check_xptnl} {$experience_tnl - $experience};
#if { $check_xptnl > 0 } { #var {xptnl} {$check_xptnl} };
#if {"$opponent_name" == ""} {#var opponent_name None.};

#nop calculate life, mana, move percentages.;
#math {mylife} { 100 * $health / $health_max };
#math {mymana} { 100 * $mana / $mana_max };
#math {mymove} { 100 * $movement / $movement_max };

#nop colorize my hp/mp/mv percent.;
#if { $mylife > 80 } { #var {mylife_clr} {<g13>} };
#elseif { $mylife > 59 && $mylife < 81 } { #var {mylife_clr} {<088>} };
#elseif { $mylife < 30 } { #var {mylife_clr} {<118>} };
#elseif { $mylife < 60 } { #var {mylife_clr} {<138>} };

#if { $mymana > 80 } { #var {mymana_clr} {<g13>} };
#elseif { $mymana > 59 && $mymana < 81 } { #var {mymana_clr} {<088>} };
#elseif { $mymana < 30 } { #var {mymana_clr} {<118>} };
#elseif { $mymana < 60 } { #var {mymana_clr} {<138>} };

#if { $mymove > 80 } { #var {mymove_clr} {<g13>} };
#elseif { $mymove > 59 && $mymove < 81 } { #var {mymove_clr} {<088>} };
#elseif { $mymove < 30 } { #var {mymove_clr} {<118>} };
#elseif { $mymove < 60 } { #var {mymove_clr} {<138>} };

#if { $tick < 7 } { #var tick_clr {<018>} };
#if { $tick < 15 && $tick > 6 } { #var tick_clr {<038>} };
#if { $tick > 14 } { #var tick_clr {<088>} };

LOG_FIRST;
LOG_SECOND;
LOG_THIRD;
LOG_FOURTH;
LOG_TOPLEFT;
LOG_BOTTOMLEFT;

#sys {tmux set -g status-right ""};
#sys {tmux set -g status-left " $room_name [$area_name]"};
};

#alias {LOG_FIRST} {
#line log first.log {
\n
$mylife_clr$mylife% life<088> | $mymana_clr$mymana% mana<088> | $mymove_clr$mymove% move<088>\n
\n
<088>$weapon_type<g13>/<088>$weapon_offh <g13>[<088>$combat_style_clr<g13>]<088>\n
<g13>The $race $class is $state<088>\n
$gold gold <g13>|<088> $gentime\n
<g13>$show_exits<088>\n
};
};

#alias {LOG_SECOND} {
#line log second.log {
\n
<088>$opponent_health% $opponent_name <g13>|<088> $tick_clr$hour<088> <g13>|<088> $adrenaline \n
\n
$opponent_weapon_type_clr<g13>/<088>$opponent_weapon_offh_clr <g13>[<088>$opponent_combat_style_clr<g13>]<088> $xptnl tnl \n
<g13>H:$hunger T:$thirst Overlord: $overlord%<088>\n
You are in the $room_terrain\n
<g13>$weight/$weight_max lbs <088>|<g13> $wimpy/$health_max hp wimpy \n
};
};

#alias {LOG_THIRD} {
#line log third.log {
\n
Hit: $hitroll <g13>|<088> Dam: $damroll <g13>|<088> Rank: $level\n
\n
<g13>Armor<088> vs Pierce: $ac_pierce <g13>Saving Throws<088>
\n vs Bash: $ac_bash Afflictive: $saving_aff
\n vs Slash: $ac_slash Maledictive: $saving_mal
\n vs Magic $ac_magic Mental: $saving_men\n
};
};

#alias {LOG_FOURTH} {
#line log fourth.log {
\n
Streng: $str<g13>|<088>$str_perm\n
Intell: $int<g13>|<088>$int_perm\n
Wisdom: $wis<g13>|<088>$wis_perm\n
Dexter: $dex<g13>|<088>$dex_perm\n
Consti: $con<g13>|<088>$con_perm\n
};
};

#alias {LOG_TOPLEFT} {
#line log topleft.log {
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
};
};

#alias {LOG_BOTTOMLEFT} {
#line log bottomleft.log {
\n
\n
\n
\n
\n
\n
};
};

#EVENT {IAC SB MSDP IAC SE}
{
#if {&{room_exits} == 0}
{
#return
};
}

#EVENT {IAC SB MSDP ROOM}
{
#variable {ROOM} {%1};
}

#ALIAS {report}
{
#nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
#variable result {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]REPORT};
#foreach {*REPORTABLE_VARIABLES[]} {tmp}
{
#variable result {$result$MSDP[VAL]$tmp}
};
#send {$result$TELNET[IAC]$TELNET[SE]\}
}

#nop SECTION: CONNECTION;

#EVENT {SESSION DISCONNECTED} {
ARTT_SHUTDOWN;
#end;
};

#alias {ARTT_SHUTDOWN} {
#sys {tmux killp -a -t 2;};
#sys {rm map.log;};
#sys {rm first.log;};
#sys {rm second.log;};
#sys {rm third.log;};
#sys {rm fourth.log;};
#sys {rm bottomleft.log;};
#sys {rm topleft.log;};
#sys {rm topright.log;};
#sys {rm blank.log;};
};

#ses abandonedrealms abandonedrealms.com 9000;

#nop enter your characters name;
#act {By what name do you wish to be remembered?} {
#if { "$autologin" == "true" } {$charname;#line gag};
};
#act {By what name do you wish to be known?} {
#if { "$autologin" == "true" } {$charname;#line gag};
};

#act {Password:} {
ARTT_STARTUP;
LOAD_TINTIN_MAP;
#if { "$autologin" == "true" } {$password;#line gag};
};

#alias {ARTT_STARTUP} {
#split 0 1;
#Show { } {-2};
#screen get ROWS rows;
#screen get COLS cols;
#screen get HEIGHT height;
#screen get WIDTH width;
#var {new} {[Exits:};
};

#nop MAPPING OMG!
#nop ***********

#map read ar.map;

#event {VARIABLE UPDATED room_vnum} {

};

#event {MAP ENTER MAP} { #var map_is_loaded true; }

#script {map_width} {tmux display -p -t 3 '#{pane_width}'}
#script {map_height} {tmux display -p -t 3 '#{pane_height}'}

#event {MAP ENTER ROOM} { #if { "$tintinmap" == "true" && "$map_is_loaded" == "true" } { #map map $map_height[1] $map_width[1] append topright.log}; }

#alias {makemap} {
#if { "$makemap" != "true" } {
#var makemap true;
#echo {start mapping!};
#map flag static off; } {
#var makemap false;
#echo {done mapping!\nmap saved!};
#map flag static on;
#map write ar.map;
};
};

#alias {LOAD_TINTIN_MAP} {
#if { "$tintinmap" == "true" && "$map_is_loaded" != "true" } {
#map goto $room_name;
#map get roomid room_id;
#if { "$room_id" != "$room_vnum" } {
#map leave;
#var map_is_loaded false;
#delay {1} {
#show {<fac>Something went wrong loading tintin map.<088>};
#Show {<fac>Try moving about slowly.<088>};
};
} {
#delay {1} {#show {<cfa>Tintin++ map loaded correctly!<088>};#map map $map_height[1] $map_width[1] append topright.log;}};
};
};

#act {[Exits: %1]} {

LOAD_TINTIN_MAP;

#if { "$makemap" == "true" } {

#map set roomarea $area_name;
#map set roomname $room_name;
#map set roomdesc $room_desc;
#map set roomid $room_vnum;

#if { "$room_terrain" == "cave %D" } {
#map set roomsymbol <108>o;
#map set roomcolor <108>;
};
#elseif { "$room_terrain" == "inside %D" } {
#map set roomsymbol <078>*;
#map set roomcolor <078>;
};
#elseif { "$room_terrain" == "field %D" } {
#map set roomsymbol <028>o;
#map set roomcolor <028>;
};
#elseif { "$room_terrain" == "hills %D" } {
#map set roomsymbol <028>z;
#map set roomcolor <028>;
};
#elseif { "$room_terrain" == "road %D" } {
#map set roomsymbol <108>+;
#map set roomcolor <108>;
};
#elseif { "$room_terrain" == "forest %D" } {
#map set roomsymbol <028>f;
#map set roomcolor <028>;
};
#elseif { "$room_terrain" == "city %D" } {
#map set roomsymbol <108>+;
#map set roomcolor <108>;
};
#elseif { "$room_terrain" == "mountain %D" } {
#map set roomsymbol <038>x;
#map set roomcolor <038>;
};
#elseif { "$room_terrain" == "pond %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "lagoon %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "rapids %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "river %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "ocean %D" } {
#map set roomsymbol <048>~;
#map set roomcolor <048>;
};
#elseif { "$room_terrain" == "underwater %D" } {
#map set roomsymbol <048>~;
#map set roomcolor <048>;
};
#elseif { "$room_terrain" == "sand %D" } {
#map set roomsymbol <038>!;
#map set roomcolor <038>;
};
};
};

#alias {mapdown} {
#map set roomcolor <048>;
};

#alias {mapup} {
#map set roomcolor <158>;
};

#alias {mapwater} {
#map set roomsymbol <078>W;
};

#alias {mapshop} {
#map set roomnote shop;
#map set roomsymbol <038>S;
};

#alias {mapfood} {
#map set roomnote food;
#map set roomsymbol <038>F;
};

#alias {mapnexus} {
#map set roomnote nexus;
#map set roomsymbol <078>N;
};

#alias {mapbank} {
#map set roomnote bank;
#map set roomsymbol <078>B;
};

#alias {mapguild} {
#map set roomnote guild;
#map set roomsymbol <178>G;
};

#alias {maptemple} {
#map set roomnote temple;
#map set roomsymbol <178>T;
};


ar.tmux.conf
# reload config file (change file location to your the tmux.conf you want to use)

bind r source-file ~/.tmux.conf

# panes
set -g pane-border-style 'fg=black'
set -g pane-active-border-style 'fg=black'

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style 'fg=white'

set -g status-left ''
set -g status-left-length 100

set -g status-right-style 'fg=white'
set -g status-right ''
set -g status-right-length 100

setw -g window-status-current-style 'fg=gray bg=black'
setw -g window-status-current-format ''

setw -g window-status-style 'fg=red bg=black'
setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '

setw -g window-status-bell-style 'fg=yellow bg=red bold'


ar.sh
tmux killp -a -t 0

> fourth.log
tmux split -v -l 8 'tail -f fourth.log'
> third.log
tmux split -h -b -l 135 'tail -f third.log'
> second.log
tmux split -h -b -l 90 'tail -f second.log'
> first.log
tmux split -h -b -l 50 'tail -f first.log'
> bottomleft.log
tmux split -h -b -l 11 'tail -f bottomleft.log'
tmux selectp -t 0
> topleft.log
tmux split -h -b -l 11 'tail -f topleft.log'
> map.log
tmux split -v -l 11 'tail -f map.log'
tmux selectp -t 2
> topright.log
tmux split -h -l 80 'tail -f topright.log'
tmux selectp -t 2
tmux source ar.tmux.conf
tt++ ar.tt
deauja
Avatar
Posts: 162
2/1/2025, 12:47:23 AM
https://i.postimg.cc/T2BzFMhr/2025-01-31-153928-1920x1080-scrot.png
Image
ar.map
C 50000


V 2020

CAVOID <118>
CBACKGROUND
CBLOCK <218>
CEXITS <278>
CFOG <148>
CHIDE <168>
CINVISIBLE <208>
CPATHS <138>
CROOMS <178>
CSYMBOLS <128>
CUSER <258>

F 9228

G 0

I 1

L {ASCII NESW LINE} {NO EXITS} {x}
L {ASCII NESW LINE} {N} {o}
L {ASCII NESW LINE} { E} {o}
L {ASCII NESW LINE} {N E} {+}
L {ASCII NESW LINE} { S} {o}
L {ASCII NESW LINE} {N S} {|}
L {ASCII NESW LINE} { E S} {+}
L {ASCII NESW LINE} {N E S} {+}
L {ASCII NESW LINE} { W} {o}
L {ASCII NESW LINE} {N W} {+}
L {ASCII NESW LINE} { E W} {-}
L {ASCII NESW LINE} {N E W} {+}
L {ASCII NESW LINE} { S W} {+}
L {ASCII NESW LINE} {N S W} {+}
L {ASCII NESW LINE} { E S W} {+}
L {ASCII NESW LINE} {N E S W} {+}
L {ASCII NESW MISC} {USER} {x}
L {ASCII NESW MISC} {DIR UNKNOWN} {+}
L {ASCII NESW MISC} {N S VOID} {|}
L {ASCII NESW MISC} {E W VOID} {-}
L {ASCII NESW CURVED} {N E CURVED} {+}
L {ASCII NESW CURVED} {S E CURVED} {+}
L {ASCII NESW CURVED} {S W CURVED} {+}
L {ASCII NESW CURVED} {N W CURVED} {+}
L {ASCII NESW DIRS} {DIR N} {|}
L {ASCII NESW DIRS} {DIR NE} {/}
L {ASCII NESW DIRS} {DIR E} {-}
L {ASCII NESW DIRS} {DIR SE} {\\}
L {ASCII NESW DIRS} {DIR S} {|}
L {ASCII NESW DIRS} {DIR SW} {/}
L {ASCII NESW DIRS} {DIR W} {-}
L {ASCII NESW DIRS} {DIR NW} {\\}
L {NESW LINE} {NO EXITS} {\u2B51}
L {NESW LINE} {N} {\u2579}
L {NESW LINE} { E} {\u257A}
L {NESW LINE} {N E} {\u2517}
L {NESW LINE} { S} {\u257B}
L {NESW LINE} {N S} {\u2503}
L {NESW LINE} { E S} {\u250F}
L {NESW LINE} {N E S} {\u2523}
L {NESW LINE} { W} {\u2578}
L {NESW LINE} {N W} {\u251B}
L {NESW LINE} { E W} {\u2501}
L {NESW LINE} {N E W} {\u253B}
L {NESW LINE} { S W} {\u2513}
L {NESW LINE} {N S W} {\u252B}
L {NESW LINE} { E S W} {\u2533}
L {NESW LINE} {N E S W} {\u254B}
L {NESW MISC} {USER} {\u2B51}
L {NESW MISC} {DIR UNKNOWN} {\u2012}
L {NESW MISC} {N S VOID} {\u2507}
L {NESW MISC} {E W VOID} {\u254D}
L {NESW CURVED} {N E CURVED} {\u2570}
L {NESW CURVED} {S E CURVED} {\u256D}
L {NESW CURVED} {S W CURVED} {\u256E}
L {NESW CURVED} {N W CURVED} {\u256F}
L {NESW DIRS} {DIR N} {\u2191}
L {NESW DIRS} {DIR NE} {\u2B08}
L {NESW DIRS} {DIR E} {\u2B95}
L {NESW DIRS} {DIR SE} {\u2b0A}
L {NESW DIRS} {DIR S} {\u2193}
L {NESW DIRS} {DIR SW} {\u2B0B}
L {NESW DIRS} {DIR W} {\u2B05}
L {NESW DIRS} {DIR NW} {\u2B09}
L {MUDFONT NWS} {NO EXITS} {\u28CF}
L {MUDFONT NWS} {N} {\u28C7}
L {MUDFONT NWS} { NW} {\u28CE}
L {MUDFONT NWS} {N NW} {\u28C6}
L {MUDFONT NWS} { W} {\u28C9}
L {MUDFONT NWS} {N W} {\u28C1}
L {MUDFONT NWS} { NW W} {\u28C8}
L {MUDFONT NWS} {N NW W} {\u28C0}
L {MUDFONT NWS} { SW} {\u288F}
L {MUDFONT NWS} {N SW} {\u2887}
L {MUDFONT NWS} { NW SW} {\u288E}
L {MUDFONT NWS} {N NW SW} {\u2886}
L {MUDFONT NWS} { W SW} {\u2889}
L {MUDFONT NWS} {N W SW} {\u2881}
L {MUDFONT NWS} { NW W SW} {\u2888}
L {MUDFONT NWS} {N NW W SW} {\u2880}
L {MUDFONT NWS} { S} {\u284F}
L {MUDFONT NWS} {N S} {\u2847}
L {MUDFONT NWS} { NW S} {\u284E}
L {MUDFONT NWS} {N NW S} {\u2846}
L {MUDFONT NWS} { W S} {\u2849}
L {MUDFONT NWS} {N W S} {\u2841}
L {MUDFONT NWS} { NW W S} {\u2848}
L {MUDFONT NWS} {N NW W S} {\u2880}
L {MUDFONT NWS} { SW S} {\u280F}
L {MUDFONT NWS} {N SW S} {\u2807}
L {MUDFONT NWS} { NW SW S} {\u280E}
L {MUDFONT NWS} {N NW SW S} {\u2806}
L {MUDFONT NWS} { W SW S} {\u2809}
L {MUDFONT NWS} {N W SW S} {\u2801}
L {MUDFONT NWS} { NW W SW S} {\u2808}
L {MUDFONT NWS} {N NW W SW S} {\u2800}
L {MUDFONT NES} {NO EXITS} {\u28F9}
L {MUDFONT NES} {N} {\u28F8}
L {MUDFONT NES} { NE} {\u28F1}
L {MUDFONT NES} {N NE} {\u28F0}
L {MUDFONT NES} { W} {\u28C9}
L {MUDFONT NES} {N W} {\u28C8}
L {MUDFONT NES} { NE W} {\u28C2}
L {MUDFONT NES} {N NE W} {\u28C0}
L {MUDFONT NES} { SE} {\u2879}
L {MUDFONT NES} {N SE} {\u2878}
L {MUDFONT NES} { NE SE} {\u2871}
L {MUDFONT NES} {N NE SE} {\u2870}
L {MUDFONT NES} { W SE} {\u2849}
L {MUDFONT NES} {N W SE} {\u2848}
L {MUDFONT NES} { NE W SE} {\u2842}
L {MUDFONT NES} {N NE W SE} {\u2840}
L {MUDFONT NES} { S} {\u28B9}
L {MUDFONT NES} {N S} {\u28B8}
L {MUDFONT NES} { NE S} {\u28B1}
L {MUDFONT NES} {N NE S} {\u28B0}
L {MUDFONT NES} { W S} {\u2889}
L {MUDFONT NES} {N W S} {\u2888}
L {MUDFONT NES} { NE W S} {\u2882}
L {MUDFONT NES} {N NE W S} {\u2880}
L {MUDFONT NES} { SE S} {\u2839}
L {MUDFONT NES} {N SE S} {\u2838}
L {MUDFONT NES} { NE SE S} {\u2831}
L {MUDFONT NES} {N NE SE S} {\u2830}
L {MUDFONT NES} { W SE S} {\u2809}
L {MUDFONT NES} {N W SE S} {\u2808}
L {MUDFONT NES} { NE W SE S} {\u2802}
L {MUDFONT NES} {N NE W SE S} {\u2800}
L {MUDFONT VOID NWS} {NO EXITS} {\u2830}
L {MUDFONT VOID NWS} {N} {\u2838}
L {MUDFONT VOID NWS} { NW} {\u2831}
L {MUDFONT VOID NWS} {N NW} {\u2839}
L {MUDFONT VOID NWS} { W} {\u2836}
L {MUDFONT VOID NWS} {N W} {\u283E}
L {MUDFONT VOID NWS} { NW W} {\u2837}
L {MUDFONT VOID NWS} {N NW W} {\u283F}
L {MUDFONT VOID NWS} { SW} {\u2870}
L {MUDFONT VOID NWS} {N SW} {\u2878}
L {MUDFONT VOID NWS} { NW SW} {\u2871}
L {MUDFONT VOID NWS} {N NW SW} {\u2879}
L {MUDFONT VOID NWS} { W SW} {\u2876}
L {MUDFONT VOID NWS} {N W SW} {\u287E}
L {MUDFONT VOID NWS} { NW W SW} {\u2877}
L {MUDFONT VOID NWS} {N NW W SW} {\u287F}
L {MUDFONT VOID NWS} { S} {\u28B0}
L {MUDFONT VOID NWS} {N S} {\u28B8}
L {MUDFONT VOID NWS} { NW S} {\u28B1}
L {MUDFONT VOID NWS} {N NW S} {\u28B9}
L {MUDFONT VOID NWS} { W S} {\u28B6}
L {MUDFONT VOID NWS} {N W S} {\u28BE}
L {MUDFONT VOID NWS} { NW W S} {\u28B7}
L {MUDFONT VOID NWS} {N NW W S} {\u28BF}
L {MUDFONT VOID NWS} { SW S} {\u28F0}
L {MUDFONT VOID NWS} {N SW S} {\u28F8}
L {MUDFONT VOID NWS} { NW SW S} {\u28F1}
L {MUDFONT VOID NWS} {N NW SW S} {\u28F9}
L {MUDFONT VOID NWS} { W SW S} {\u28F6}
L {MUDFONT VOID NWS} {N W SW S} {\u28FE}
L {MUDFONT VOID NWS} { NW W SW S} {\u28F7}
L {MUDFONT VOID NWS} {N NW W SW S} {\u28FF}
L {MUDFONT VOID NES} {NO EXITS} {\u2806}
L {MUDFONT VOID NES} {N} {\u2807}
L {MUDFONT VOID NES} { NE} {\u280E}
L {MUDFONT VOID NES} {N NE} {\u280F}
L {MUDFONT VOID NES} { W} {\u2836}
L {MUDFONT VOID NES} {N W} {\u2837}
L {MUDFONT VOID NES} { NE W} {\u283E}
L {MUDFONT VOID NES} {N NE W} {\u283F}
L {MUDFONT VOID NES} { SE} {\u2886}
L {MUDFONT VOID NES} {N SE} {\u2887}
L {MUDFONT VOID NES} { NE SE} {\u288E}
L {MUDFONT VOID NES} {N NE SE} {\u288F}
L {MUDFONT VOID NES} { W SE} {\u28B6}
L {MUDFONT VOID NES} {N W SE} {\u28B7}
L {MUDFONT VOID NES} { NE W SE} {\u28BE}
L {MUDFONT VOID NES} {N NE W SE} {\u28BF}
L {MUDFONT VOID NES} { S} {\u2846}
L {MUDFONT VOID NES} {N S} {\u2847}
L {MUDFONT VOID NES} { NE S} {\u284E}
L {MUDFONT VOID NES} {N NE S} {\u284F}
L {MUDFONT VOID NES} { W S} {\u2876}
L {MUDFONT VOID NES} {N W S} {\u2877}
L {MUDFONT VOID NES} { NE W S} {\u287E}
L {MUDFONT VOID NES} {N NE W S} {\u287F}
L {MUDFONT VOID NES} { SE S} {\u28C6}
L {MUDFONT VOID NES} {N SE S} {\u28C7}
L {MUDFONT VOID NES} { NE SE S} {\u28CE}
L {MUDFONT VOID NES} {N NE SE S} {\u28CF}
L {MUDFONT VOID NES} { W SE S} {\u28F6}
L {MUDFONT VOID NES} {N W SE S} {\u28F7}
L {MUDFONT VOID NES} { NE W SE S} {\u28FE}
L {MUDFONT VOID NES} {N NE W SE S} {\u28FF}
L {MUDFONT CURVED} {N E} {\u2818}
L {MUDFONT CURVED} {S E} {\u28A0}
L {MUDFONT CURVED} {S W} {\u2844}
L {MUDFONT CURVED} {N W} {\u2803}
L {UNICODE GRAPHICS} {NO DIAGONAL} {}
L {UNICODE GRAPHICS} {SE} {\u2E0C}
L {UNICODE GRAPHICS} {NE} {\u2E1D}
L {UNICODE GRAPHICS} {SE NE} {>}
L {UNICODE GRAPHICS} {SW} {\u2E0D}
L {UNICODE GRAPHICS} {SE SW} {\u2E0C\u2E0D}
L {UNICODE GRAPHICS} {NE SW} {\uFF0F}
L {UNICODE GRAPHICS} {SE NE SW} {>\u2E0D}
L {UNICODE GRAPHICS} {NW} {\u2E1C}
L {UNICODE GRAPHICS} {SE NW} {\uFF3C}
L {UNICODE GRAPHICS} {NE NW} {\u2E1D\u2E1C}
L {UNICODE GRAPHICS} {SE NE NW} {>\u2E1C}
L {UNICODE GRAPHICS} {SW NW} {<}
L {UNICODE GRAPHICS} {SE SW NW} {\u2E0C<}
L {UNICODE GRAPHICS} {NE SW NW} {\u2E1D<}
L {UNICODE GRAPHICS} {SE NE SW NW} {><}
L {UNICODE GRAPHICS} {D} {-}
L {UNICODE GRAPHICS} {N} {\u2191}
L {UNICODE GRAPHICS} {S} {\u2193}
L {UNICODE GRAPHICS} {N S} {\u2502}
L {UNICODE GRAPHICS} {U} {+}
L {UNICODE GRAPHICS} {E} {\U01F806}
L {UNICODE GRAPHICS} {W} {\U01F804}
L {UNICODE GRAPHICS} {E W} {\u2500}
L {UNICODE GRAPHICS} {ROOM L} {[}
L {UNICODE GRAPHICS} {ROOM L CURVED} {(}
L {UNICODE GRAPHICS} {ROOM R} {]}
L {UNICODE GRAPHICS} {ROOM R CURVED} {)}




T {} { } {}



R { 1} {0} {<108>} {South Square} {<108>+} {You are at the South Square of Seringale. It is gloomy and dim here. The square is a tiny opening in between a few broken down buildings. The air is stuffy and pungent from the various trash lying all over the ground. You see the Main Street to the north and the south, and the South Road to the east and west. } {Seringale} {} {} {} {1.000} {4432}
E { 2} {e} {e} {2} {0} {} {1.000} {} {0.00}
E { 3} {w} {w} {8} {0} {} {1.000} {} {0.00}
E { 4} {n} {n} {1} {0} {} {1.000} {} {0.00}
E { 5} {s} {s} {4} {0} {} {1.000} {} {0.00}

R { 2} {0} {<108>} {The South Road} {<108>+} {You are on the South Road of Seringale. It is gloomy and dim here. All around you are beggars and panhandlers dressed in filthy clothing. The buildings surrounding you are old and run down. They seem like they have been made ages ago. The once bright red bricks that the buildings are made of are now only pale, brittle chunks barely holding the walls of the buildings together. The South Road continues to the east and west. } {Seringale} {} {} {} {1.000} {4606}
E { 1} {w} {w} {8} {0} {} {1.000} {} {0.00}

R { 3} {0} {<108>} {The South Road} {<108>+} {You are on the South Road of Seringale. It is gloomy and dim here. All around you are beggars and panhandlers dressed in filthy clothing. The buildings surrounding you are old and run down. They seem like they have been made ages ago. The once bright red bricks that the buildings are made of are now only pale, brittle chunks barely holding the walls of the buildings together. } {Seringale} {} {} {} {1.000} {4604}
E { 1} {e} {e} {2} {0} {} {1.000} {} {0.00}

R { 4} {0} {<108>} {The Main Street} {<108>+} {You are on the Main Street of Seringale. It is a wide street with lots of space to both sides. There are tons of people rushing from one place to another, minding their own business. You see the Main Street continues to the north, entrances to taverns on both sides of the street and the South Square to the south. } {Seringale} {} {} {} {1.000} {4449}
E { 1} {s} {s} {4} {0} {} {1.000} {} {0.00}
E { 8} {w} {w} {8} {0} {} {1.000} {} {0.00}
E { 9} {e} {e} {2} {0} {} {1.000} {} {0.00}

R { 5} {0} {<108>} {The South Main Street} {<108>+} {You are on the Main Street of Seringale. It is a wide street with lots of space to both sides. Although the street is wide, it is very poorly lit, so it is very gloomy and dim here. All around you are beggars and panhandlers dressed in filthy clothing. The buildings surrounding you are old and run down. They seem like they have been made ages ago. The once bright red bricks that the buildings are made of are now only pale, brittle chunks barely holding the walls of the buildings together. You see the South Square to the north, entrances to taverns on both sides of the street and the Main Street continues to the south. } {Seringale} {} {} {} {1.000} {4450}
E { 1} {n} {n} {1} {0} {} {1.000} {} {0.00}
E { 6} {w} {w} {8} {0} {} {1.000} {} {0.00}
E { 7} {e} {e} {2} {0} {} {1.000} {} {0.00}

R { 6} {0} {<078>} {The Anxious Wench} {<038>S} {You are inside one of the inns of Seringale. The room is filled with many ordinary tables with matching stools. Colorful carpets cover the floor of the inn in a clash of shades, showing off a desperate attempt at decoration. Girls with the same clashing colored uniforms hustle throughout the inn wearing big smiles, serving customers to their satisfaction. A door to the east leads out of the inn and into the streets of Seringale. } {Seringale} {shop} {} {} {1.000} {4574}
E { 5} {e} {e} {2} {0} {} {1.000} {} {0.00}

R { 7} {0} {<078>} {The Wicked Ale} {<038>S} {You are inside one of the inns of Seringale. The large room is filled with chairs of foreign design. There are weird looking gadgets hanging on the walls of the inn, bewildering your mind with questions of their use. A large bar stands at the far end of the room. Huge mugs hangs down on the frames of the bar, waiting to be used by the patrons to hold the house selection of ales. A door to the west leads out of the inn on to the Main Street. } {Seringale} {shop} {} {} {1.000} {4573}
E { 5} {w} {w} {8} {0} {} {1.000} {} {0.00}

R { 8} {0} {<078>} {The White Goose} {<038>S} {You are inside The White Goose, one of the inns of Seringale. A large sign with a picture of a white goose hangs above your head as you enter the inn through its entrance. The walls around you are painted white. A large gray colored rug lies on the ground, covering most of the floor of the inn. Large brass oil lamps hang on the walls around you, giving light to every corner of the room. This place is kept very clean! Obviously the innkeeper of this inn is very conscientious. You can leave the inn to the east. } {Seringale} {shop} {} {} {1.000} {4537}
E { 4} {e} {e} {2} {0} {} {1.000} {} {0.00}

R { 9} {0} {<078>} {The Lord's Grace} {<038>S} {Huge slabs of writing covers the walls around you inside this inn. After reading a few of the slabs you realize that they are congratulatory messages and benedictions sent by the royal family that once existed in the land of Seringale. The slabs from the royal family are old and worn out at the corners, reflecting the condition of the rest of this inn. The walls of the inn are gray and aged. The rug on the floor was once royal purple, but now has faded and laces with mixed shades of gray and white. The wooden bar of the inn is old and covered with small cracks at many places. The door of this inn lies to the west. } {Seringale} {shop} {} {} {1.000} {4538}
E { 4} {w} {w} {8} {0} {} {1.000} {} {0.00}
deauja
Avatar
Posts: 162
2/4/2025, 6:12:31 PM
ARTT 1.3

some major bug fixes

layed foundation for mapping but no longer focusing on tintin map as much

set lots of variables for a pure abandoned realms experience if you don't like tagged data

godspeed.


edit - fixed bug causing double prompt while map is on 02/05/2025

ar.tt
#nop abandonedrealms.com


#nop SECTION: AUTO LOGIN
#var charname {};
#var password {};

#var autologin false;

#nop formatting combat;
#var condition false;
#var tagcombat false;
#var bunchdata false;

#nop ON MAPPING
#nop ##########################################################################
#nop # set 'tintinmap' variable to 'true' and reload, go to south square. #
#nop # use the 'makemap' alias below to enter/exit map editing mode. #
#nop # use 'mapguild, mapshop, etc cmds below to get 'G' and 'S' symbols. #
#nop ##########################################################################
#var tintinmap false;

#nop SECTION: BUNCHDATA - concatenate fighting data (remove empty lines).;
#act {%0} {
#if { "%0" == "" && "$opponent_name" != "None." && "$opponent_name" != "" } {
#if { "$bunchdata" == "true" } {#line gag};
};
} {9};

#nop SECTION: CONDITION
#nop if condition variable == true, show opponent condition. if condition variable == false, hide opponent condition.
#if { "$condition" == "false" } {
#nop ########################### SECTION ONE ########################################################################;
#act {%1 %i$opponent_name has some small wounds and bruises.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name has a few scratches.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name is in %2 condition.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name looks pretty hurt.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name has quite a few wounds.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name has some big nasty wounds and scratches.$} { #if { "$state" == "fighting" } { #line gag } };
#nop ########################### SECTION ONE T00 #####################################################################;
#act {%1 %i$opponent_name %2 has some small wounds and bruises.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name %2 has a few scratches.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name %2 is in %3 condition.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name %2 looks pretty hurt.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name %2 has quite a few wounds.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%1 %i$opponent_name %2 has some big nasty wounds and scratches.$} { #if { "$state" == "fighting" } { #line gag } };
#nop ############################ SECTION TWO ########################################################################;
#act {%i$opponent_name %1 has some small wounds and bruises.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name %1 has a few scratches.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name %1 is in %2 condition.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name %1 looks pretty hurt.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name %1 has quite a few wounds.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name %1 has some big nasty wounds and scratches.$} { #if { "$state" == "fighting" } { #line gag } };
#nop ########################### SECTION THREE #######################################################################;
#act {%i$opponent_name, %1 has some small wounds and bruises.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name, %1 has a few scratches.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name, %1 is in %2 condition.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name, %1 looks pretty hurt.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name, %1 has quite a few wounds.$} { #if { "$state" == "fighting" } { #line gag } };
#act {%i$opponent_name, %1 has some big nasty wounds and scratches.$} { #if { "$state" == "fighting" } { #line gag } };
};

#nop SECTION: TAGCOMBAT;
#if { "$tagcombat" == "true" } {
#sub {%1 {miss|scratch|graze|hit|injure|wound|maul|decimate|devastate|maim|MUTILATE|DISEMBOWEL|DISMEMBER|MASSACRE|MANGLE|DEMOLISH|DEVASTATE|OBLITERATE|ANNIHILATE|ERADICATE|misses|scratches|grazes|hits|injures|wounds|mauls|decimates|devastates|maims|MUTILATES|DISEMBOWELS|DISMEMBERS|MASSACRES|MANGLES|DEMOLISHES|DEVASTATES|OBLITERATES|ANNIHILATES|ERADICATES} %3{.|!}} {[ <028>OK<088> ] %1 %2 %3%4};

#nop PARRY;

#sub {%1 thrusts your %2 aside in a skillful parry.} {[ <028>OK<088> ] %1 thrusts your %2 aside in a skillful parry.};
#sub {You dual parry %1.} {[ <028>OK<088> ] You dual parry %1.};
#sub {%1 weapon advantage overcomes your parry attempt.} {[ <028>OK<088> ] %1 weapon advantage overcomes your parry attempt.};
#sub {Your weapon advantage overcomes %1 parry attempt.} {[ <028>OK<088> ] Your weapon advantage overcomes %1 parry attempt.};
#sub {A quick swipe of your off-hand weapon parries %1 aside easily.} {[ <028>OK<088> ] A quick swipe of your off-hand weapon parries %1 aside easily.};
#sub {You deflect %1 aside in an ungraceful parry.} {[ <028>OK<088> ] You deflect %1 aside in an ungraceful parry.};
#sub {^You parry %1 with an easy flourish.} {[ <028>OK<088> ] You parry %1 with an easy flourish.};
#sub {%1 deflects your %2 aside in an ungraceful parry.} {[ <028>OK<088> ] %1 deflects your %2 aside in an ungraceful parry.};
#sub {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 awkwardly parries your %3 with a loud clang.} {[ <028>OK<088> ] %1%2 awkwardly parries your %3 with a loud clang.};
#sub {You thrust %1 aside in a skillful parry.} {[ <028>OK<088> ] You thrust %1 aside in a skillful parry.};
#sub {You awkwardly parry %1 with a loud clang.} {[ <028>OK<088> ] You awkwardly parry %1 with a loud clang.};
#sub {%1 parries your %2.} {[ <028>OK<088> ] %1 parries your %2.};
#sub {You parry %1.} {[ <028>OK<088> ] You parry %1.};

#nop DODGE;

#sub {You deftly perform a counterbalance evasion.} {[ <028>OK<088> ] You deftly perform a counterbalance evasion.};
#sub {%1 can't dodge away from the reach of %2 fast enough.} {[ <028>OK<088> ] %1 can't dodge away from the reach of %2 fast enough.};
#sub {%1 dodges your %2.} {[ <028>OK<088> ] %1 dodges your %2.};
#sub {You manage to dodge %1 with a lot of effort.} {[ <028>OK<088> ] You manage to dodge %1 with a lot of effort.};
#sub {^{A|The|%i$opponent_name|%a%i$opponent_name}%2 stumbles and barely dodges your %2.} {[ <028>OK<088> ] %1 stumbles and barely dodges your %2.};
#sub {You dance around %1 and easily dodge it.} {[ <028>OK<088> ] You dance around %1 and easily dodge it.};
#sub {You dodge %1.} {[ <028>OK<088> ] You dodge %1.};
#sub {You nimbly dodge %1 with a practiced maneuver.} {[ <028>OK<088> ] You nimbly dodge %1 with a practiced maneuver.};
#sub {%1 dances around your %2, easily dodging it.} {[ <028>OK<088> ] %1 dances around your %2, easily dodging it.};
#sub {%1 manages to dodge your %2 with a lot of effort.} {[ <028>OK<088> ] %1 manages to dodge your %2 with a lot of effort.};
#sub {You stumble and barely manage to dodge %1.} {[ <028>OK<088> ] You stumble and barely manage to dodge %1.};
#sub {You concentrate on your combat style to prevent %1 from dodging.} {[ <028>OK<088> ] You concentrate on your combat style to prevent %1 from dodging.};
#sub {%1 concentrates on %2 combat style to prevent %3 from dodging.} {[ <028>OK<088> ] %1 concentrates on %2 combat style to prevent %3 from dodging.};
#sub {%1's weapon advantage overcomes %2's parry attempt.} {[ <028>OK<088> ] %1's weapon advantage overcomes %2's parry attempt.};
#sub {You concentrate on your combat style to inflict more damage.} {[ <028>OK<088> ] You concentrate on your combat style to inflict more damage.};

#nop SHIELD BLOCK;

#sub {%1 grips %2 shield firmly, staving off your %3.} {[ <028>OK<088> ] %1 grips %2 shield firmly, staving off your %3.};
#sub {%1 shield jolts under your %2, but holds.} {[ <028>OK<088> ] %1 shield jolts under your %2, but holds.};
#sub {%1 shield wobbles and barely deflects your %2.} {[ <028>OK<088> ] %1 shield wobbles and barely deflects your %2.};
#sub {%1 blocks your attack with %2 shield.} {[ <028>OK<088> ] %1 blocks your attack with %2 shield.};
#sub {You block %1 with your shield.} {[ <028>OK<088> ] You block %1 with your shield.};
#sub {Your shield jolts under %1, but holds.} {[ <028>OK<088> ] Your shield jolts under %1, but holds.};
#sub {Your shield wobbles and barely deflects %1.} {[ <028>OK<088> ] Your shield wobbles and barely deflects %1.};
#sub {Your shield absorbs the impact of %1 easily.} {[ <028>OK<088> ] Your shield absorbs the impact of %1 easily.};
#sub {%1's shield absorbs the impact of your %2 easily.} {[ <028>OK<088> ] %1's shield absorbs the impact of your %2 easily.};
#sub {You grip your shield firmly, staving off %1.} {[ <028>OK<088> ] You grip your shield firmly, staving off %1.};
#sub {You block %1 and attempt to strike at the brief opening.} {[ <028>OK<088> ] You block %1 and attempt to strike at the brief opening.};
#sub {%1 blocks your attack and attempts to strike at the brief opening.} {[ <028>OK<088> ] %1 blocks your attack and attempts to strike at the brief opening.};
};

#nop get characaers state i.e. sleeping/fighting.
#var state {};

#event {VARIABLE UPDATED state} {
LOG_FIRST;
#if { "$state" == "fighting" } {
#showme {You begin fighting! };
};
};

#act {^You can't see anything, you're sleeping!} {#var state sleeping};
#act {^You go to sleep in %1.} {#var state sleeping};
#act {^You go to sleep on %1.} {#var state sleeping};
#act {^You can't do that while resting.} {#var state resting};
#act {^In your dreams, or what?} {#var state sleeping};
#act {^You go to sleep.} {#var state sleeping};
#act {^You wake and stand up.} {#var state standing};
#act {^You rest.} {#var state resting};
#act {^You stop resting.} {#var state sitting};
#act {^You are already sitting down.} {#var state sitting};
#act {^You sit down.} {#var state sitting};
#act {^You stand up.} {#var state standing};
#act {^You are already standing.} {#var sate standing};
#act {^You are already resting.} {#var state resting};
#act {^You wake and sit up.} {#var state sitting};
#act {^You wake up and start resting.} {#var state resting};

#nop SECTION: MOVING AROUND

#mac {^H} {w};
#mac {^J} {s};
#mac {^K} {n};
#mac {^L} {e};
#mac {^O} {u};
#mac {^>} {d};
#mac {^M} {m};
#mac {^U} {whe};
#mac {^I} {sca};
#mac {^<} {flee};

#nop SECTION: MSDP

#EVENT {SESSION CONNECTED}
{
#variable TELNET[IAC] \xFF;
#variable TELNET[DONT] \xFE;
#variable TELNET[DO] \xFD;
#variable TELNET[WONT] \xFC;
#variable TELNET[WILL] \xFB;
#variable TELNET[SB] \xFA;
#variable TELNET[SE] \xF0;
#variable TELNET[MSDP] \x45;
#variable MSDP[VAR] \x01;
#variable MSDP[VAL] \x02;
#variable MSDP[TABLE_OPEN] \x03;
#variable MSDP[TABLE_CLOSE] \x04;
#variable MSDP[ARRAY_OPEN] \x05;
#variable MSDP[ARRAY_CLOSE] \x06;
#variable {REPORTABLE_VARIABLES}{
{AC_BASH};
{AC_MAGIC};
{AC_PIERCE};
{AC_SLASH};
{ADRENALINE};
{AFFECTS};
{AREA_NAME};
{CHANNELS};
{CHARACTER_NAME};
{CHII_BOLT};
{CLASS};
{COMBAT_STYLE};
{CON};
{CON_PERM};
{DAMROLL};
{DEX};
{DEX_PERM};
{ENERGY};
{ENERGY_MAX};
{EXPERIENCE};
{EXPERIENCE_MAX};
{EXPERIENCE_TNL};
{GOLD};
{GROUP};
{HEALTH};
{HEALTH_MAX};
{HINT};
{HITROLL};
{HUNGER};
{INT};
{INT_PERM};
{INVENTORY};
{LEVEL};
{MANA};
{MANA_MAX};
{MOVEMENT};
{MOVEMENT_MAX};
{OPPONENT_COMBAT_STYLE};
{OPPONENT_HEALTH};
{OPPONENT_HEALTH_MAX};
{OPPONENT_LEVEL};
{OPPONENT_NAME};
{OPPONENT_WEAPON_OFFH};
{OPPONENT_WEAPON_TYPE};
{OVERLORD};
{OVERLORD_NAME};
{POKER};
{POWER};
{QUESTOR};
{RACE};
{ROOM_DESC};
{ROOM_EXITS};
{ROOM_MAP};
{ROOM_NAME};
{ROOM_TERRAIN};
{ROOM_VNUM};
{SAVING_AFF};
{SAVING_MAL};
{SAVING_MEN};
{SHIELD};
{SHIELD_MAX};
{STR};
{STR_PERM};
{TANK_NAME};
{TARGET};
{THIRST};
{TITLE};
{WEAPON_OFFH};
{WEAPON_TYPE};
{WEIGHT};
{WEIGHT_MAX};
{WIMPY};
{WIS};
{WIS_PERM};
{WORLD_TIME};};
#nop Turn telnet debug on if there are problems.;
#config {debug telnet} {off};
}

#EVENT {IAC WILL MSDP}
{
#send {$TELNET[IAC]$TELNET[DO]$TELNET[MSDP]\};
report
}

#alias {replace_color_codes} {

#replace {%1} {`1} {<018>}; #nop {RED};
#replace {%1} {`2} {<028>}; #nop {GREEN};
#replace {%1} {`3} {<038>}; #nop {YELLOW};
#replace {%1} {`4} {<048>}; #nop {BLUE};
#replace {%1} {`5} {<058>}; #nop {PURPLE};
#replace {%1} {`6} {<068>}; #nop {CYAN};
#replace {%1} {`7} {<eee>}; #nop {WHITE};
#replace {%1} {`8} {<ccc>}; #nop {GRAY};
#replace {%1} {`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`!} {<118>}; #nop {RED BOLD};
#replace {%1} {`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {`\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {``} {<088>}; #nop {RESET TO DEFAULT};

};

#alias {strip_color_codes} {
#replace {%1} {`1} {};#replace {%1} {`2} {};#replace {%1} {`3} {};
#replace {%1} {`4} {};#replace {%1} {`5} {};#replace {%1} {`6} {};
#replace {%1} {`7} {};#replace {%1} {`8} {};#replace {%1} {`9} {};
#replace {%1} {`!} {};#replace {%1} {`@} {};#replace {%1} {`#} {};
#replace {%1} {`\$} {};#replace {%1} {`%} {};#replace {%1} {`^} {};
#replace {%1} {`&} {};#replace {%1} {``} {};
};

#EVENT {IAC SB MSDP} {

#nop Set all variables to lower case;
#format {test} {%l} {%0};
#variable {$test} {%1};

#if { "%0" == "ROOM_MAP" } {
#var {room_map} {%1};
replace_color_codes room_map;
#line log map.log $room_map;
LOAD_TINTIN_MAP;
};

#elseif { "%0" == "RACE" } {
#var {race} {%1};
#format {race} {%l} {$race};
};

#elseif { "%0" == "HUNGER" } {
#var {hunger} {%1};
#if { "$hunger" == "[*****]" } {#var hungry false} {#var hungry true};
};

#elseif { "%0" == "THIRST" } {
#var {thirst} {%1};
#if { "$thirst" == "[*****]" } {#var thirsty false} {#var thirsty true};
};

#elseif { "%0" == "WORLD_TIME" } {
#var tick 35;
#if { "%1" != "" && "%1" != " " } {
#tick {tick} {#math {tick} {$tick-1}} {1};
#var {time} {%1};
#regexp {$time} {{.*} {(.*)}} {#var hour &1;#var gentime &2};
};
#if { "$room_exits" == "" && "$room_terrain" == "unknown" } {
#var show_exits {It's time to wake up again};
#var state sleeping;
};
};

#elseif { "%0" == "CHANNELS" } {
#var {channels} {%1};
replace_color_codes channels;
#replace {channels} {\n} { };
};

#elseif { "%0" == "COMBAT_STYLE" } {
#var {combat_style} {%1};
strip_color_codes combat_style;
#var {combat_style_clr} {%1};
replace_color_codes combat_style_clr;
};

#elseif { "%0" == "OPPONENT_NAME" } {
#var {opponent_name} {%1};
};

#elseif { "%0" == "OPPONENT_WEAPON_TYPE" } {
#var {opponent_weapon_type} {%1};
strip_color_codes opponent_weapon_type;
#var {opponent_weapon_type_clr} {%1};
replace_color_codes opponent_weapon_type_clr;
#if { "$opponent_weapon_type" == "no opponent" } {
#var {opponent_weapon_type} {none};
#var {opponent_weapon_type_clr} {none};
};
};

#elseif { "%0" == "OPPONENT_WEAPON_OFFH" } {
#var {opponent_weapon_offh} {%1};
strip_color_codes opponent_weapon_offh;
#var {opponent_weapon_offh_clr} {%1};
replace_color_codes opponent_weapon_offh_clr;
#if { "$opponent_weapon_offh" == "no opponent" } {
#var {opponent_weapon_offh} {none};
#var {opponent_weapon_offh_clr} {none};
};
};

#elseif { "%0" == "OPPONENT_COMBAT_STYLE" } {
#var {opponent_combat_style} {%1};
strip_color_codes opponent_combat_style;
#var {opponent_combat_style_clr} {%1};
replace_color_codes opponent_combat_style_clr;
#if { "$opponent_combat_style" == "no opponent" } {
#var {opponent_combat_style} {none};
#var {opponent_combat_style_clr} {none};
};
#if { "$opponent_combat_style" != "none" && "$character_name" != "" } {
#var state fighting;
};
#if { "$opponent_combat_style" == "none" && "$state" == "fighting" } {
#var state standing;
};
#if { "$opponent_combat_style" == "none" && "$opponent_name" != "None." } {
#var {opponent_name} {None.};
};
};

#elseif { "%0" == "CHARACTER_NAME" } {
#var {character_name} {%1};
};

#elseif { "%0" == "ROOM_EXITS" } {
#var {room_exits} {%1};
#foreach {*room_exits[]} {list_exits} {#var new {$new $list_exits}};
#var {list_exits} {$new};
#var {new} {[Exits:};
#var {show_exits} {$list_exits]};
#if { "$room_exits" == "" } {
#var {show_exits} {unknown};
};
};

#elseif { "%0" == "ROOM_TERRAIN" } {
#var {room_terrain} {%1};
#if { "$room_terrain" == "" } {
#var {room_terrain} {unknown};
};
};
#if { "$opponent_combat_style" == "none" && "$room_map" != "" && "$state" == "" } {
#var state standing;
};

#nop stuff to prepare for first/second/third.log;
#math {check_xptnl} {$experience_tnl - $experience};
#if { $check_xptnl > 0 } { #var {xptnl} {$check_xptnl} };
#if {"$opponent_name" == ""} {#var opponent_name None.};

#nop calculate life, mana, move percentages.;
#math {mylife} { 100 * $health / $health_max };
#math {mymana} { 100 * $mana / $mana_max };
#math {mymove} { 100 * $movement / $movement_max };

#nop colorize my hp/mp/mv percent.;
#if { $mylife > 80 } { #var {mylife_clr} {<g13>} };
#elseif { $mylife > 59 && $mylife < 81 } { #var {mylife_clr} {<088>} };
#elseif { $mylife < 30 } { #var {mylife_clr} {<118>} };
#elseif { $mylife < 60 } { #var {mylife_clr} {<138>} };

#if { $mymana > 80 } { #var {mymana_clr} {<g13>} };
#elseif { $mymana > 59 && $mymana < 81 } { #var {mymana_clr} {<088>} };
#elseif { $mymana < 30 } { #var {mymana_clr} {<118>} };
#elseif { $mymana < 60 } { #var {mymana_clr} {<138>} };

#if { $mymove > 80 } { #var {mymove_clr} {<g13>} };
#elseif { $mymove > 59 && $mymove < 81 } { #var {mymove_clr} {<088>} };
#elseif { $mymove < 30 } { #var {mymove_clr} {<118>} };
#elseif { $mymove < 60 } { #var {mymove_clr} {<138>} };

#if { $tick < 7 } { #var tick_clr {<018>} };
#if { $tick < 15 && $tick > 6 } { #var tick_clr {<038>} };
#if { $tick > 14 } { #var tick_clr {<088>} };

#if { "$state" != "" } {
LOG_FIRST;
LOG_SECOND;
LOG_THIRD;
LOG_FOURTH;
LOG_TOPLEFT;
LOG_BOTTOMLEFT;
#sys {tmux set -g status-right ""};
#sys {tmux set -g status-left " $room_name [$area_name]"};
};
};

#alias {LOG_FIRST} {
#line log first.log {
\n
$mylife_clr$mylife% life<088> | $mymana_clr$mymana% mana<088> | $mymove_clr$mymove% move<088>\n
\n
<088>$weapon_type<g13>/<088>$weapon_offh <g13>[<088>$combat_style_clr<g13>]<088>\n
<g13>The $race $class is $state<088>\n
$gold gold <g13>|<088> $gentime\n
<g13>$show_exits<088>\n
};
};

#alias {LOG_SECOND} {
#line log second.log {
\n
<088>$opponent_health% $opponent_name <g13>|<088> $tick_clr$hour<088> <g13>|<088> $adrenaline \n
\n
$opponent_weapon_type_clr<g13>/<088>$opponent_weapon_offh_clr <g13>[<088>$opponent_combat_style_clr<g13>]<088> $xptnl tnl \n
<g13>H:$hunger T:$thirst Overlord: $overlord%<088>\n
You are in the $room_terrain\n
<g13>$weight/$weight_max lbs <088>|<g13> $wimpy/$health_max hp wimpy \n
};
};

#alias {LOG_THIRD} {
#line log third.log {
\n
Hit: $hitroll <g13>|<088> Dam: $damroll <g13>|<088> Rank: $level\n
\n
<g13>Armor<088> vs Pierce: $ac_pierce <g13>Saving Throws<088>
\n vs Bash: $ac_bash Afflictive: $saving_aff
\n vs Slash: $ac_slash Maledictive: $saving_mal
\n vs Magic $ac_magic Mental: $saving_men\n
};
};

#alias {LOG_FOURTH} {
#line log fourth.log {
\n
Streng: $str<g13>|<088>$str_perm\n
Intell: $int<g13>|<088>$int_perm\n
Wisdom: $wis<g13>|<088>$wis_perm\n
Dexter: $dex<g13>|<088>$dex_perm\n
Consti: $con<g13>|<088>$con_perm\n
};
};

#alias {LOG_TOPLEFT} {
#line log topleft.log {
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
};
};

#alias {LOG_BOTTOMLEFT} {
#line log bottomleft.log {
\n
\n
\n
\n
\n
\n
};
};

#EVENT {IAC SB MSDP IAC SE}
{
#if {&{room_exits} == 0}
{
#return
};
}

#EVENT {IAC SB MSDP ROOM}
{
#variable {ROOM} {%1};
}

#ALIAS {report}
{
#nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
#variable result {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]REPORT};
#foreach {*REPORTABLE_VARIABLES[]} {tmp}
{
#variable result {$result$MSDP[VAL]$tmp}
};
#send {$result$TELNET[IAC]$TELNET[SE]\}
}

#nop SECTION: CONNECTION;

#EVENT {SESSION DISCONNECTED} {
ARTT_SHUTDOWN;
#end;
};

#alias {ARTT_SHUTDOWN} {
#sys {tmux killp -a -t 2;};
#sys {rm map.log;};
#sys {rm first.log;};
#sys {rm second.log;};
#sys {rm third.log;};
#sys {rm fourth.log;};
#sys {rm bottomleft.log;};
#sys {rm topleft.log;};
#sys {rm topright.log;};
#sys {rm blank.log;};
};

#ses abandonedrealms abandonedrealms.com 9000;

#nop enter your characters name;
#act {By what name do you wish to be remembered?} {
#if { "$autologin" == "true" } {$charname;#line gag};
};
#act {By what name do you wish to be known?} {
#if { "$autologin" == "true" } {$charname;#line gag};
};

#act {Password:} {
ARTT_STARTUP;
#if { "$autologin" == "true" } {$password;#line gag};
};

#alias {ARTT_STARTUP} {
#split 0 1;
#Show { } {-2};
#screen get ROWS rows;
#screen get COLS cols;
#screen get HEIGHT height;
#screen get WIDTH width;
#var {new} {[Exits:};
};

#nop MAPPING OMG!
#nop ***********

#map read ar.map;

#event {VARIABLE UPDATED room_vnum} {

};

#event {MAP ENTER MAP} { #var map_is_loaded true; }

#script {map_width} {tmux display -p -t 3 '#{pane_width}'}
#script {map_height} {tmux display -p -t 3 '#{pane_height}'}

#event {MAP ENTER ROOM} {
#if { "$tintinmap" == "true" && "$map_is_loaded" == "true" } {
#map map $map_height[1] $map_width[1] append topright.log
};
};

#alias {makemap} {
#if { "$makemap" != "true" } {
#var makemap true;
#echo {start mapping!};
#map flag static off; } {
#var makemap false;
#echo {done mapping!\nmap saved!};
#map flag static on;
#map write ar.map;
};
};

#alias {LOAD_TINTIN_MAP} {
#if { "$tintinmap" == "true" && "$map_is_loaded" != "true" && "$room_map" != "" && "$state" != "sleeping" } {
#map goto $room_name;
#map get roomid room_id;
#if { "$room_id" != "$room_vnum" } {
#map leave;
#var map_is_loaded false;
#delay {1} {
#show {<fac>Something went wrong loading tintin map.<088>};
#Show {<fac>Try moving about slowly.<088>};
};
} {
#delay {1} {
#show {<cfa>Tintin++ map loaded correctly!<088>};
#map map $map_height[1] $map_width[1] append topright.log;};
};
};
};

#act {[Exits: %1]} {

#if { "$makemap" == "true" } {

#map set roomarea $area_name;
#map set roomname $room_name;
#map set roomdesc $room_desc;
#map set roomid $room_vnum;

#if { "$room_terrain" == "cave %D" } {
#map set roomsymbol <108>o;
#map set roomcolor <108>;
};
#elseif { "$room_terrain" == "inside %D" } {
#map set roomsymbol <078>*;
#map set roomcolor <078>;
};
#elseif { "$room_terrain" == "field %D" } {
#map set roomsymbol <028>o;
#map set roomcolor <028>;
};
#elseif { "$room_terrain" == "hills %D" } {
#map set roomsymbol <028>z;
#map set roomcolor <028>;
};
#elseif { "$room_terrain" == "road %D" } {
#map set roomsymbol <108>+;
#map set roomcolor <108>;
};
#elseif { "$room_terrain" == "forest %D" } {
#map set roomsymbol <028>f;
#map set roomcolor <028>;
};
#elseif { "$room_terrain" == "city %D" } {
#map set roomsymbol <108>+;
#map set roomcolor <108>;
};
#elseif { "$room_terrain" == "mountain %D" } {
#map set roomsymbol <038>x;
#map set roomcolor <038>;
};
#elseif { "$room_terrain" == "pond %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "lagoon %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "rapids %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "river %D" } {
#map set roomsymbol <168>~;
#map set roomcolor <168>;
};
#elseif { "$room_terrain" == "ocean %D" } {
#map set roomsymbol <048>~;
#map set roomcolor <048>;
};
#elseif { "$room_terrain" == "underwater %D" } {
#map set roomsymbol <048>~;
#map set roomcolor <048>;
};
#elseif { "$room_terrain" == "sand %D" } {
#map set roomsymbol <038>!;
#map set roomcolor <038>;
};
};
};

#alias {mapdown} {
#map set roomcolor <048>;
};

#alias {mapup} {
#map set roomcolor <158>;
};

#alias {mapwater} {
#map set roomsymbol <078>W;
};

#alias {mapshop} {
#map set roomnote shop;
#map set roomsymbol <038>S;
};

#alias {mapfood} {
#map set roomnote food;
#map set roomsymbol <038>F;
};

#alias {mapnexus} {
#map set roomnote nexus;
#map set roomsymbol <078>N;
};

#alias {mapbank} {
#map set roomnote bank;
#map set roomsymbol <078>B;
};

#alias {mapguild} {
#map set roomnote guild;
#map set roomsymbol <178>G;
};

#alias {maptemple} {
#map set roomnote temple;
#map set roomsymbol <178>T;
};


ar.sh
tmux killp -a -t 0

> fourth.log
tmux split -v -l 8 'tail -f fourth.log'
> third.log
tmux split -h -b -l 135 'tail -f third.log'
> second.log
tmux split -h -b -l 90 'tail -f second.log'
> first.log
tmux split -h -b -l 50 'tail -f first.log'
> bottomleft.log
tmux split -h -b -l 11 'tail -f bottomleft.log'
tmux selectp -t 0
> topleft.log
tmux split -h -b -l 11 'tail -f topleft.log'
> map.log
tmux split -v -l 11 'tail -f map.log'
tmux selectp -t 2
> topright.log
tmux split -h -l 80 'tail -f topright.log'
tmux selectp -t 2
tmux source ar.tmux.conf
tt++ ar.tt


ar.tmux.conf
# reload config file (change file location to your the tmux.conf you want to use)

bind r source-file ~/.tmux.conf

# panes
set -g pane-border-style 'fg=black'
set -g pane-active-border-style 'fg=black'

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style 'fg=white'

set -g status-left ''
set -g status-left-length 100

set -g status-right-style 'fg=white'
set -g status-right ''
set -g status-right-length 100

setw -g window-status-current-style 'fg=gray bg=black'
setw -g window-status-current-format ''

setw -g window-status-style 'fg=red bg=black'
setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '

setw -g window-status-bell-style 'fg=yellow bg=red bold'
[/list]
deauja
Avatar
Posts: 162
2/10/2025, 12:04:07 AM
ARTT 1.3.5

Not complted. soon to come ARTT 1.4. Enjoi.

https://i.postimg.cc/RhZBckbw/2025-02-09-124505-1920x1080-scrot.png

Image

YOU ONLY NEED ONE FILE NOW. ar.sh

REMOVED TINTIN MAPPING, FALL BACK TO LAST VERSION FOR THAT


ar.sh
#!/bin/bash


[ -z "$TMUX" ] && echo "Execute 'tmux' first!" && exit

cat > ar.tt <<EOF
#nop abandonedrealms.com;

#class artt open;

#nop KILL ALL/REREAD ar.tt FILE;
#alias {reset} {#var reset true;#zap;#class artt kill;#class artt read ar.tt;#ses abandonedrealms};

#nop SECTION: AUTO LOGIN; #var charname {};
#var password {};
#var autologin false;

#nop DEALING W/ MY SAC;
#alias {gg %1} {open sac;get %1 sac;close sac};
#alias {ii %1} {open sac;put %1 sac;close sac};
#alias {x sac} {open sac;examine sac;close sac};

#nop USE POTIONS / SCROLLS;
#alias hs {gg resto sac;reci resto};
#alias hp {gg 'dark red' sac;quaff dark};
#alias pp {gg purple;hold potion;quaff purple};
#alias rp {gg recall;hold recall;quaff recall};
#alias cp {gg clear;hold potion;quaff clear};
#alias gp {gg gyvel;hold gyvel;quaff gyvel};
#alias ap {gg anti;quaff anti};

#nop SECTION: STATE;

#event {VARIABLE UPDATED state} {
LOG_FIRST;
#if { "\$state" == "sleeping" } {
#var status_clr <caf>;
};
#elseif { "\$state" != "sleeping" } {
#var status_clr <g13>;
};
#var {topright[status]} {\$status_clr The \$race \$class is \$state in the \$topright[terrain]<088>};
};

#nop GET CHAR STATE I.E. SLEEPING / FIGHTING / RESTING;
#var state {};

#act {^You can't see anything, you're sleeping!} {#var state sleeping};
#act {^You go to sleep in %1.} {#var state sleeping};
#act {^You go to sleep on %1.} {#var state sleeping};
#act {^You can't do that while resting.} {#var state resting};
#act {^In your dreams, or what?} {#var state sleeping};
#act {^You go to sleep.} {#var state sleeping};
#act {^You wake and stand up.} {#var state standing};

#act {^You rest.} {#var state resting};
#act {^You stop resting.} {#var state sitting};
#act {^You are already sitting down.} {#var state sitting};
#act {^You sit down.} {#var state sitting};
#act {^You stand up.} {#var state standing};
#act {^You are already standing.} {#var state standing};
#act {^You are already resting.} {#var state resting};
#act {^You wake and sit up.} {#var state sitting};
#act {^You wake up and start resting.} {#var state resting};

#nop SECTION: GET DIMENSIONS;

#nop these measurments are for the large top right tmux pane;
#script {pane_width} {tmux display -p -t 3 '#{pane_width}'};
#script {pane_height} {tmux display -p -t 3 '#{pane_height}'};
#math {pane_height[1]} { \$pane_height[1] + 1 };

#nop SECTION: MSDP;

#EVENT {SESSION CONNECTED}
{
#variable TELNET[IAC] \xFF;
#variable TELNET[DONT] \xFE;
#variable TELNET[DO] \xFD;
#variable TELNET[WONT] \xFC;
#variable TELNET[WILL] \xFB;
#variable TELNET[SB] \xFA;
#variable TELNET[SE] \xF0;
#variable TELNET[MSDP] \x45;
#variable MSDP[VAR] \x01;
#variable MSDP[VAL] \x02;
#variable MSDP[TABLE_OPEN] \x03;
#variable MSDP[TABLE_CLOSE] \x04;
#variable MSDP[ARRAY_OPEN] \x05;
#variable MSDP[ARRAY_CLOSE] \x06;
#variable {REPORTABLE_VARIABLES}{
{AC_BASH};
{AC_MAGIC};
{AC_PIERCE};
{AC_SLASH};
{ADRENALINE};
{AFFECTS};
{AREA_NAME};
{CHANNELS};
{CHARACTER_NAME};
{CHII_BOLT};
{CLASS};
{COMBAT_STYLE};
{CON};
{CON_PERM};
{DAMROLL};
{DEX};
{DEX_PERM};
{ENERGY};
{ENERGY_MAX};
{EXPERIENCE};
{EXPERIENCE_MAX};
{EXPERIENCE_TNL};
{GOLD};
{GROUP};
{HEALTH};
{HEALTH_MAX};
{HINT};
{HITROLL};
{HUNGER};
{INT};
{INT_PERM};
{INVENTORY};
{LEVEL};
{MANA};
{MANA_MAX};
{MOVEMENT};
{MOVEMENT_MAX};
{OPPONENT_COMBAT_STYLE};
{OPPONENT_HEALTH};
{OPPONENT_HEALTH_MAX};
{OPPONENT_LEVEL};
{OPPONENT_NAME};
{OPPONENT_WEAPON_OFFH};
{OPPONENT_WEAPON_TYPE};
{OVERLORD};
{OVERLORD_NAME};
{POKER};
{POWER};
{QUESTOR};
{RACE};
{ROOM_DESC};
{ROOM_EXITS};
{ROOM_MAP};
{ROOM_NAME};
{ROOM_TERRAIN};
{ROOM_VNUM};
{SAVING_AFF};
{SAVING_MAL};
{SAVING_MEN};
{SHIELD};
{SHIELD_MAX};
{STR};
{STR_PERM};
{TANK_NAME};
{TARGET};
{THIRST};
{TITLE};
{WEAPON_OFFH};
{WEAPON_TYPE};
{WEIGHT};
{WEIGHT_MAX};
{WIMPY};
{WIS};
{WIS_PERM};
{WORLD_TIME};};
#nop Turn telnet debug on if there are problems.;
#config {debug telnet} {off};
};

#EVENT {IAC WILL MSDP}
{
#send {\$TELNET[IAC]\$TELNET[DO]\$TELNET[MSDP]\};
report
};

#alias {replace_color_codes} {

#replace {%1} {\`1} {<018>}; #nop {RED};
#replace {%1} {\`2} {<028>}; #nop {GREEN};
#replace {%1} {\`3} {<038>}; #nop {YELLOW};
#replace {%1} {\`4} {<048>}; #nop {BLUE};
#replace {%1} {\`5} {<058>}; #nop {PURPLE};
#replace {%1} {\`6} {<068>}; #nop {CYAN};
#replace {%1} {\`7} {<eee>}; #nop {WHITE};
#replace {%1} {\`8} {<ccc>}; #nop {GRAY};
#replace {%1} {\`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {\`!} {<118>}; #nop {RED BOLD};
#replace {%1} {\`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {\`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {\`\\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {\`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {\`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {\`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {\`\`} {<088>}; #nop {RESET TO DEFAULT};

};

#alias {strip_color_codes} {
#replace {%1} {\`1} {};#replace {%1} {\`2} {};#replace {%1} {\`3} {};
#replace {%1} {\`4} {};#replace {%1} {\`5} {};#replace {%1} {\`6} {};
#replace {%1} {\`7} {};#replace {%1} {\`8} {};#replace {%1} {\`9} {};
#replace {%1} {\`!} {};#replace {%1} {\`@} {};#replace {%1} {\`#} {};
#replace {%1} {\`\\$} {};#replace {%1} {\`%} {};#replace {%1} {\`^} {};
#replace {%1} {\`&} {};#replace {%1} {\`\`} {};
};

#EVENT {IAC SB MSDP} {

#nop Set all variables to lower case;
#format {test} {%l} {%0};
#variable {\$test} {%1};

#if { "%0" == "ROOM_MAP" } {
#var {room_map} {%1};
replace_color_codes room_map;
#line log map.log \$room_map;
};

#elseif { "%0" == "AFFECTS" } {
#var {topright[affe]} {%1};
};

#elseif { "%0" == "INVENTORY" } {
#var {topright[inve]} {%1};
};

#elseif { "%0" == "GROUP" } {
#var {topright[group]} {%1};
};

#elseif { "%0" == "RACE" } {
#var {race} {%1};
#format {race} {%l} {\$race};
};

#elseif { "%0" == "HUNGER" } {
#var {hunger} {%1};
#if { "\$hunger" == "[*****]" } {
#var hungry false;
} {
#var hungry true;
};
};

#elseif { "%0" == "THIRST" } {
#var {thirst} {%1};
#if { "\$thirst" == "[*****]" } {
#var thirsty false;
} {
#var thirsty true;
};
};

#elseif { "%0" == "WORLD_TIME" } {
#var tick 35;
#if { "%1" != "" && "%1" != " " } {
#tick {tick} {#math {tick} {\$tick-1}} {1};
#var {time} {%1};
#regexp {\$time} {{.*} {(.*)}} {#var hour &1;#var gentime &2};
};
};

#elseif { "%0" == "CHANNELS" } {
#var {channels} {%1};
replace_color_codes channels;
#replace {channels} {\n} { };
};

#elseif { "%0" == "COMBAT_STYLE" } {
#var {combat_style} {%1};
strip_color_codes combat_style;
#var {combat_style_clr} {%1};
replace_color_codes combat_style_clr;
};

#elseif { "%0" == "OPPONENT_NAME" } {
#var {opponent_name} {%1};
#if { "\$aggresive" == "true" } {
#if { "%1" != "None." } {#var {player} {%1}};
};
};

#elseif { "%0" == "OPPONENT_WEAPON_TYPE" } {
#var {opponent_weapon_type} {%1};
strip_color_codes opponent_weapon_type;
#var {opponent_weapon_type_clr} {%1};
replace_color_codes opponent_weapon_type_clr;
};

#elseif { "%0" == "OPPONENT_WEAPON_OFFH" } {
#var {opponent_weapon_offh} {%1};
strip_color_codes opponent_weapon_offh;
#var {opponent_weapon_offh_clr} {%1};
replace_color_codes opponent_weapon_offh_clr;
};

#elseif { "%0" == "OPPONENT_COMBAT_STYLE" } {
#var {opponent_combat_style} {%1};
strip_color_codes opponent_combat_style;
#var {opponent_combat_style_clr} {%1};
replace_color_codes opponent_combat_style_clr;
};

#elseif { "%0" == "CHARACTER_NAME" } {
#var {character_name} {%1};
#if { "\$room_exits" == "" } {
#var {show_exits} {unknown};
#var state sleeping;
} {#var state standing};
};

#elseif { "%0" == "ROOM_EXITS" } {
#var {room_exits} {%1};
#foreach {*room_exits[]} {list_exits} {#var new {\$new \$list_exits}};
#var {list_exits} {\$new};
#var {new} {[Exits:};
#var {show_exits} {\$list_exits]};
};

#elseif { "%0" == "ROOM_TERRAIN" } {
#var {room_terrain} {%1};
#if { "\$room_terrain" == "" } {
#var {room_terrain} {unknown};
};
#var {topright[terrain]} {%1};
#var {topright[status]} {\$status_clr The \$race \$class is \$state in the \$topright[terrain]<088>};
};

#nop stuff to prepare for first/second/third.log;
#math {check_xptnl} {\$experience_tnl - \$experience};
#if { \$check_xptnl > 0 } {#var {xptnl} {\$check_xptnl}};
#if {"\$opponent_name" == ""} {#var opponent_name None.};

#nop calculate life, mana, move percentages.;
#math {mylife} { 100 * \$health / \$health_max };
#math {mymana} { 100 * \$mana / \$mana_max };
#math {mymove} { 100 * \$movement / \$movement_max };

#nop colorize my opponents hp/mp/mv percent.;
#if { \$opponent_health > 80 } {#var {oppolife_clr} {<g13>}};
#elseif { \$opponent_health > 59 && \$opponent_health < 81 } {
#var {oppolife_clr} {<088>};
};
#elseif { \$opponent_health < 30 } {#var {oppolife_clr} {<118>}};
#elseif { \$opponent_health < 60 } {#var {oppolife_clr} {<138>}};
#if { \$opponent_health == 0 } {#var {oppolife_clr} {<g13>}};

#nop colorize my hp/mp/mv percent.;
#if { \$mylife > 80 } {#var {mylife_clr} {<g13>}};
#elseif { \$mylife > 59 && \$mylife < 81 } {#var {mylife_clr} {<088>}};
#elseif { \$mylife < 30 } {#var {mylife_clr} {<118>}};
#elseif { \$mylife < 60 } {#var {mylife_clr} {<138>}};

#if { \$mymana > 80 } {#var {mymana_clr} {<g13>}};
#elseif { \$mymana > 59 && \$mymana < 81 } {#var {mymana_clr} {<088>}};
#elseif { \$mymana < 30 } {#var {mymana_clr} {<118>}};
#elseif { \$mymana < 60 } {#var {mymana_clr} {<138>}};

#if { \$mymove > 80 } {#var {mymove_clr} {<g13>}};
#elseif { \$mymove > 59 && \$mymove < 81 } {#var {mymove_clr} {<088>}};
#elseif { \$mymove < 30 } {#var {mymove_clr} {<118>}};
#elseif { \$mymove < 60 } {#var {mymove_clr} {<138>}};

#if { \$tick < 7 } {#var tick_clr {<018>}};
#if { \$tick < 15 && \$tick > 6 } {#var tick_clr {<038>}};
#if { \$tick > 14 } {#var tick_clr {<088>}};

#if { "\$character_name" == "%w" } {
LOG_FIRST;
LOG_SECOND;
LOG_THIRD;
LOG_FOURTH;
LOG_TOPLEFT;
LOG_BOTTOMLEFT;
#sys {tmux set -g status-right ""};
TMUX_BOTTOM_TEXT;
#showme {<g13>:<088>} {-2};
};
};

#nop MSDP STUFF;
#nop **********;
#EVENT {IAC SB MSDP IAC SE}
{
#if {&{room_exits} == 0}
{
#return
};
};

#EVENT {IAC SB MSDP ROOM}
{
#variable {ROOM} {%1};
};

#ALIAS {report}
{
#nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
#variable result {\$TELNET[IAC]\$TELNET[SB]\$TELNET[MSDP]\$MSDP[VAR]REPORT};
#foreach {*REPORTABLE_VARIABLES[]} {tmp}
{
#variable result {\$result\$MSDP[VAL]\$tmp}
};
#send {\$result\$TELNET[IAC]\$TELNET[SE]\}
};

#nop PROMPT LOGGING STUFF;
#nop ********************;

#alias {TMUX_BOTTOM_TEXT} {#sys {tmux set -g status-left ""};};

#alias {LOG_FIRST} {
#line log first.log {
\n
\$mylife_clr\$mylife% life<088> | \$mymana_clr\$mymana% mana<088> | \$mymove_clr\$mymove% move<088>\n
\n
<088>\$weapon_type<g13>/<088>\$weapon_offh <g13>[<088>\$combat_style_clr<g13>]<088>\n
\n
\$gold gold <g13>|<088> \$tick_clr\$gentime<088> <g13>|<088> \$xptnl tnl\n
<g13>\$show_exits<088>\n
};
};

#alias {LOG_SECOND} {
#line log second.log {
\n
\$oppolife_clr\$opponent_health% \$opponent_name<088> | <g13>\$overlord% Overlord.<088>\n
\n
\$opponent_weapon_type_clr<g13>/<088>\$opponent_weapon_offh_clr <g13>[<088>\$opponent_combat_style_clr<g13>]<088>\n
\n
\$weight/\$weight_max lbs <g13>|<088> \$wimpy/\$health_max hp wimpy\n
<g13>H:\$hunger T:\$thirst \$adrenaline<088>\n
};
};

#alias {LOG_THIRD} {
#line log third.log {
\n
Hit: \$hitroll <g13>|<088> Dam: \$damroll <g13>|<088> Rank: \$level\n
\n
<g13>Armor<088> vs Pierce: \$ac_pierce <g13>Saving Throws<088>
\n vs Bash: \$ac_bash Afflictive: \$saving_aff
\n vs Slash: \$ac_slash Maledictive: \$saving_mal
\n vs Magic \$ac_magic Mental: \$saving_men\n
};
};

#alias {LOG_FOURTH} {
#line log fourth.log {
\n
Streng: \$str<g13>|<088>\$str_perm\n
Intell: \$int<g13>|<088>\$int_perm\n
Wisdom: \$wis<g13>|<088>\$wis_perm\n
Dexter: \$dex<g13>|<088>\$dex_perm\n
Consti: \$con<g13>|<088>\$con_perm\n
};
};

#alias {LOG_TOPLEFT} {
#line log topleft.log {
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
};
};

#alias {LOG_BOTTOMLEFT} {
#line log bottomleft.log {
\n
\n
\n
\n
\n
\n
};
};

#nop LOG TOPRIGHT SCREEN;
#var logspaces 0;
#var loglines 3;

#var status_clr {<g13>};

#event {VARIABLE UPDATED topright} {

#if { "\$map_pane" != "true" } {

#var logspaces 0;
#var loglines 3;

#math logspaces {\$pane_height[1] - \$loglines};

#\$logspaces {#line log topright.log \n};

#line log topright.log { <g13>INVENTORY:<088> };

#foreach {*topright[inve][]} {item} {

#math {loglines} {\$loglines + 1};

#if { "*topright[inve][\$item]" > "1" } {

#line log topright.log { \$item (\$topright[inve][\$item])};

} {

#line log topright.log { \$item };

};

};

#line log topright.log \n;

#line log topright.log { <g13>AFFECTS:<088> };

#if { "*topright[affe][\$spell]" == "0" } {

#line log topright.log { You are not under any affects.};

} {

#foreach {*topright[affe][]} {spell} {

#math {loglines} {\$loglines + 1};

#line log topright.log { \$spell (\$topright[affe][\$spell]) };
};
};

#foreach {*topright[group][]} {memb} {

#math {loglines} {\$loglines + 1};

#regexp {\$topright[group][\$memb]} {"hp":%d,"mp":%d} {

#if { &1 <= 49 } {#var hp_clr <018> };
#elseif { &1 >= 50 } {#var hp_clr <088> };

#if { &2 <= 49 } {#var mp_clr <048> };
#elseif { &2 >= 50 } {#var mp_clr <088> };

#if { "\$memb" != "\$character_name" } {
#line log topright.log { <088>[\$hp_clr &1% life<088>\$mp_clr &2% mana<088> ] \$memb <088> };
};

};

};
#line log topright.log { \n};
#line log topright.log { \$topright[status]};
};
};

#nop SECTION: MOVING AROUND;

#var player {};
#var murder murder;

#mac {^H} {w};
#mac {^J} {s};
#mac {^K} {n};
#mac {^L} {e};
#mac {^O} {u};
#mac {^>} {d};
#mac {^M} {m};
#mac {^U} {whe};
#mac {^I} {\$murder \$player};
#mac {^<} {flee};
#mac {^*} {scan};

#nop LOG SESSION;
#nop ***********;
#event {VARIABLE UPDATED character_name} {
#log append \$character_name.log;
};

#nop SECTION: CONNECTION;

#EVENT {SESSION DISCONNECTED} {
#if { "\$reset" != "true" } {
ARTT_SHUTDOWN;
#end;
};
#elseif { "\$reset" == "true" } {
#var reset false;
};
};

#alias {ARTT_SHUTDOWN} {
#sys {tmux killp -a -t 2;};
#sys {rm map.log;};
#sys {rm first.log;};
#sys {rm second.log;};
#sys {rm third.log;};
#sys {rm fourth.log;};
#sys {rm bottomleft.log;};
#sys {rm topleft.log;};
#sys {rm topright.log;};
#sys {rm ar.tt;};
#sys {rm ar.tmux.conf;};
};

#nop enter your characters name;

#act {By what name do you wish to be remembered?} {
#if { "\$autologin" == "true" } {\$charname;#line gag};
};

#act {By what name do you wish to be known?} {
#if { "\$autologin" == "true" } {\$charname;#line gag};
};

#act {Password:} {
ARTT_STARTUP;
#if { "\$autologin" == "true" } {\$password;#line gag};
};

#alias {ARTT_STARTUP} {
#split 0 1;
#show { } {-2};
#screen get ROWS rows;
#screen get COLS cols;
#screen get HEIGHT height;
#screen get WIDTH width;
#var {new} {[Exits:};
};

#nop THE GOOD STUFF;
#ses abandonedrealms abandonedrealms.com 9000;

#class artt close;
EOF

cat > ar.tmux.conf <<EOF
# reload config file (change file location to your the tmux.conf you want to use)
bind r source-file ~/.tmux.conf

# panes
set -g pane-border-style 'fg=black'
set -g pane-active-border-style 'fg=black'

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style 'fg=white'

set -g status-left ''
set -g status-left-length 100

set -g status-right-style 'fg=white'
set -g status-right ''
set -g status-right-length 100

setw -g window-status-current-style 'fg=gray bg=black'
setw -g window-status-current-format ''

setw -g window-status-style 'fg=red bg=black'
setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '

setw -g window-status-bell-style 'fg=yellow bg=red bold'
EOF

tmux killp -a -t 0
> fourth.log
tmux split -v -l 8 'tail -f fourth.log'
> third.log
tmux split -h -b -l 135 'tail -f third.log'
> second.log
tmux split -h -b -l 90 'tail -f second.log'
> first.log
tmux split -h -b -l 50 'tail -f first.log'
> bottomleft.log
tmux split -h -b -l 11 'tail -f bottomleft.log'
tmux selectp -t 0
> topleft.log
tmux split -h -b -l 11 'tail -f topleft.log'
> map.log
tmux split -v -l 11 'tail -f map.log'
tmux selectp -t 2
> topright.log
tmux split -h -l 80 'tail -f topright.log'
tmux selectp -t 2
tmux source ar.tmux.conf
tt++ ar.tt
deauja
Avatar
Posts: 162
3/12/2025, 6:01:26 PM
ARTT 1.4

ar.sh

#!/bin/bash


[ -z "$TMUX" ] && echo "Execute 'tmux' first!" && echo "Or use 'tmux new-session ./ar.sh'" && exit

cat > ar.tt <<EOF
#nop abandonedrealms.com;

#class artt open;

#nop KILL ALL/REREAD ar.tt FILE;
#alias {reset} {#var reset true;#zap;#class artt kill;#class artt read ar.tt;#ses abandonedrealms};

#nop DEALING W/ MY SAC;
#alias {gg %1} {open sac;get %1 sac;close sac};
#alias {ii %1} {open sac;put %1 sac;close sac};
#alias {x sac} {open sac;examine sac;close sac};

#nop USE POTIONS / SCROLLS;
#alias hs {gg resto sac;reci resto};
#alias hp {gg 'dark red' sac;quaff dark};
#alias pp {gg purple;hold potion;quaff purple};
#alias rp {gg recall;hold recall;quaff recall};
#alias cp {gg clear;hold potion;quaff clear};
#alias gp {gg gyvel;hold gyvel;quaff gyvel};
#alias ap {gg anti;quaff anti};

#nop SECTION: STATE;

#nop COMBAT STATE;
#event {VARIABLE UPDATED opponent_combat_style_clr} {

#if { "\$opponent_combat_style" == "no opponent"
&& "\$state" == "fighting"
&& "\$world_time" != ""
&& "\$room_map" != "" } {
#var state standing;
#echo {};
#show {You stop fighting.};
};
#elseif { "\$opponent_combat_style" != "no opponent"
&& "\$character_name" == "%w"
&& "\$state" != "fighting"
&& "\$world_time" != ""
&& "\$room_map" != "" } {
#var state fighting;
#echo {};
#show {You start fighting!};
};
};

#nop LOG STATE;
#event {VARIABLE UPDATED state} {
LOG_FIRST;
#if { "\$state" == "sleeping" } {
#var status_clr <caf>;
};
#elseif { "\$state" != "sleeping" } {
#var status_clr <g13>;
};
#var {topright[status]} {\$status_clr The \$race \$class is \$state in the \$topright[terrain]<088>};
};

#nop GET CHAR STATE I.E. SLEEPING / FIGHTING / RESTING;
#var state {};

#act {^You can't see anything, you're sleeping!} {#var state sleeping};
#act {^You go to sleep in %1.} {#var state sleeping};
#act {^You go to sleep on %1.} {#var state sleeping};
#act {^You can't do that while resting.} {#var state resting};
#act {^In your dreams, or what?} {#var state sleeping};
#act {^You go to sleep.} {#var state sleeping};
#act {^You wake and stand up.} {#var state standing} {1};

#act {^You rest.} {#var state resting};
#act {^You stop resting.} {#var state sitting};
#act {^You are already sitting down.} {#var state sitting};
#act {^You sit down.} {#var state sitting};
#act {^You stand up.} {#var state standing};
#act {^You are already standing.} {#var state standing};
#act {^You are already resting.} {#var state resting};
#act {^You wake and sit up.} {#var state sitting};
#act {^You wake up and start resting.} {#var state resting};

#nop SECTION: GET DIMENSIONS;

#nop these measurments are for the large top right tmux pane;
#script {pane_width} {tmux display -p -t 3 '#{pane_width}'};
#script {pane_height} {tmux display -p -t 3 '#{pane_height}'};
#math {pane_height[1]} { \$pane_height[1] + 1 };

#nop SECTION: MSDP;

#EVENT {SESSION CONNECTED}
{
#variable TELNET[IAC] \xFF;
#variable TELNET[DONT] \xFE;
#variable TELNET[DO] \xFD;
#variable TELNET[WONT] \xFC;
#variable TELNET[WILL] \xFB;
#variable TELNET[SB] \xFA;
#variable TELNET[SE] \xF0;
#variable TELNET[MSDP] \x45;
#variable MSDP[VAR] \x01;
#variable MSDP[VAL] \x02;
#variable MSDP[TABLE_OPEN] \x03;
#variable MSDP[TABLE_CLOSE] \x04;
#variable MSDP[ARRAY_OPEN] \x05;
#variable MSDP[ARRAY_CLOSE] \x06;
#variable {REPORTABLE_VARIABLES}{
{AC_BASH};
{AC_MAGIC};
{AC_PIERCE};
{AC_SLASH};
{ADRENALINE};
{AFFECTS};
{AREA_NAME};
{CHANNELS};
{CHARACTER_NAME};
{CHII_BOLT};
{CLASS};
{COMBAT_STYLE};
{CON};
{CON_PERM};
{DAMROLL};
{DEX};
{DEX_PERM};
{ENERGY};
{ENERGY_MAX};
{EXPERIENCE};
{EXPERIENCE_MAX};
{EXPERIENCE_TNL};
{GOLD};
{GROUP};
{HEALTH};
{HEALTH_MAX};
{HINT};
{HITROLL};
{HUNGER};
{INT};
{INT_PERM};
{INVENTORY};
{LEVEL};
{MANA};
{MANA_MAX};
{MOVEMENT};
{MOVEMENT_MAX};
{OPPONENT_COMBAT_STYLE};
{OPPONENT_HEALTH};
{OPPONENT_HEALTH_MAX};
{OPPONENT_LEVEL};
{OPPONENT_NAME};
{OPPONENT_WEAPON_OFFH};
{OPPONENT_WEAPON_TYPE};
{OVERLORD};
{OVERLORD_NAME};
{POKER};
{POWER};
{QUESTOR};
{RACE};
{ROOM_DESC};
{ROOM_EXITS};
{ROOM_MAP};
{ROOM_NAME};
{ROOM_TERRAIN};
{ROOM_VNUM};
{SAVING_AFF};
{SAVING_MAL};
{SAVING_MEN};
{SHIELD};
{SHIELD_MAX};
{STR};
{STR_PERM};
{TANK_NAME};
{TARGET};
{THIRST};
{TITLE};
{WEAPON_OFFH};
{WEAPON_TYPE};
{WEIGHT};
{WEIGHT_MAX};
{WIMPY};
{WIS};
{WIS_PERM};
{WORLD_TIME};};
#nop Turn telnet debug on if there are problems.;
#config {debug telnet} {off};
};

#EVENT {IAC WILL MSDP}
{
#send {\$TELNET[IAC]\$TELNET[DO]\$TELNET[MSDP]\};
report
};

#alias {replace_color_codes} {

#replace {%1} {\`1} {<018>}; #nop {RED};
#replace {%1} {\`2} {<028>}; #nop {GREEN};
#replace {%1} {\`3} {<038>}; #nop {YELLOW};
#replace {%1} {\`4} {<048>}; #nop {BLUE};
#replace {%1} {\`5} {<058>}; #nop {PURPLE};
#replace {%1} {\`6} {<068>}; #nop {CYAN};
#replace {%1} {\`7} {<eee>}; #nop {WHITE};
#replace {%1} {\`8} {<ccc>}; #nop {GRAY};
#replace {%1} {\`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {\`!} {<118>}; #nop {RED BOLD};
#replace {%1} {\`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {\`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {\`\\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {\`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {\`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {\`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {\`\`} {<088>}; #nop {RESET TO DEFAULT};

};

#alias {strip_color_codes} {
#replace {%1} {\`1} {};#replace {%1} {\`2} {};#replace {%1} {\`3} {};
#replace {%1} {\`4} {};#replace {%1} {\`5} {};#replace {%1} {\`6} {};
#replace {%1} {\`7} {};#replace {%1} {\`8} {};#replace {%1} {\`9} {};
#replace {%1} {\`!} {};#replace {%1} {\`@} {};#replace {%1} {\`#} {};
#replace {%1} {\`\\$} {};#replace {%1} {\`%} {};#replace {%1} {\`^} {};
#replace {%1} {\`&} {};#replace {%1} {\`\`} {};
};

#EVENT {IAC SB MSDP} {

#nop Set all variables to lower case;
#format {test} {%l} {%0};
#variable {\$test} {%1};

#if { "%0" == "ROOM_MAP" } {
#var {room_map} {%1};
replace_color_codes room_map;
#line log map.log \$room_map;
};

#elseif { "%0" == "AFFECTS" } {
#var {topright[affe]} {%1};
};

#elseif { "%0" == "INVENTORY" } {
#var {topright[inve]} {%1};
};

#elseif { "%0" == "GROUP" } {
#var {topright[group]} {%1};
};

#elseif { "%0" == "RACE" } {
#var {race} {%1};
#format {race} {%l} {\$race};
};

#elseif { "%0" == "HUNGER" } {
#var {hunger} {%1};
#if { "\$hunger" == "[*****]" } {
#var hungry false;
} {
#var hungry true;
};
};

#elseif { "%0" == "THIRST" } {
#var {thirst} {%1};
#if { "\$thirst" == "[*****]" } {
#var thirsty false;
} {
#var thirsty true;
};
};

#elseif { "%0" == "WORLD_TIME" } {
#var tick 35;
#if { "%1" != "" && "%1" != " " } {
#tick {tick} {#math {tick} {\$tick-1}} {1};
#var {time} {%1};
#regexp {\$time} {{.*} {(.*)}} {#var hour &1;#var gentime &2};
};
};

#elseif { "%0" == "CHANNELS" } {
#var {channels} {%1};
replace_color_codes channels;
#replace {channels} {\n} { };
};

#elseif { "%0" == "COMBAT_STYLE" } {
#var {combat_style} {%1};
strip_color_codes combat_style;
#var {combat_style_clr} {%1};
replace_color_codes combat_style_clr;
};

#elseif { "%0" == "OPPONENT_NAME" } {
#var {opponent_name} {%1};
#if { "\$aggresive" == "true" } {
#if { "%1" != "None." } {#var {player} {%1}};
};
};

#elseif { "%0" == "OPPONENT_WEAPON_TYPE" } {
#var {opponent_weapon_type} {%1};
strip_color_codes opponent_weapon_type;
#var {opponent_weapon_type_clr} {%1};
replace_color_codes opponent_weapon_type_clr;
};

#elseif { "%0" == "OPPONENT_WEAPON_OFFH" } {
#var {opponent_weapon_offh} {%1};
strip_color_codes opponent_weapon_offh;
#var {opponent_weapon_offh_clr} {%1};
replace_color_codes opponent_weapon_offh_clr;
};

#elseif { "%0" == "OPPONENT_COMBAT_STYLE" } {
#var {opponent_combat_style} {%1};
strip_color_codes opponent_combat_style;
#var {opponent_combat_style_clr} {%1};
replace_color_codes opponent_combat_style_clr;
};

#elseif { "%0" == "CHARACTER_NAME" } {
#var {character_name} {%1};
#if { "\$room_exits" == "" } {
#var {show_exits} {unknown};
#var state sleeping;
} {#var state standing};
};

#elseif { "%0" == "ROOM_EXITS" } {
#var {room_exits} {%1};
#foreach {*room_exits[]} {list_exits} {#var new {\$new \$list_exits}};
#var {list_exits} {\$new};
#var {new} {[Exits:};
#var {show_exits} {\$list_exits]};
};

#elseif { "%0" == "ROOM_TERRAIN" } {
#var {room_terrain} {%1};
#if { "\$room_terrain" == "" } {
#var {room_terrain} {unknown};
};
#var {topright[terrain]} {%1};
#var {topright[status]} {\$status_clr The \$race \$class is \$state in the \$topright[terrain]<088>};
};

#nop stuff to prepare for first/second/third.log;
#math {check_xptnl} {\$experience_tnl - \$experience};
#if { \$check_xptnl > 0 } {#var {xptnl} {\$check_xptnl}};
#if {"\$opponent_name" == ""} {#var opponent_name None.};

#nop calculate life, mana, move percentages.;
#math {mylife} { 100 * \$health / \$health_max };
#math {mymana} { 100 * \$mana / \$mana_max };
#math {mymove} { 100 * \$movement / \$movement_max };

#nop colorize my opponents hp/mp/mv percent.;
#if { \$opponent_health > 80 } {#var {oppolife_clr} {<g13>}};
#elseif { \$opponent_health > 59 && \$opponent_health < 81 } {
#var {oppolife_clr} {<088>};
};
#elseif { \$opponent_health < 30 } {#var {oppolife_clr} {<118>}};
#elseif { \$opponent_health < 60 } {#var {oppolife_clr} {<138>}};
#if { \$opponent_health == 0 } {#var {oppolife_clr} {<g13>}};

#nop colorize my hp/mp/mv percent.;
#if { \$mylife > 80 } {#var {mylife_clr} {<g13>}};
#elseif { \$mylife > 59 && \$mylife < 81 } {#var {mylife_clr} {<088>}};
#elseif { \$mylife < 30 } {#var {mylife_clr} {<118>}};
#elseif { \$mylife < 60 } {#var {mylife_clr} {<138>}};

#if { \$mymana > 80 } {#var {mymana_clr} {<g13>}};
#elseif { \$mymana > 59 && \$mymana < 81 } {#var {mymana_clr} {<088>}};
#elseif { \$mymana < 30 } {#var {mymana_clr} {<118>}};
#elseif { \$mymana < 60 } {#var {mymana_clr} {<138>}};

#if { \$mymove > 80 } {#var {mymove_clr} {<g13>}};
#elseif { \$mymove > 59 && \$mymove < 81 } {#var {mymove_clr} {<088>}};
#elseif { \$mymove < 30 } {#var {mymove_clr} {<118>}};
#elseif { \$mymove < 60 } {#var {mymove_clr} {<138>}};

#if { \$tick < 7 } {#var tick_clr {<018>}};
#if { \$tick < 15 && \$tick > 6 } {#var tick_clr {<038>}};
#if { \$tick > 14 } {#var tick_clr {<088>}};

#if { "\$character_name" == "%w" } {
LOG_FIRST;
LOG_SECOND;
LOG_THIRD;
LOG_FOURTH;
LOG_TOPLEFT;
LOG_BOTTOMLEFT;
#sys {tmux set -g status-right ""};
TMUX_BOTTOM_TEXT;
#showme {<g13>\$room_name:~\$<088>} {-2};
};
};

#nop MSDP STUFF;
#nop **********;
#EVENT {IAC SB MSDP IAC SE}
{
#if {&{room_exits} == 0}
{
#return
};
};

#EVENT {IAC SB MSDP ROOM}
{
#variable {ROOM} {%1};
};

#ALIAS {report}
{
#nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
#variable result {\$TELNET[IAC]\$TELNET[SB]\$TELNET[MSDP]\$MSDP[VAR]REPORT};
#foreach {*REPORTABLE_VARIABLES[]} {tmp}
{
#variable result {\$result\$MSDP[VAL]\$tmp}
};
#send {\$result\$TELNET[IAC]\$TELNET[SE]\}
};

#nop PROMPT LOGGING STUFF;
#nop ********************;

#alias {TMUX_BOTTOM_TEXT} {#sys {tmux set -g status-left ""};};

#alias {LOG_FIRST} {
#line log first.log {
\n
\$mylife_clr\$mylife% life<088> | \$mymana_clr\$mymana% mana<088> | \$mymove_clr\$mymove% move<088>\n
\n
<088>\$weapon_type<g13>/<088>\$weapon_offh <g13>[<088>\$combat_style_clr<g13>]<088>\n
\n
\$gold gold <g13>|<088> \$tick_clr\$gentime<088> <g13>|<088> \$xptnl tnl\n
\n
};
};

#alias {LOG_SECOND} {
#line log second.log {
\n
\$oppolife_clr\$opponent_health% \$opponent_name<088> | <g13>\$overlord% Overlord.<088> | <g13>\$adrenaline<088>\n
\n
\$opponent_weapon_type_clr<g13>/<088>\$opponent_weapon_offh_clr <g13>[<088>\$opponent_combat_style_clr<g13>]<088>\n
\n
\$weight/\$weight_max lbs <g13>|<088> \$wimpy/\$health_max hp wimpy\n
\n
};
};

#alias {LOG_THIRD} {
#line log third.log {
\n
<g13>\$area_name<088> @ <g13>\$hour<088>\n
\n
<g13>Armor<088> vs Pierce: \$ac_pierce <g13>Saving Throws<088>
\n vs Bash: \$ac_bash Afflictive: \$saving_aff
\n vs Slash: \$ac_slash Maledictive: \$saving_mal
\n vs Magic \$ac_magic Mental: \$saving_men\n
};
};

#alias {LOG_FOURTH} {
#line log fourth.log {
\n <g13>Consti: <088>\$con<g13>|<088>\$con_perm <g13>Rank: <088>\$level <088>\n
\n
<g13>Streng:<088> \$str<g13>|<088>\$str_perm <g13>H:\$hunger <088>\n
<g13>Intell:<088> \$int<g13>|<088>\$int_perm <g13>T:\$thirst <088>\n
<g13>Wisdom:<088> \$wis<g13>|<088>\$wis_perm <g13>Hit: <088>\$hitroll <088>\n
<g13>Dexter:<088> \$dex<g13>|<088>\$dex_perm <g13>Dam: <088>\$damroll <088>\n
};
};

#alias {LOG_TOPLEFT} {
#line log topleft.log {
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
};
};

#alias {LOG_BOTTOMLEFT} {
#line log bottomleft.log {
\n
\n
\n
\n
\n
\n
};
};

#nop LOG TOPRIGHT SCREEN;
#var logspaces 0;
#var loglines 5;

#var status_clr {<g13>};

#event {VARIABLE UPDATED topright} {

#if { "\$map_pane" != "true" } {

#var logspaces 0;
#var loglines 5;

#math logspaces {\$pane_height[1] - \$loglines};

#\$logspaces {#line log topright.log \n};

#line log topright.log { <g13>INVENTORY:<088> };

#foreach {*topright[inve][]} {item} {

#math {loglines} {\$loglines + 1};

#if { "*topright[inve][\$item]" > "1" } {

#line log topright.log { \$item (\$topright[inve][\$item])};

} {

#line log topright.log { \$item };

};

};

#line log topright.log \n;

#line log topright.log { <g13>AFFECTS:<088> };

#if { "*topright[affe][\$spell]" == "0" } {

#line log topright.log { You are not under any affects.};

} {

#foreach {*topright[affe][]} {spell} {

#math {loglines} {\$loglines + 1};

#line log topright.log { \$spell (\$topright[affe][\$spell]) };
};
};

#line log topright.log { \n};

#line log topright.log { <g13>GROUP:<088> };
#foreach {*topright[group][]} {memb} {

#math {loglines} {\$loglines + 1};

#regexp {\$topright[group][\$memb]} {"hp":%d,"mp":%d} {

#if { &1 <= 49 } {#var hp_clr <018> };
#elseif { &1 >= 50 } {#var hp_clr <088> };

#if { &2 <= 49 } {#var mp_clr <048> };
#elseif { &2 >= 50 } {#var mp_clr <088> };

#if { "\$memb" != "\$character_name" } {
#line log topright.log { <088>[\$hp_clr &1% life<088>\$mp_clr &2% mana<088> ] \$memb <088> };
};

};

};

#line log topright.log { \n};
#line log topright.log { \$topright[status]};
};
};

#nop SECTION: MOVING AROUND;

#var player {};
#var murder murder;

#mac {^H} {w};
#mac {^J} {s};
#mac {^K} {n};
#mac {^L} {e};
#mac {^O} {u};
#mac {^>} {d};
#mac {^M} {m};
#mac {^U} {whe};
#mac {^I} {\$murder \$player};
#mac {^<} {flee};
#mac {^*} {scan};

#nop LOG SESSION;
#nop ***********;
#event {VARIABLE UPDATED character_name} {
#log append \$character_name.log;
};

#nop ADD YOUR SCRIPTS HERE! 'extra.tt' ;

#read extra.tt;

#nop SECTION: CONNECTION;

#EVENT {SESSION DISCONNECTED} {
#if { "\$reset" != "true" } {
ARTT_SHUTDOWN;
#end;
};
#elseif { "\$reset" == "true" } {
#var reset false;
};
};

#alias {ARTT_SHUTDOWN} {
#sys {tmux killp -a -t 2;};
#sys {rm map.log;};
#sys {rm first.log;};
#sys {rm second.log;};
#sys {rm third.log;};
#sys {rm fourth.log;};
#sys {rm bottomleft.log;};
#sys {rm topleft.log;};
#sys {rm topright.log;};
#sys {rm ar.tt;};
#sys {rm ar.tmux.conf;};
};

#nop enter your characters name;

#act {By what name do you wish to be remembered?} {
#if { "\$autologin" == "true" } {\$charname;#line gag};
};

#act {By what name do you wish to be known?} {
#if { "\$autologin" == "true" } {\$charname;#line gag};
};

#act {Password:} {
ARTT_STARTUP;
#if { "\$autologin" == "true" } {\$password;#line gag};
};

#alias {ARTT_STARTUP} {
#split 0 1;
#show { } {-2};
#screen get ROWS rows;
#screen get COLS cols;
#screen get HEIGHT height;
#screen get WIDTH width;
#var {new} {[Exits:};
};

#nop THE GOOD STUFF;
#ses abandonedrealms abandonedrealms.com 9000;

#class artt close;
EOF

cat > ar.tmux.conf <<EOF
# reload config file (change file location to your the tmux.conf you want to use)
bind r source-file ~/.tmux.conf

# panes
set -g pane-border-style 'fg=black'
set -g pane-active-border-style 'fg=black'

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style 'fg=white'

set -g status-left ''
set -g status-left-length 100

set -g status-right-style 'fg=white'
set -g status-right ''
set -g status-right-length 100

setw -g window-status-current-style 'fg=gray bg=black'
setw -g window-status-current-format ''

setw -g window-status-style 'fg=red bg=black'
setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '

setw -g window-status-bell-style 'fg=yellow bg=red bold'
EOF

sleep 1

tmux killp -a -t 0
> fourth.log
tmux split -v -l 8 'tail -f fourth.log'
> third.log
tmux split -h -b -l 135 'tail -f third.log'
> second.log
tmux split -h -b -l 90 'tail -f second.log'
> first.log
tmux split -h -b -l 50 'tail -f first.log'
> bottomleft.log
tmux split -h -b -l 11 'tail -f bottomleft.log'
tmux selectp -t 0
> topleft.log
tmux split -h -b -l 11 'tail -f topleft.log'
> map.log
tmux split -v -l 11 'tail -f map.log'
tmux selectp -t 2
> topright.log
tmux split -h -l 80 'tail -f topright.log'
tmux selectp -t 2
tmux source ar.tmux.conf
tt++ ar.tt
Davairus
Avatar
Posts: 10674
3/13/2025, 9:25:52 AM
deauja i'm curious how crazy your screen looks nowadays
deauja
Avatar
Posts: 162
3/13/2025, 9:37:42 PM
ARTT 1.4

This is when executing ar.sh using xfce4-terminal

Please tell me if you have any questions.


ARTT 1.4 uses Tintin++ client and MSDP. See 'help msdp' for more info.
Tintin++ also has options for logging MSDP data in html format I believe.

https://i.postimg.cc/vm644qdz/2025-03-14-100736-1920x1080-scrot.png
Image

https://i.postimg.cc/g00K1P80/wp5977746.jpg
Image

edits 3.19.2025
-added tank name and life percent to prompt
-slowed down open/close/get/put/examine sac alias

ar.sh
#!/bin/bash


[ -z "$TMUX" ] && echo "Execute 'tmux' first!" && echo "Or use 'tmux new-session ./ar.sh'" && exit

cat > ar.tt <<EOF
#nop abandonedrealms.com;

#class artt open;

#nop KILL ALL/REREAD ar.tt FILE;
#alias {reset} {#var reset true;#zap;#class artt kill;#class artt read ar.tt;#ses abandonedrealms};

#nop DEALING W/ MY SAC;

#alias {g2 %1} {
open sac;
#delay {.3d3} {get %1 sac};
#delay {1.3d3} {get %1 sac};
#delay {2.3d3} {close sac};
};

#alias {gg %1} {
open sac;
#delay {.3d3} {get %1 sac};
#delay {1.3d3} {close sac};
};

#alias {ii %1} {
open sac;
#delay {.3d3} {put %1 sac};
#delay {1.3d3} {close sac};
};

#alias {x sac} {
open sac;
#delay {.3d3} {examine sac};
#delay {1.3d3} {close sac};
};

#nop USE POTIONS / SCROLLS;
#alias hs {gg resto sac;reci resto};
#alias hp {gg 'dark red' sac;quaff dark};
#alias pp {gg purple;hold potion;quaff purple};
#alias rp {gg recall;hold recall;quaff recall};
#alias cp {gg clear;hold potion;quaff clear};
#alias gp {gg gyvel;hold gyvel;quaff gyvel};
#alias ap {gg anti;quaff anti};

#nop SECTION: STATE;

#nop COMBAT STATE;
#event {VARIABLE UPDATED opponent_combat_style_clr} {

#if { "\$opponent_combat_style" == "no opponent"
&& "\$state" == "fighting"
&& "\$world_time" != ""
&& "\$room_map" != "" } {
#var state standing;
#echo {};
#show {You stop fighting.};
};
#elseif { "\$opponent_combat_style" != "no opponent"
&& "\$character_name" == "%w"
&& "\$state" != "fighting"
&& "\$world_time" != ""
&& "\$room_map" != "" } {
#var state fighting;
#echo {};
#show {You start fighting!};
};
};

#nop LOG STATE;
#event {VARIABLE UPDATED state} {
LOG_FIRST;
#if { "\$state" == "sleeping" } {
#var status_clr <caf>;
};
#elseif { "\$state" != "sleeping" } {
#var status_clr <g13>;
};
#var {topright[status]} {\$status_clr The \$race \$class is \$state in the \$topright[terrain]<088>};
};

#nop GET CHAR STATE I.E. SLEEPING / FIGHTING / RESTING;
#var state {};

#act {^You can't see anything, you're sleeping!} {#var state sleeping};
#act {^You go to sleep in %1.} {#var state sleeping};
#act {^You go to sleep on %1.} {#var state sleeping};
#act {^You can't do that while resting.} {#var state resting};
#act {^In your dreams, or what?} {#var state sleeping};
#act {^You go to sleep.} {#var state sleeping};
#act {^You wake and stand up.} {#var state standing} {1};

#act {^You rest.} {#var state resting};
#act {^You sit down at the table.} {#var state sitting};
#act {^You stop resting.} {#var state sitting};
#act {^You are already sitting down.} {#var state sitting};
#act {^You sit down.} {#var state sitting};
#act {^You stand up.} {#var state standing};
#act {^You are already standing.} {#var state standing};
#act {^You are already resting.} {#var state resting};
#act {^You wake and sit up.} {#var state sitting};
#act {^You wake up and start resting.} {#var state resting};

#nop SECTION: GET DIMENSIONS;

#nop these measurments are for the large top right tmux pane;
#script {pane_width} {tmux display -p -t 3 '#{pane_width}'};
#script {pane_height} {tmux display -p -t 3 '#{pane_height}'};
#math {pane_height[1]} { \$pane_height[1] + 1 };

#nop SECTION: MSDP;

#EVENT {SESSION CONNECTED}
{
#variable TELNET[IAC] \xFF;
#variable TELNET[DONT] \xFE;
#variable TELNET[DO] \xFD;
#variable TELNET[WONT] \xFC;
#variable TELNET[WILL] \xFB;
#variable TELNET[SB] \xFA;
#variable TELNET[SE] \xF0;
#variable TELNET[MSDP] \x45;
#variable MSDP[VAR] \x01;
#variable MSDP[VAL] \x02;
#variable MSDP[TABLE_OPEN] \x03;
#variable MSDP[TABLE_CLOSE] \x04;
#variable MSDP[ARRAY_OPEN] \x05;
#variable MSDP[ARRAY_CLOSE] \x06;
#variable {REPORTABLE_VARIABLES}{
{AC_BASH};
{AC_MAGIC};
{AC_PIERCE};
{AC_SLASH};
{ADRENALINE};
{AFFECTS};
{AREA_NAME};
{CHANNELS};
{CHARACTER_NAME};
{CHII_BOLT};
{CLASS};
{COMBAT_STYLE};
{CON};
{CON_PERM};
{DAMROLL};
{DEX};
{DEX_PERM};
{ENERGY};
{ENERGY_MAX};
{EXPERIENCE};
{EXPERIENCE_MAX};
{EXPERIENCE_TNL};
{GOLD};
{GROUP};
{HEALTH};
{HEALTH_MAX};
{HINT};
{HITROLL};
{HUNGER};
{INT};
{INT_PERM};
{INVENTORY};
{LEVEL};
{MANA};
{MANA_MAX};
{MOVEMENT};
{MOVEMENT_MAX};
{OPPONENT_COMBAT_STYLE};
{OPPONENT_HEALTH};
{OPPONENT_HEALTH_MAX};
{OPPONENT_LEVEL};
{OPPONENT_NAME};
{OPPONENT_WEAPON_OFFH};
{OPPONENT_WEAPON_TYPE};
{OVERLORD};
{OVERLORD_NAME};
{POKER};
{POWER};
{QUESTOR};
{RACE};
{ROOM_DESC};
{ROOM_EXITS};
{ROOM_MAP};
{ROOM_NAME};
{ROOM_TERRAIN};
{ROOM_VNUM};
{SAVING_AFF};
{SAVING_MAL};
{SAVING_MEN};
{SHIELD};
{SHIELD_MAX};
{STR};
{STR_PERM};
{TANK_NAME};
{TARGET};
{THIRST};
{TITLE};
{WEAPON_OFFH};
{WEAPON_TYPE};
{WEIGHT};
{WEIGHT_MAX};
{WIMPY};
{WIS};
{WIS_PERM};
{WORLD_TIME};};
#nop Turn telnet debug on if there are problems.;
#config {debug telnet} {off};
};

#EVENT {IAC WILL MSDP}
{
#send {\$TELNET[IAC]\$TELNET[DO]\$TELNET[MSDP]\};
report
};

#alias {replace_color_codes} {

#replace {%1} {\`1} {<018>}; #nop {RED};
#replace {%1} {\`2} {<028>}; #nop {GREEN};
#replace {%1} {\`3} {<038>}; #nop {YELLOW};
#replace {%1} {\`4} {<048>}; #nop {BLUE};
#replace {%1} {\`5} {<058>}; #nop {PURPLE};
#replace {%1} {\`6} {<068>}; #nop {CYAN};
#replace {%1} {\`7} {<eee>}; #nop {WHITE};
#replace {%1} {\`8} {<ccc>}; #nop {GRAY};
#replace {%1} {\`9} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {\`!} {<118>}; #nop {RED BOLD};
#replace {%1} {\`@} {<128>}; #nop {GREEN BOLD};
#replace {%1} {\`#} {<138>}; #nop {YELLOW BOLD};
#replace {%1} {\`\\$} {<148>}; #nop {BLUE BOLD};
#replace {%1} {\`%} {<158>}; #nop {PURPLE BOLD};
#replace {%1} {\`^} {<168>}; #nop {CYAN BOLD};
#replace {%1} {\`&} {<178>}; #nop {WHITE BOLD};
#replace {%1} {\`\`} {<088>}; #nop {RESET TO DEFAULT};

};

#alias {strip_color_codes} {
#replace {%1} {\`1} {};#replace {%1} {\`2} {};#replace {%1} {\`3} {};
#replace {%1} {\`4} {};#replace {%1} {\`5} {};#replace {%1} {\`6} {};
#replace {%1} {\`7} {};#replace {%1} {\`8} {};#replace {%1} {\`9} {};
#replace {%1} {\`!} {};#replace {%1} {\`@} {};#replace {%1} {\`#} {};
#replace {%1} {\`\\$} {};#replace {%1} {\`%} {};#replace {%1} {\`^} {};
#replace {%1} {\`&} {};#replace {%1} {\`\`} {};
};

#EVENT {IAC SB MSDP} {

#nop Set all variables to lower case;
#format {test} {%l} {%0};
#variable {\$test} {%1};

#if { "%0" == "ROOM_MAP" } {
#var {room_map} {%1};
replace_color_codes room_map;
#line log map.log \$room_map;
};

#elseif { "%0" == "AFFECTS" } {
#var {topright[affe]} {%1};
};

#elseif { "%0" == "INVENTORY" } {
#var {topright[inve]} {%1};
};

#elseif { "%0" == "GROUP" } {
#var {topright[group]} {%1};
};

#elseif { "%0" == "RACE" } {
#var {race} {%1};
#format {race} {%l} {\$race};
};

#elseif { "%0" == "HUNGER" } {
#var {hunger} {%1};
#if { "\$hunger" == "[*****]" } {
#var hungry false;
} {
#var hungry true;
};
};

#elseif { "%0" == "THIRST" } {
#var {thirst} {%1};
#if { "\$thirst" == "[*****]" } {
#var thirsty false;
} {
#var thirsty true;
};
};

#elseif { "%0" == "WORLD_TIME" } {
#var tick 35;
#if { "%1" != "" && "%1" != " " } {
#tick {tick} {#math {tick} {\$tick-1}} {1};
#var {time} {%1};
#regexp {\$time} {{.*} {(.*)}} {#var hour &1;#var gentime &2};
};
};

#elseif { "%0" == "CHANNELS" } {
#var {channels} {%1};
replace_color_codes channels;
#replace {channels} {\n} { };
};

#elseif { "%0" == "COMBAT_STYLE" } {
#var {combat_style} {%1};
strip_color_codes combat_style;
#var {combat_style_clr} {%1};
replace_color_codes combat_style_clr;
};

#elseif { "%0" == "OPPONENT_NAME" } {
#var {opponent_name} {%1};
#if { "\$aggresive" == "true" } {
#if { "%1" != "None." } {#var {player} {%1}};
};
};

#elseif { "%0" == "OPPONENT_WEAPON_TYPE" } {
#var {opponent_weapon_type} {%1};
strip_color_codes opponent_weapon_type;
#var {opponent_weapon_type_clr} {%1};
replace_color_codes opponent_weapon_type_clr;
};

#elseif { "%0" == "OPPONENT_WEAPON_OFFH" } {
#var {opponent_weapon_offh} {%1};
strip_color_codes opponent_weapon_offh;
#var {opponent_weapon_offh_clr} {%1};
replace_color_codes opponent_weapon_offh_clr;
};

#elseif { "%0" == "OPPONENT_COMBAT_STYLE" } {
#var {opponent_combat_style} {%1};
strip_color_codes opponent_combat_style;
#var {opponent_combat_style_clr} {%1};
replace_color_codes opponent_combat_style_clr;
};

#elseif { "%0" == "CHARACTER_NAME" } {
#var {character_name} {%1};
#if { "\$room_exits" == "" } {
#var {show_exits} {unknown};
#var state sleeping;
} {#var state standing};
};

#elseif { "%0" == "ROOM_EXITS" } {
#var {room_exits} {%1};
#foreach {*room_exits[]} {list_exits} {#var new {\$new \$list_exits}};
#var {list_exits} {\$new};
#var {new} {[Exits:};
#var {show_exits} {\$list_exits]};
};

#elseif { "%0" == "ROOM_TERRAIN" } {
#var {room_terrain} {%1};
#if { "\$room_terrain" == "" } {
#var {room_terrain} {unknown};
};
#var {topright[terrain]} {%1};
#var {topright[status]} {\$status_clr The \$race \$class is \$state in the \$topright[terrain]<088>};
};

#nop stuff to prepare for first/second/third.log;
#math {check_xptnl} {\$experience_tnl - \$experience};
#if { \$check_xptnl > 0 } {#var {xptnl} {\$check_xptnl}};
#if {"\$opponent_name" == ""} {#var opponent_name None.};

#nop calculate life, mana, move percentages.;
#math {mylife} { 100 * \$health / \$health_max };
#math {mymana} { 100 * \$mana / \$mana_max };
#math {mymove} { 100 * \$movement / \$movement_max };

#nop colorize my opponents hp/mp/mv percent.;
#if { \$opponent_health > 80 } {#var {oppolife_clr} {<g13>}};
#elseif { \$opponent_health > 59 && \$opponent_health < 81 } {
#var {oppolife_clr} {<088>};
};
#elseif { \$opponent_health < 30 } {#var {oppolife_clr} {<118>}};
#elseif { \$opponent_health < 60 } {#var {oppolife_clr} {<138>}};
#if { \$opponent_health == 0 } {#var {oppolife_clr} {<g13>}};

#nop colorize my hp/mp/mv percent.;
#if { \$mylife > 80 } {#var {mylife_clr} {<g13>}};
#elseif { \$mylife > 59 && \$mylife < 81 } {#var {mylife_clr} {<088>}};
#elseif { \$mylife < 30 } {#var {mylife_clr} {<118>}};
#elseif { \$mylife < 60 } {#var {mylife_clr} {<138>}};

#if { \$mymana > 80 } {#var {mymana_clr} {<g13>}};
#elseif { \$mymana > 59 && \$mymana < 81 } {#var {mymana_clr} {<088>}};
#elseif { \$mymana < 30 } {#var {mymana_clr} {<118>}};
#elseif { \$mymana < 60 } {#var {mymana_clr} {<138>}};

#if { \$mymove > 80 } {#var {mymove_clr} {<g13>}};
#elseif { \$mymove > 59 && \$mymove < 81 } {#var {mymove_clr} {<088>}};
#elseif { \$mymove < 30 } {#var {mymove_clr} {<118>}};
#elseif { \$mymove < 60 } {#var {mymove_clr} {<138>}};

#if { \$tick < 7 } {#var tick_clr {<018>}};
#if { \$tick < 15 && \$tick > 6 } {#var tick_clr {<038>}};
#if { \$tick > 14 } {#var tick_clr {<088>}};

#if { "\$tank_name" != "" } {
#regexp {\$group[\$tank_name]} {"hp":%+,"mp":%+} {#var tank_life &1};
};

#if { \$tank_life > 80 } {#var {tank_clr} {<g13>}};
#elseif { \$tank_life > 59 && \$tank_life < 81 } {#var {tank_clr} {<088>}};
#elseif { \$tank_life < 30 } {#var {tank_clr} {<118>}};
#elseif { \$tank_life < 60 } {#var {tank_clr} {<138>}};

#var percent_sign {%};
#if { "\$tank_name" == "" } { #var tank_life {};#var percent_sign {};#var tank_clr {}};

#if { "\$character_name" == "%w" } {
LOG_FIRST;
LOG_SECOND;
LOG_THIRD;
LOG_FOURTH;
LOG_TOPLEFT;
LOG_BOTTOMLEFT;
#sys {tmux set -g status-right ""};
TMUX_BOTTOM_TEXT;
#showme {<g13>\$room_name \$tank_clr\$tank_name <g13>\$tank_life\$percent_sign<088>} {-2};
};
};

#var room_name {};
#var tank_name {};

#nop MSDP STUFF;
#nop **********;
#EVENT {IAC SB MSDP IAC SE}
{
#if {&{room_exits} == 0}
{
#return
};
};

#EVENT {IAC SB MSDP ROOM}
{
#variable {ROOM} {%1};
};

#ALIAS {report}
{
#nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
#variable result {\$TELNET[IAC]\$TELNET[SB]\$TELNET[MSDP]\$MSDP[VAR]REPORT};
#foreach {*REPORTABLE_VARIABLES[]} {tmp}
{
#variable result {\$result\$MSDP[VAL]\$tmp}
};
#send {\$result\$TELNET[IAC]\$TELNET[SE]\}
};

#nop PROMPT LOGGING STUFF;
#nop ********************;

#alias {TMUX_BOTTOM_TEXT} {#sys {tmux set -g status-left ""};};

#alias {LOG_FIRST} {
#line log first.log {
\n
<g13>\$mylife% \$mylife_clr\life<088> | <g13>\$mymana% \$mymana_clr\mana<088> | <g13>\$mymove% \$mymove_clr\move<088>\n
\n
<088>\$weapon_type<g13>/<088>\$weapon_offh <g13>[<088>\$combat_style_clr<g13>]<088>\n
\n
\$gold gold <g13>|<088> \$tick_clr\$gentime<088> <g13>|<088> \$xptnl tnl\n
\n
};
};

#alias {LOG_SECOND} {
#line log second.log {
\n
<g13>\$opponent_health% \$oppolife_clr\$opponent_name<088> | <g13>\$overlord% lord<088>\n
\n
\$opponent_weapon_type_clr<g13>/<088>\$opponent_weapon_offh_clr <g13>[<088>\$opponent_combat_style_clr<g13>]<088>\n
\n
\$weight/\$weight_max lbs <g13>|<088> \$wimpy/\$health_max hp wimpy\n
\n
};
};

#alias {LOG_THIRD} {
#line log third.log {
\n
<g13>\$area_name<088> @ <g13>\$hour \$adrenaline<088>\n
\n
<g13>Armor<088> vs Pierce: \$ac_pierce <g13>Saving Throws<088>
\n vs Bash: \$ac_bash Afflictive: \$saving_aff
\n vs Slash: \$ac_slash Maledictive: \$saving_mal
\n vs Magic \$ac_magic Mental: \$saving_men\n
};
};

#alias {LOG_FOURTH} {
#line log fourth.log {
\n <g13>Consti: <088>\$con<g13>|<088>\$con_perm <g13>Rank: <088>\$level <088>\n
\n
<g13>Streng:<088> \$str<g13>|<088>\$str_perm <g13>H:\$hunger <088>\n
<g13>Intell:<088> \$int<g13>|<088>\$int_perm <g13>T:\$thirst <088>\n
<g13>Wisdom:<088> \$wis<g13>|<088>\$wis_perm <g13>Hit: <088>\$hitroll <088>\n
<g13>Dexter:<088> \$dex<g13>|<088>\$dex_perm <g13>Dam: <088>\$damroll <088>\n
};
};

#alias {LOG_TOPLEFT} {
#line log topleft.log {
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
};
};

#alias {LOG_BOTTOMLEFT} {
#line log bottomleft.log {
\n
\n
\n
\n
\n
\n
};
};

#nop LOG TOPRIGHT SCREEN;
#var logspaces 0;
#var loglines 5;

#var status_clr {<g13>};

#event {VARIABLE UPDATED topright} {

#if { "\$map_pane" != "true" } {

#var logspaces 0;
#var loglines 5;

#math logspaces {\$pane_height[1] - \$loglines};

#\$logspaces {#line log topright.log \n};

#line log topright.log { <g13>INVENTORY:<088> };

#foreach {*topright[inve][]} {item} {

#math {loglines} {\$loglines + 1};

#if { "*topright[inve][\$item]" > "1" } {

#line log topright.log { \$item (\$topright[inve][\$item])};

} {

#line log topright.log { \$item };

};

};

#line log topright.log \n;

#line log topright.log { <g13>AFFECTS:<088> };

#if { "*topright[affe][\$spell]" == "0" } {

#line log topright.log { You are not under any affects.};

} {

#foreach {*topright[affe][]} {spell} {

#math {loglines} {\$loglines + 1};

#line log topright.log { \$spell (\$topright[affe][\$spell]) };
};
};

#line log topright.log { \n};

#line log topright.log { <g13>GROUP:<088> };
#foreach {*topright[group][]} {memb} {

#math {loglines} {\$loglines + 1};

#regexp {\$topright[group][\$memb]} {"hp":%d,"mp":%d} {

#if { &1 <= 49 } {#var hp_clr <018> };
#elseif { &1 >= 50 } {#var hp_clr <088> };

#if { &2 <= 49 } {#var mp_clr <048> };
#elseif { &2 >= 50 } {#var mp_clr <088> };

#if { "\$memb" != "\$character_name" } {
#line log topright.log { <088>[\$hp_clr &1% life<088>\$mp_clr &2% mana<088> ] \$memb <088> };
};

};

};

#line log topright.log { \n};
#line log topright.log { \$topright[status]};
};
};

#nop SECTION: MOVING AROUND;

#var player {};
#var murder murder;

#mac {^H} {w};
#mac {^J} {s};
#mac {^K} {n};
#mac {^L} {e};
#mac {^O} {u};
#mac {^>} {d};
#mac {^M} {m};
#mac {^U} {whe};
#mac {^I} {\$murder \$player};
#mac {^<} {flee};
#mac {^*} {scan};

#nop LOG SESSION;
#nop ***********;
#event {VARIABLE UPDATED character_name} {
#log append \$character_name.log;
};

#nop ADD YOUR SCRIPTS HERE! 'extra.tt' ;

#read extra.tt;

#nop SECTION: CONNECTION;

#EVENT {SESSION DISCONNECTED} {
#if { "\$reset" != "true" } {
ARTT_SHUTDOWN;
#end;
};
#elseif { "\$reset" == "true" } {
#var reset false;
};
};

#alias {ARTT_SHUTDOWN} {
#sys {tmux killp -a -t 2;};
#sys {rm map.log;};
#sys {rm first.log;};
#sys {rm second.log;};
#sys {rm third.log;};
#sys {rm fourth.log;};
#sys {rm bottomleft.log;};
#sys {rm topleft.log;};
#sys {rm topright.log;};
#sys {rm ar.tt;};
#sys {rm ar.tmux.conf;};
};

#nop enter your characters name;

#act {By what name do you wish to be remembered?} {
#if { "\$autologin" == "true" } {\$charname;#line gag};
};

#act {By what name do you wish to be known?} {
#if { "\$autologin" == "true" } {\$charname;#line gag};
};

#act {Password:} {
ARTT_STARTUP;
#if { "\$autologin" == "true" } {\$password;#line gag};
};

#alias {ARTT_STARTUP} {
#split 0 1;
#show { } {-2};
#screen get ROWS rows;
#screen get COLS cols;
#screen get HEIGHT height;
#screen get WIDTH width;
#var {new} {[Exits:};
};

#nop THE GOOD STUFF;
#ses abandonedrealms abandonedrealms.com 9000;

#class artt close;
EOF

cat > ar.tmux.conf <<EOF
# reload config file (change file location to your the tmux.conf you want to use)
bind r source-file ~/.tmux.conf

# panes
set -g pane-border-style 'fg=black'
set -g pane-active-border-style 'fg=black'

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style 'fg=white'

set -g status-left ''
set -g status-left-length 100

set -g status-right-style 'fg=white'
set -g status-right ''
set -g status-right-length 100

setw -g window-status-current-style 'fg=gray bg=black'
setw -g window-status-current-format ''

setw -g window-status-style 'fg=red bg=black'
setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '

setw -g window-status-bell-style 'fg=yellow bg=red bold'
EOF

sleep 1

tmux killp -a -t 0
> fourth.log
tmux split -v -l 8 'tail -f fourth.log'
> third.log
tmux split -h -b -l 135 'tail -f third.log'
> second.log
tmux split -h -b -l 90 'tail -f second.log'
> first.log
tmux split -h -b -l 50 'tail -f first.log'
> bottomleft.log
tmux split -h -b -l 11 'tail -f bottomleft.log'
tmux selectp -t 0
> topleft.log
tmux split -h -b -l 11 'tail -f topleft.log'
> map.log
tmux split -v -l 11 'tail -f map.log'
tmux selectp -t 2
> topright.log
tmux split -h -l 80 'tail -f topright.log'
tmux selectp -t 2
tmux source ar.tmux.conf
tt++ ar.tt