Tick.tf

From AvatarWiki
Jump to navigation Jump to search

A modified tick.tf. It's backwards compatible with tick.tf as found in tflib. Changes are in the comments below.

It also provides a means to other scripts to have something executed on the tick. See tick_exe in the script, or affects.tf for a usage example of this.

;Bug reports, suggestions and/or diffs are appreciated, '''sulfar''' _AT_ ''inbox'' +DOT+ ''com''

;;;; Tick counting
;;;; This file implements several tick counting commands similar to those
;;;; found in tintin, useful on Diku muds.

;;;; usage:
/echo -aCyellow %% /tick                 Display the time remaining until next tick
/echo -aCyellow %% /tickon               Reset and start the tick counter
/echo -aCyellow %% /tickoff              Stop the tick counter
/echo -aCyellow %% /tickset              Reset and start the tick counter
/echo -aCyellow %% /ticksize <n>         Set the tick length to <n> seconds (default is 28.45)
/echo -aCyellow %% /tickshow             Toggle tick messages
/echo -aCyellow %% /tick+                Increase the ticksize with 0.05 seconds
/echo -aCyellow %% /tick-                Decrease the ticksize with 0.05 seconds

;;;; This is a modified version of tick.tf as found in tf-lib
;;;; Modifications:
;;; Mod - Made tick warning catch the eye
;;; New - 5 seconds tick warning
;;; Mod - /tickoff also kills the 5 seconds warning
;;; New - /tickshow, you can now run the counter without seeing a message
;;;                  if you need the counter, you can /tickshow to see the
;;;                  messages and have a synced tick counter ready
;;; Mod - Made /tickset show a message if show_tick is 1
;;; New - /tick+ and /tick-
;;; New - Triggers to sync tick counter
;;; New - Send TICK_EXE to the server but intercept it, see tick_exe below

/loaded __TFLIB__/tick.tf

;Time between ticks in seconds
/set ticksize=28.45

/set next_tick=0
/set _tick_pid1=0
/set _tick_pid2=0
/set _tick_pid3=0
/set show_tick=1
/set tickon_time 0

/def -i tick_warn = /if (show_tick) /echo %%% Next tick in 10 seconds.%;/endif
/def -i tick_warn2 = /if (show_tick) /echo %%% Next tick in 5 seconds.%;/endif
/def -i tick_action = /if (show_tick) /echo %%%   ---===> TICK <===---   ---===> TICK <===---   ---===> TICK <===---%;/endif

/def -i tick = \
        /if (next_tick) \
                /eval /echo %%% $$[next_tick - $(/time @)] seconds until tick%;\
        /else \
                /echo -e %% Tick counter is not running.%;\
        /endif

;Send TICK_EXE to the server,
/def tick_exe = /send -h TICK_EXE

;but intercept it with a send hook.
;If you'd change the hook please be aware it needs a body to do anything at all!
/def -i -p990 -mglob -h'send TICK_EXE' send_hook_TICK_EXE = /test

;If an other script needs to do anything on the tick all you need to do is
;create a similar send hook with a higher priority, like
;/def -E(some_boolean) -i -p991 -F -mglob -h'send TICK_EXE' myscript_tick = /some_command


;tick_on calls /tick_exe if it didn't do so in the past 4 seconds
/def -i tickon = \
        /let tick_cur_t $(/time @)%;\
        /if (tickon_time + 4 < tick_cur_t) \
                /tick_exe%;\
        /endif%;\
        /set tickon_time $(/time @)%;\
        /tickoff%;\
        /@test next_tick := $(/time @) + ticksize %;\
        /repeat -$[ticksize - 10] 1 \
                /set _tick_pid1=0%%;\
                /tick_warn%;\
        /set _tick_pid1=%?%;\
        /repeat -$[ticksize - 5] 1 \
                /set _tick_pid3=0%%;\
                /tick_warn2%;\
        /set _tick_pid3=%?%;\
        /repeat -%ticksize 1 \
                /set _tick_pid2=0%%;\
                /tick_action%%;\
                /tickon%;\
        /set _tick_pid2=%?

/def -i tickoff = \
        /@test _tick_pid1 & (kill(_tick_pid1), _tick_pid1:=0)%;\
        /@test _tick_pid3 & (kill(_tick_pid3), _tick_pid3:=0)%;\
        /@test _tick_pid2 & (kill(_tick_pid2), _tick_pid2:=0)%;\
        /set next_tick=0

/def -i tickset = \
        /if (show_tick) \
                /eval /echo %%% Tick counter offset $$[next_tick - $(/time @)]%;\
                /echo %%%   ---===> TICK <===---   ---===> TICK <===---  synchronized%;\
;A spellup dropping was causing a lot of tick sync spam, so:
                /set show_tick 0%;\
                /repeat -0:0:2 1 /set show_tick 1%;\
        /endif%;\
        /tickon


/def -i ticksize = /set ticksize %*

/def -i tickshow = \
        /set show_tick $[!show_tick] %;\
        /if (show_tick) \
                /echo %% Now showing tick messages%;\
        /else \
                /echo %% No longer showing tick messages%;\
        /endif

;macros to fiddle with ticksize
/def -i tick+ = /set ticksize $[ticksize + 0.05] %;/echo Ticksize is now %{ticksize} seconds.
/def -i tick- = /set ticksize $[ticksize - 0.05] %;/echo Ticksize is now %{ticksize} seconds.


