|
ohm Beginner
Joined: 17 Sep 2002 Posts: 16
|
Posted: Tue Mar 18, 2008 4:20 am
zMUD Script Challenge - Counting items |
Hello there,
I'm struggling to come up with a way to effectively count the number of items in a given line of text. To give you an idea of what I'm trying to achieve I'll endeavour to explain the problem a little more.
I have a variable, a String List, with a few entries in it. Lets call it "stuff". So:
@stuff = ring|watch|glasses|scarf
Now when I look at something MUD wise I have a line of text, something like:
The shelf contains a silver ring, a gold ring, a pocket watch and a green book.
What I really want to do is to be able to count how many items the shelf has on it where the item appears in @stuff.
I've been trying to use %numwords (I.E. "%numwords( "shelf text here", @stuff)") with little result, and fear this is because the function doesn't support String Lists. Are there commands out there that might? Does anyone have any examples I could use to help me on my way?
Many thanks! |
|
|
|
shalimar GURU
Joined: 04 Aug 2002 Posts: 4692 Location: Pensacola, FL, USA
|
Posted: Tue Mar 18, 2008 4:33 am |
%numitems(@stuff)
|
|
_________________ Discord: Shalimarwildcat |
|
|
|
ohm Beginner
Joined: 17 Sep 2002 Posts: 16
|
Posted: Tue Mar 18, 2008 5:32 am |
%numitems seems to only tell me the number of items in @stuff, what I'm hoping to do is find out how many items the shelf has on it that are in @stuff.
What I have come up with, which works but is hardly very elegant is:
#forall @stuff {
count = %numwords( "%1", "%i")
#if (@count > 1) {CountStuffOnShelf = %eval( @count-1)}
}
This bit of zMUD script does the following:
- Loops through all the elements of @stuff (I.E. ring, watch, glasses, etc.).
- Counts how many times each element (%i) occurs in the text (%1 - e.g. defined by trigger pattern) with %numwords.
- If the count is greater than one we've found something! %numwords returns one to many results when using the delimited by
string option for the total number of items. So we subtract 1 and hey presto!
As I said it's not an elegant solution and I'd love to hear back from anyone who has done something similar differently.
All the best! |
|
|
|
shalimar GURU
Joined: 04 Aug 2002 Posts: 4692 Location: Pensacola, FL, USA
|
|
_________________ Discord: Shalimarwildcat |
|
|
|
Dharkael Enchanter
Joined: 05 Mar 2003 Posts: 593 Location: Canada
|
Posted: Tue Mar 18, 2008 2:25 pm |
Currently it seems when your loop is finished only the last word in @stuff gets counted
Shouldn't CountStuffOnShelf be added up.
Code: |
#var CountStuffOnShelf {}
#forall @stuff {
#add CountStuffOnShelf %eval(%numwords("%1","%i")-1)
} |
|
|
_________________ -Dharkael-
"No matter how subtle the wizard, a knife between the shoulder blades will seriously cramp his style." |
|
|
|
ohm Beginner
Joined: 17 Sep 2002 Posts: 16
|
Posted: Wed Mar 19, 2008 12:33 am |
You're certainly right Dharkael! Just a slight oversight on my part...
But with your addition it works as it should, I was just hoping that there might be a nicer way to do it (not that I'm unhappy about how it's working now, just seeing if there was some obscure/hidden function that could handle comparing String Lists with text).
Thanks for your example shalimar, but again I find it more usuful for counting things indescriminately, rather than a list of items you have prepared. As it's only certain things I want to count I have to be able to determine what's worth counting in the script. |
|
|
|
Dharkael Enchanter
Joined: 05 Mar 2003 Posts: 593 Location: Canada
|
Posted: Wed Mar 19, 2008 1:52 am |
definitely not sexy but if you're looking for an alternative imp...
Code: |
#echo %len(%subregex(%mss(%concat(%string("%1"),".replace(/",(@stuff),"/g,'\x00')"),"JScript"),"[^\x00]")) |
|
|
_________________ -Dharkael-
"No matter how subtle the wizard, a knife between the shoulder blades will seriously cramp his style." |
|
|
|
rmorock8869@yahoo.com Beginner
Joined: 15 May 2018 Posts: 17
|
Posted: Tue May 15, 2018 3:08 pm Counting an item in my cloak |
I am a super newb with cmud. Currently I am playing a character in forgotten kingdoms. I would like to have a count of daggers in my cloak displayed on the status bar at the bottom since I am trying to level up my throwing dagger skills. Can anyone help me with a script please
|
|
|
|
shalimar GURU
Joined: 04 Aug 2002 Posts: 4692 Location: Pensacola, FL, USA
|
Posted: Tue May 15, 2018 5:48 pm |
Best to start your own thread rather than hijack someone else's thread, but you want the #STATUS command.
#STATUS {Daggers: @daggerCount} |
|
_________________ Discord: Shalimarwildcat |
|
|
|
|
|