[Home] [Downloads] [Search] [Help/forum]

Gammon Software Solutions forum

See www.mushclient.com/spam for dealing with forum spam. Please read the MUSHclient FAQ!

[Folder]  Entire forum
-> [Folder]  MUSHclient
. -> [Folder]  General
. . -> [Subject]  Adding a debuff timer to the status bar that updates every second.

Home  |  Users  |  Search  |  FAQ
Username:
Register forum user name
Password:
Forgotten password?

Adding a debuff timer to the status bar that updates every second.

[Reply to this subject]  Reply to this subject   [New subject]  Start a new subject   [Refresh] Refresh page


Posted by Shinowa   (4 posts)  [Biography] bio
Date Sun 17 Apr 2011 03:58 PM (UTC)  quote  ]
Message
Hello everyone, I'm new to MUSHclient and new to LUA and I would like a bit of direction to accomplish a task!

I would like to cast a debuff on a target, have that debuff landing trigger a timer on my status bar that ticks down the seconds til the debuff wears off.

I did this in another mud client by creating a trigger that set a variable "HiltDuration" to 33, it then set off a while loop that waited 1 second, then added -1 to the variable, and cycled until 0, at which point it removed the debuff displayed from my status bar.

Here's the landing message...
"You deftly slam the pommel of your weapon into {&HiltTarget}'s hand, impairing his ability to parry."

Here's the "send" of the trigger...
#T+ Hilt [this line adds the debuff to the status bar]
#VAR HiltDur 33 [this line sets the duration to 33]
#WHILE (@HiltDur >= 0) {#WAIT 1000;#IF (@HiltDur = 0) { #T- Hilt } {#ADD HiltDur -1}} [this line has the while loop that updates the variable and removes the debuff from the status bar when it hits 0]

Curious how the status bar updates. Is it whenever a variable on it is updated, or like every second, or what?
[Go to top] top

Posted by Nick Gammon   Australia  (18,770 posts)  [Biography] bio   Forum Administrator
Date Reply #1 on Sun 17 Apr 2011 11:04 PM (UTC)  quote  ]

Amended on Sun 17 Apr 2011 11:05 PM (UTC) by Nick Gammon

Message
The status bar updates when you tell it to.

Based on the ideas here:

http://www.gammon.com.au/forum/?id=4956

This trigger will do it for you:


<triggers>
  <trigger
   custom_colour="2"
   enabled="y"
   expand_variables="y"
   match="You deftly slam the pommel of your weapon into @HiltTarget's hand, impairing his ability to parry."
   send_to="12"
   sequence="100"
  >
  <send>

require "wait"

require "wait"
wait.make (function ()

  for i = 33, 2, -1 do
    SetStatus (string.format ("Parry debuf expires in %i seconds", i))
    wait.time (1)
  end -- for
  
  SetStatus (string.format ("Parry debuf EXPIRING NOW!", i))
  wait.time (1)

  SetStatus ("Ready")

end) 

</send>
  </trigger>
</triggers>


Template:pasting For advice on how to copy the above, and paste it into MUSHclient, please see Pasting XML.


You need to have set up the variable HiltTarget which can be done in various ways.

- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

Posted by Shinowa   (4 posts)  [Biography] bio
Date Reply #2 on Wed 20 Apr 2011 03:11 AM (UTC)  quote  ]
Message
Very much appreciated, worked like a charm. I've tried to expand on it a bit and failed, but can't quite find my answers. I want to be able to have more than one debuff on the status bar and them not to alternate between which one it shows.

Here's how I changed the initial trigger.

<triggers>
  <trigger
   custom_colour="2"
   enabled="y"
   expand_variables="y"
   match="You deftly slam the pommel of your weapon into *'s hand, impairing his ability to parry."
   send_to="12"
   sequence="100"
  >
  <send> 
  
  SetVariable ("HiltDur", "33") 
  SetVariable ("HiltTar", "%1")

  require "wait"

  require "wait"
  wait.make (function ()

    for i = 33, 2, -1 do
      SetVariable ("HiltDur", "%i")
      wait.time (1)
    end -- for
  
   end) 


  </send>
  </trigger>
