Mercurial > hg > batmud > ggrtf
changeset 42:8bf52a7380ef
New /defhook macro added for making direct hook-settings.
New keyboard movement (moves binded to /prmove) handling code using hooks.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 13 Sep 2005 15:07:43 +0000 |
parents | 2e3df881382a |
children | 224a5962ca1a |
files | ggrtf.tf |
diffstat | 1 files changed, 96 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/ggrtf.tf Tue Sep 13 11:15:27 2005 +0000 +++ b/ggrtf.tf Tue Sep 13 15:07:43 2005 +0000 @@ -48,6 +48,18 @@ /set status_pad=_ /load map.tf +;; General settings +/set set_plrname= + +;; Misc +/set battle_target=off +/set battle_st=off +/set spell_st=off +/set skill_st=off +/set battle_ripfuncs= +/set battle_roundfuncs= +/set cast_info= + ;; Counters /set cnt_casts=0 /set cnt_scasts=0 @@ -71,12 +83,6 @@ /set cnt_fskills=0 /set cnt_fuskills=0 -/set battle_target=off -/set battle_st=off -/set spell_st=off -/set battle_ripfuncs= -/set battle_roundfuncs= -/set cast_info= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Helper functions, etc. @@ -137,6 +143,11 @@ /endif ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Return a color definition based on [n, nmax] (useful for hp/sp/ep lites) +/def -i prgetcolor =\ + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; List available options /def -i opts_dolist =\ /while ({#})\ @@ -156,12 +167,14 @@ /shift%;\ /done + /def -i opts =\ /msq ,----------------.%;\ /msq | @{BCgreen}ggrTF@{n} @{Cyellow}Settings@{n} |%;\ /msq +----------------+----------------------------------------------------.%;\ /opts_dolist %{lst_options}%;\ /settings_dolist %{lst_settings}%;\ +/settings_dolist %{lst_hooks}%;\ /msq `---------------------------------------------------------------------' @@ -172,7 +185,15 @@ /if (!getopts("n:d:", "")) /msq ERROR! Invalid toggle creation command!%;/break%;/endif%;\ /set lst_options=%{opt_n} %{lst_options}%;\ /set opt_%{opt_n}_d=%{opt_d}%;\ - /eval /def -i %{opt_n} = /if ({opt_%{opt_n}}=~"on") /set opt_%{opt_n}=off%%%;/let qstr=@{Cred}OFF@{n}%%%;/else /set opt_%{opt_n}=on%%%;/let qstr=@{BCgreen}ON@{n}%%%;/endif%%%;/msq @{Cyellow}%{opt_d}@{n} [%%%{qstr}] + /eval /def -i %{opt_n} =\ + /if ({opt_%{opt_n}}=~"on")\ + /set opt_%{opt_n}=off%%%;\ + /let qstr=@{Cred}OFF@{n}%%%;\ + /else \ + /set opt_%{opt_n}=on%%%;\ + /let qstr=@{BCgreen}ON@{n}%%%;\ + /endif%%%;\ + /msq @{Cyellow}%{opt_d}@{n} [%%%{qstr}] ;; Settings /set lst_settings= @@ -197,22 +218,41 @@ /if ({qrvals}>0)\ /set set_%{opt_n}=%%%{1}%%%;\ /msq @{Cyellow}%{opt_n}@{n} : Set to [@{BCgreen}%%%{set_%{opt_n}}@{n}]%%%;\ - /else \ - /msq @{Cyellow}%{opt_n}@{n} : @{BCred}Invalid setting@{n} [@{BCgreen}%%%{1}@{n}]!%%%;\ - /endif%%%;\ /else \ + /msq @{Cyellow}%{opt_n}@{n} : @{BCred}Invalid setting@{n} [@{BCgreen}%%%{1}@{n}]!%%%;\ + /endif%%%;\ + /else \ /msq @{BCred}/%{opt_n}@{n} - @{Cyellow}%{opt_d}@{n} [@{BCgreen}%%%{set_%{opt_n}_s}@{n}]%%%;\ - /endif - + /endif + +;; Function hook setting +/set lst_hooks= +/def -i defhook =\ + /if (!getopts("n:d:s:h:", "")) /msq ERROR! Invalid function hook setting creation command!%;/break%;/endif%;\ + /set lst_hooks=%{opt_n} %{lst_hooks}%;\ + /set set_%{opt_n}_d=%{opt_d}%;\ + /set set_%{opt_n}_s=%{opt_s}%;\ + /eval /def %{opt_n} =\ + /if ({#})\ + /chksetting %%%{1} %%%{set_%{opt_n}_s}%%%;\ + /if ({qrvals}>0)\ + /set set_%{opt_n}=%%%{1}%%%;\ + /msq @{Cyellow}%{opt_n}@{n} : Set to [@{BCgreen}%%%{set_%{opt_n}}@{n}]%%%;\ + /eval /def -i %{opt_h}=/%{opt_h}_%%%{1} %%%%%*%%%;\ + /else \ + /msq @{Cyellow}%{opt_n}@{n} : @{BCred}Invalid setting@{n} [@{BCgreen}%%%{1}@{n}]!%%%;\ + /endif%%%;\ + /else \ + /msq @{BCred}/%{opt_n}@{n} - @{Cyellow}%{opt_d}@{n} [@{BCgreen}%%%{set_%{opt_n}_s}@{n}]%%%;\ + /endif + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Define some generic option toggles and settings /set opt_verbose=on -/set opt_pss=on /deftoggle -n"verbose" -d"Verbose (off = echo to client only)" /deftoggle -n"rshape" -d"Report enemy shape when it changes" /deftoggle -n"rrounds" -d"Report spell/skill rounds" -/deftoggle -n"peer" -d"Automatic peer on move" /deftoggle -n"rstat" -d"Report your hp/sp/ep every round" /deftoggle -n"pss" -d"Auto party short status" /deftoggle -n"info" -d"Cast/skill information in prompt" @@ -220,6 +260,7 @@ /set set_ripaction=off /defsetting -n"ripaction" -d"Set the action performed at RIP" -s"off dig eat get" + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Redefinable macros for user ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -231,40 +272,63 @@ /defripfunc eat treat_corpse /eat_corpse /defripfunc get trget_corpse /get_corpse + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Movement ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -/def -i -mglob -h'send {n|s|e|w|ne|sw|nw|se|u|d}' prmove_send = /set prmove_last=%*%;/status_update%;/send %* +;; Catch movement commands to update the status bar +/def -i -mglob -h'send {n|s|e|w|ne|sw|nw|se|u|d}' prmove_send =\ + /set prmove_last=%*%;\ + /status_update%;\ + /send %* +;; Normal movement +/def -i prmove_walk = /set prmove_last=%{1}%;/status_update%;@%{1} + +;; Autopeering /set set_prexpr=embedded -/def -i prmove = /set prmove_last=%{1}%;/status_update%;@%{1}%;\ -/if ({opt_peer}=~"on")\ +/def -i prmove_peer = /set prmove_last=%{1}%;/status_update%;@%{1}%;\ /if ({1}=~"n" | {1}=~"s") /let pd1=w%;/let pd2=e%;/endif%;\ /if ({1}=~"w" | {1}=~"e") /let pd1=n%;/let pd2=s%;/endif%;\ @@grep '(%{set_prexpr})' peer %{pd1}%;\ - @@grep '(%{set_prexpr})' peer %{pd2}%;\ - /endif + @@grep '(%{set_prexpr})' peer %{pd2} + +;; Ship movement +/deftoggle -n"cruise" -d"Cruise speed on ship (off = sail)" +/def -i prmove_ship = /set prmove_last=%{1}%;/status_update%;\ +/if ({opt_cruise}=~"on") @cruise %{1}%;/else @sail %{1}%;/endif + +;; Main handling macro for binding movemement keys, etc. +/defhook -n"move" -d"Keyboard movement hooks" -h"prmove" -s"walk ship peer" +/move walk + +;; 'view' on every ship move /def -i -F -mregexp -t"^The ship (sails|cruises) " ship_move = @view ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Status line +;; Status bar ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; These macros handle the statusbar functionality. Unfortunately +; some things (like channeller energy aura), etc. are hardcoded here, +; due to some complexities in modularizing them. This might get changed +; in future, though... + ;; Add value item (hp/sp/ep/etc) to status string /def -i status_add_val =\ -/eval /set qtval1v=$$[status_%{1}]%;\ -/eval /set qtval2v=$$[status_%{1}max]%;\ -/let qtval1=status_%{1}%;\ -/let qtval2=status_%{1}max%;\ -/let qtcolor=Cwhite%;\ -/if ({qtval1v} >= (qtval2v * 6 / 7)) /let qtcolor=BCgreen%;/endif%;\ -/if ({qtval1v} < (qtval2v * 6 / 7)) /let qtcolor=Cgreen%;/endif%;\ -/if ({qtval1v} < (qtval2v * 5 / 7)) /let qtcolor=BCyellow%;/endif%;\ -/if ({qtval1v} < (qtval2v * 4 / 7)) /let qtcolor=Cyellow%;/endif%;\ -/if ({qtval1v} < (qtval2v * 3 / 7)) /let qtcolor=Cred%;/endif%;\ -/if ({qtval1v} < (qtval2v * 2 / 7)) /let qtcolor=BCred%;/endif%;\ -/set status_pstr=%{status_pstr} :1 "[%{2}:" %{qtval1}:4:%{qtcolor} "/" %{qtval2}:4:BCgreen "]" + /eval /set qtval1v=$$[status_%{1}]%;\ + /eval /set qtval2v=$$[status_%{1}max]%;\ + /let qtval1=status_%{1}%;\ + /let qtval2=status_%{1}max%;\ + /let qtcolor=Cwhite%;\ + /if ({qtval1v} >= (qtval2v * 6 / 7)) /let qtcolor=BCgreen%;/endif%;\ + /if ({qtval1v} < (qtval2v * 6 / 7)) /let qtcolor=Cgreen%;/endif%;\ + /if ({qtval1v} < (qtval2v * 5 / 7)) /let qtcolor=BCyellow%;/endif%;\ + /if ({qtval1v} < (qtval2v * 4 / 7)) /let qtcolor=Cyellow%;/endif%;\ + /if ({qtval1v} < (qtval2v * 3 / 7)) /let qtcolor=Cred%;/endif%;\ + /if ({qtval1v} < (qtval2v * 2 / 7)) /let qtcolor=BCred%;/endif%;\ + /set status_pstr=%{status_pstr} :1 "[%{2}:" %{qtval1}:4:%{qtcolor} "/" %{qtval2}:4:BCgreen "]" ;; Add aura item /def -i status_add_aura =\