;triggers to sync tick counter
/def -i -p200 -F -t"Corpse of * decays into dust." tick_corpse_decays = /tickset
/def -i -p200 -F -t"Corpse of * decays leaving only a stench." tick_corpse_decays2 = /tickset
/def -i -p200 -F -t"Corpse of * dissolves into smoke." tick_corpse_smokes = /tickset
/def -i -p200 -F -t"Corpse of * gets taken by imps." tick_corpse_imped = /tickset
/def -i -p200 -F -t"Corpse of * spontaneously combusts leaving only ash." tick_corpse_combusts = /tickset
/def -i -p200 -F -t"Corpse of * liquifies into nothing." tick_corpse_liquifies = /tickset
/def -i -p200 -F -t"Corpse of * is consumed by maggots." tick_corpse_consumed = /tickset
/def -i -p200 -F -t"Corpse of * breaks apart into pieces." tick_corpse_breaks = /tickset
/def -i -p200 -F -t"An imp grabs * and vanishes." tick_imp_grabs = /tickset
/def -i -p200 -F -t"* decomposes." tick_something_decomposes = /tickset
/def -i -p200 -F -t"The portal crackles suddenly, flares brightly, and is gone!" tick_portal = /tickset
/def -i -p200 -F -t"The room shudders as the nexus implodes in on itself and vanishes!" tick_nexus = /tickset
/def -i -p200 -F -t"You can't take the bright sunlight!" tick_no_sun_self = /tickset
/def -i -p200 -F -mregexp -t"^([^ ]+) screams in pain from the sunlight!$" tick_no_sun_other = /tickset
/def -i -p200 -F -t"The sky is getting cloudy." tick_sky_cloudy = /tickset
/def -i -p200 -F -t"The clouds disappear." tick_clouds_disappear = /tickset
/def -i -p200 -F -t"It starts to rain!" tick_rain_starts = /tickset
/def -i -p200 -F -t"The rain has stopped." tick_rain_stops = /tickset
/def -i -p200 -F -t"Lightning flashes in the sky." tick_lightning_flashes = /tickset
/def -i -p200 -F -t"The lightning has stopped." tick_lightning_stopped = /tickset
/def -i -p200 -F -t"The day has begun." tick_day_begun = /tickset
/def -i -p200 -F -t"The night has begun." tick_night_begun = /tickset
/def -i -p200 -F -t"The sun slowly disappears in the west." tick_sun_disappears = /tickset
/def -i -p200 -F -t"The sun rises in the east." tick_sun_rises = /tickset
/def -i -p200 -F -t"The protective aura fades from around your body." tick_sanctuary = /tickset
/def -i -p200 -F -t"You slowly come out of your rage." tick_frenzy = /tickset
/def -i -p200 -F -t"You feel less perceptive." tick_alertness = /tickset
/def -i -p200 -F -t"Your senses return to normal." tick_heighten_senses = /tickset
/def -i -p200 -F -t"You feel less righteous." tick_bless = /tickset
/def -i -p200 -F -t"You feel less focused." tick_concentration = /tickset
/def -i -p200 -F -t"Your battle sense has faded." tick_anticipate = /tickset
/def -i -p200 -F -t"Your God's presence disappears." tick_prayer = /tickset
/def -i -p200 -F -t"You no longer perceive auras." tick_detect_alignment = /tickset
/def -i -p200 -F -t"You feel less armored." tick_armor = /tickset
/def -i -p200 -F -t"Your Aura of Holiness fades..." tick_holy_aura = /tickset
/def -i -p200 -F -t"You are no longer protected by your God." tick_holy_armor = /tickset
/def -i -p200 -F -t"You feel less fatigued." tick_racial_fatigue = /tickset
/def -i -p200 -F -t"One of your Exhausted spells has refreshed." tick_exhausted = /tickset
/def -i -p200 -F -t"Your pulse slows and your body returns to normal." tick_regeneration = /tickset
/def -i -p200 -F -t"You no longer feel invincible!" tick_invincibility = /tickset
/def -i -p200 -F -t"Your lungs adapt to oxygen once again." tick_water_breathing = /tickset
/def -i -p200 -F -t"Your skin softens and returns to normal." tick_iron_skin = /tickset
/def -i -p200 -F -t"Your skin feels soft again." tick_stone_skin = /tickset
/def -i -p200 -F -t"Your force shield shimmers then fades away." tick_shield = /tickset
/def -i -p200 -F -t"You feel weaker." tick_giant_strength = /tickset
/def -i -p200 -F -t"Your calcified flesh softens and returns to normal." tick_calcify = /tickset
/def -i -p200 -F -t"You feel lighter as your bones return to normal." tick_steel_skeleton = /tickset
/def -i -p200 -F -t"You gain a sense of reality." tick_overconfidence = /tickset
/def -i -p200 -F -t"The voices in your head fall silent." tick_scramble = /tickset
/def -i -p200 -F -t"You feel less savvy." tick_savvy = /tickset
/def -i -p200 -F -t"You no longer feel quite so mellow." tick_calm = /tickset
/def -i -p200 -F -t"You feel less insightful." tick_acumen = /tickset
/def -i -p200 -F -t"Your innate frenzy subdues down to normal." tick_racial_frenzy = /tickset