Register forum user name Search FAQ

Gammon Forum

Notice: Any messages purporting to come from this site telling you that your password has expired, or that you need to verify your details, confirm your email, resolve issues, making threats, or asking for money, are spam. We do not email users with any such messages. If you have lost your password you can obtain a new one by using the password reset link.
 Entire forum ➜ MUSHclient ➜ Lua ➜ Building it up with Lua

Building it up with Lua

It is now over 60 days since the last post. This thread is closed.     Refresh page


Posted by BlueEyes   (28 posts)  Bio
Date Sun 16 Aug 2009 09:33 PM (UTC)
Message
Alright I'm trying to make my base curing script completely off of Lua, I've tinkered around a bit but I'm ready to go head strong into it. I've read the help scripting files Nick placed up so kindly and I can do all those type of things. Now what I am concentrating on is pure speed and I'm debating should I do triggers in Lua tables, or how should I go about beginning to start this. I also don't understand how to call triggers from a table, but any help will be greatly appreciated.
Top

Posted by Nick Gammon   Australia  (23,121 posts)  Bio   Forum Administrator
Date Reply #1 on Sun 16 Aug 2009 10:05 PM (UTC)
Message
I'm not sure how you would "do triggers in Lua tables" exactly.

Trigger matching in general is quite fast - unless you have tens of thousands of triggers the client will keep up.

A couple of things you can do to help it:


  • Give a trigger that is likely to match often (eg. a prompt) a lower sequence number and do *not* check "keep evaluating". That way, the common case is quickly matched, and the other triggers are not checked.

  • Another post I found seems to indicate that, within reason, a big trigger is faster than lots of small ones. For example:

    
    ^You are afflicted by blindness\.$
    ^You are afflicted by dizziness\.$
    


    Compared to:

    
    ^You are afflicted by (blindness|dizziness)\.$
    


    The second one could be slightly faster (one trigger rather than two).

  • If you want to use Lua tables, and if the messages are fairly generic, you could match something and then do a table lookup, eg.

    
    ^You are afflicted by (.*)\.$
    


    Now lookup the wildcard in a Lua table (where the wildcard is the key), and that would be very fast, even for hundreds of afflictions. Note that I say "the wildcard is the key" which means the table is keyed by the affliction, you don't do a linear search of the table.


That should help get you started.


- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Blainer   (191 posts)  Bio
Date Reply #2 on Sun 16 Aug 2009 11:41 PM (UTC)

Amended on Sun 16 Aug 2009 11:42 PM (UTC) by Blainer

Message
This is not tested but just to give you some ideas.

<triggers>
  <trigger
   enabled="y"
   match="^You are afflicted by (blindness|dizziness)\.$"
   send_to="12"
   sequence="100"
  >
  <send>
afflicT =   {
            ["disease"] = "cast cure",
            ["poison"] = "cast cure",
            ["curse"] = "cast uncurse",
            ["blindness"] = "cast seebetter",
            ["dizziness"] = "cast stable"
            }
SendNoEcho (afflicT[tostring (%1)])
  </send>
  </trigger>
</triggers>

Top

Posted by Nick Gammon   Australia  (23,121 posts)  Bio   Forum Administrator
Date Reply #3 on Sun 16 Aug 2009 11:58 PM (UTC)
Message
Make that:


SendNoEcho (afflicT["%1"])


Wildcards *are* strings, but not quoting them is a problem.


- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by BlueEyes   (28 posts)  Bio
Date Reply #4 on Mon 17 Aug 2009 03:51 AM (UTC)
Message
So I havn't started coding it but I would make the table and when I would have said affliction it would look up that specific table?
Top

Posted by Blainer   (191 posts)  Bio
Date Reply #5 on Mon 17 Aug 2009 04:51 AM (UTC)

Amended on Mon 17 Aug 2009 05:41 AM (UTC) by Blainer

Message
Yes you could write a table with each of the afflictions as the keys and the what to send to MUD when you have that affliction as the value.

"%1" will be the affliction. So that is used to go straight to the value you want in the table instead of iterating the entire table.

Example:

My trigger: ^You are (.*).$

MUD sends: You are sick.

Trigger fires because a match is found.

%1 is now sick because it's in the first set of brackets.
The script in my trigger has a table:

table = {
     ["sick"] = "cast cure",
     ["ugly"] = "think positive"
     }

Sick and Ugly are the keys and cast etc are the values you get when you reference those keys.

If I say:

print (table["sick"])

I get:
cast cure

So now I can simply tell MUSH to send the MUD what ever is in the table for that affliction.

SendNoEcho (table["%1"])
Top

Posted by Nick Gammon   Australia  (23,121 posts)  Bio   Forum Administrator
Date Reply #6 on Mon 17 Aug 2009 05:38 AM (UTC)
Message
If you amend a post and add tags, when "forum codes" was not checked, it doesn't automatically turn them on. I edited the post and checked "forum codes".

- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Nick Gammon   Australia  (23,121 posts)  Bio   Forum Administrator
Date Reply #7 on Mon 17 Aug 2009 05:40 AM (UTC)

Amended on Mon 17 Aug 2009 05:41 AM (UTC) by Nick Gammon

Message
The forum has code to detect forum codes and turn them on, with specific codes it checks for, and on an initial post (not an edit). This is because people tended to forget to check "forum codes" when they were obviously required (eg. the post had lots of [code] tags in it).

- Nick Gammon

www.gammon.com.au, www.mushclient.com
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.


21,351 views.

It is now over 60 days since the last post. This thread is closed.     Refresh page

Go to topic:           Search the forum


[Go to top] top

Information and images on this site are licensed under the Creative Commons Attribution 3.0 Australia License unless stated otherwise.