</triggers>


The first issue is that it is literally saving '%i' as the variable rather than what i's value is in this loop. Don't understand the actual use of %i I guess, is it only in a string output?

Next, I figured I could make a timer to update the status every second ... to where it shows like this ...

Hilt: 27 Rough: 30 Garotte: 33 ECT.

I tried something like this inside the send section of a timer with no luck.


SetStatus ("Hilt: ", GetVariable("HiltDur"),  "Rough: ", GetVariable("RoughDur"))
[Go to top] top

Posted by Nick Gammon   Australia  (18,770 posts)  [Biography] bio   Forum Administrator
Date Reply #3 on Wed 20 Apr 2011 05:29 AM (UTC)  quote  ]
Message
Just change that loop to be:


 for i = 33, 2, -1 do
      SetVariable ("HiltDur", i)
      wait.time (1)
    end -- for



That is, the current value of i.

The other thing you did should work, in what way did it not?

- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

Posted by Shinowa   (4 posts)  [Biography] bio
Date Reply #4 on Thu 21 Apr 2011 12:21 AM (UTC)  quote  ]
Message
The problem was I was sending the line to the mud, instead of to script. I'm slowly learning heh. Thanks.
[Go to top] top

Posted by forral   USA  (79 posts)  [Biography] bio
Date Reply #5 on Fri 06 May 2011 01:05 AM (UTC)  quote  ]
Message
Nick,

Could this be expanded to have multiple timers running at the same time?

For instance, I want to make a script such that when I launch of volley of attacks at a ship, it counts down the corresponding time until the next volley is available. Specifically, when I launch the fire-launcher, I have to wait 14 seconds between volleys, so I'd need a 14 second timer.

And then could the reverse be applied to keep track of spellups/buffs like aardwolf does? If I cast "poison" on an enemy, and I know its duration, I could have a script alert me with a sound or otherwise that, "Hey, you need to re-cast poison on this player".
[Go to top] top

Posted by Nick Gammon   Australia  (18,770 posts)  [Biography] bio   Forum Administrator
Date Reply #6 on Fri 06 May 2011 05:25 AM (UTC)  quote  ]
Message
There is no problem with multiple timers. But you need to figure out where to put the info (after all there is only one status line).

You may find this post helpful:

Template:post=9359 Please see the forum thread: http://gammon.com.au/forum/?id=9359.


That describes buttons with cooldown timers on them.

- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

Posted by Shinowa   (4 posts)  [Biography] bio
Date Reply #7 on Tue 10 May 2011 02:28 AM (UTC)  quote  ]
Message
I have a trigger like this for 3 main skills so far, and I created one timer to display them all to the status bar..


<timers>
  <timer enabled="y" second="1.00" offset_second="0.00"    send_to="12"
omit_from_log="y" >
  <send>SetStatus ("  Hilt: ", GetVariable("HiltDur"), "  ", "  Rough: ", GetVariable("RoughDur"), "  ", "  Garotte: ", GetVariable("GarDur"))</send>

  </timer>
</timers>


A question though, my trigger doesn't fire if the trigger message doesn't start a new line, if it comes at the end of the prompt, due to command stacking, then it doesn't fire the trigger, how can I enable it to fire wherever the string displays?
[Go to top] top

Posted by Nick Gammon   Australia  (18,770 posts)  [Biography] bio   Forum Administrator
Date Reply #8 on Tue 10 May 2011 03:15 AM (UTC)  quote  ]
Message
Put an asterisk at the start to match on any extra stuff, eg.


match="*You deftly slam the pommel ..."


- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).

To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.


1,556 views.

[Reply to this subject]  Reply to this subject   [New subject]  Start a new subject   [Refresh] Refresh page

Go to topic:           Search the forum


[Go to top] top

[Home]

Written by Nick Gammon - 5K

Comments to: Gammon Software support
[RH click to get RSS URL] Forum RSS feed ( http://www.gammon.com.au/rss/forum.xml )

[Best viewed with any browser - 2K]    [Internet Contents Rating Association (ICRA) - 2K]    [Web site powered by FutureQuest.Net]