Register to post in forums, or Log in to your existing account
 

Play RetroMUD
Post new topic  Reply to topic     Home » Forums » CMUD Beta Forum
Delphi03
Novice


Joined: 20 Aug 2004
Posts: 37
Location: Illinois

PostPosted: Fri Apr 02, 2010 6:08 am   

[Solved] Text Replace/Function Call
 
I have the following trigger:

Code:
#trigger {(.*)} {#substitute %replace(%1, ^F, @randHigh())}


and the following function:

Code:
#function randHigh {#return %case(%random(1,4), %ansi(high, blue), %ansi(high, cyan), %ansi(high, green), %ansi(high, red))}


This works well enough. It picks a random color from the 4 listed whenever there is an incoming ^F; however, it replaces all of the ^F it finds in that pass with the same color.

Would there be any way to make it choose a random color each time it encounters an ^F without changing the above-listed trigger? (it's part of a larger replacement trigger that I have as-of-yet been unable to find a better solution for).


Last edited by Delphi03 on Fri Apr 02, 2010 4:04 pm; edited 1 time in total
Reply with quote
Rahab
Wizard


Joined: 22 Mar 2007
Posts: 2320

PostPosted: Fri Apr 02, 2010 2:12 pm   
 
Something like this (throwing this together without testing):
Code:

$text = %1
#WHILE (%match($text,"\^F")) {
  $pos = %match($text,"\^F")
  $text = %delete($text,$pos,2)
  $text = %insert($text,@randHigh())
}
#substitute $text


Last edited by Rahab on Fri Apr 02, 2010 2:19 pm; edited 1 time in total
Reply with quote
Danlo
Magician


Joined: 28 Nov 2003
Posts: 313
Location: Australia

PostPosted: Fri Apr 02, 2010 2:17 pm   
 
Ahh. What you want to do, is instead of replace, use subregex.

#trigger {(.*)} {#substitute %subregex(%1, "(\^F)", @randHigh())}
Reply with quote
Rahab
Wizard


Joined: 22 Mar 2007
Posts: 2320

PostPosted: Fri Apr 02, 2010 2:21 pm   
 
No, %subregex will replace all of them identically, just like %replace.
Reply with quote
Danlo
Magician


Joined: 28 Nov 2003
Posts: 313
Location: Australia

PostPosted: Fri Apr 02, 2010 2:25 pm   
 
Hmm, you're right. Because its calling the function.
Reply with quote
Danlo
Magician


Joined: 28 Nov 2003
Posts: 313
Location: Australia

PostPosted: Fri Apr 02, 2010 2:38 pm   
 
However, there is a way around that. By delaying the point at which the function @RandHigh is expanded.
With quotes, like so:

#trigger {(.*)} {#substitute %subregex(%1, "(\^F)", "@RandHigh()")}
Reply with quote
Rahab
Wizard


Joined: 22 Mar 2007
Posts: 2320

PostPosted: Fri Apr 02, 2010 2:44 pm   
 
ooh! Clever! that might work with %replace, too.
Reply with quote
Danlo
Magician


Joined: 28 Nov 2003
Posts: 313
Location: Australia

PostPosted: Fri Apr 02, 2010 2:46 pm   
 
Actually yeah, it would, lol.
Reply with quote
Delphi03
Novice


Joined: 20 Aug 2004
Posts: 37
Location: Illinois

PostPosted: Fri Apr 02, 2010 3:09 pm   
 
Danlo wrote:
However, there is a way around that. By delaying the point at which the function @RandHigh is expanded.
With quotes, like so:

#trigger {(.*)} {#substitute %subregex(%1, "(\^F)", "@RandHigh()")}


I tried this, but it did not work. It simply replaced all instances with ^F with @randHigh() (literally, the text, @randHigh()).
Reply with quote
Danlo
Magician


Joined: 28 Nov 2003
Posts: 313
Location: Australia

PostPosted: Fri Apr 02, 2010 3:27 pm   
 
Really? It doesn't do that for me. It expands it just fine. Hmmm. Maybe a setting somewhere.


Last edited by Danlo on Fri Apr 02, 2010 3:30 pm; edited 1 time in total
Reply with quote
Delphi03
Novice


Joined: 20 Aug 2004
Posts: 37
Location: Illinois

PostPosted: Fri Apr 02, 2010 3:28 pm   
 
Using CMUD 3.16b currently.
Reply with quote
Danlo
Magician


Joined: 28 Nov 2003
Posts: 313
Location: Australia

PostPosted: Fri Apr 02, 2010 3:33 pm   
 
Try this one:
#trigger {(.*)} {#substitute %subregex(%1, "(\^F)", "@RandHigh")}

Or this one:
#trigger {(.*)} {#substitute %subregex(%1, "(\^F)", "%expand(@RandHigh)")}

This is probably the most likely variation to work:
#trigger {(.*)} {#substitute %subregex(%1, "(\^F)", %expand("@RandHigh()"))}
Reply with quote
Delphi03
Novice


Joined: 20 Aug 2004
Posts: 37
Location: Illinois

PostPosted: Fri Apr 02, 2010 3:46 pm   
 
Danlo wrote:
This is probably the most likely variation to work:
#trigger {(.*)} {#substitute %subregex(%1, "(\^F)", %expand("@RandHigh()"))}


This one worked just fine, thank you.

As a side note, this does not work with %replace(), only %subregex()...or at least in my experience thus far.
Reply with quote
Danlo
Magician


Joined: 28 Nov 2003
Posts: 313
Location: Australia

PostPosted: Fri Apr 02, 2010 4:00 pm   
 
Yeah, there's a slight difficulty with %replace turning it into a string and stopping it from further expansion, even %eval wouldn't expand it further, however, the %exec function was able to force it through some more expansion, so you ended up with:

#trigger {(.*)} {#substitute %exec(%replace(%1, "^F", "@RandHigh"))}
Reply with quote
MattLofton
GURU


Joined: 23 Dec 2000
Posts: 4834
Location: USA

PostPosted: Fri Apr 02, 2010 6:32 pm   
 
Here's an even slicker way to do it:

#trigger {^F} {#sub {@randHigh()}}

Make sure the Repeat within line trigger option is checked.
_________________
EDIT: I didn't like my old signature
Reply with quote
Display posts from previous:   
Post new topic   Reply to topic     Home » Forums » CMUD Beta Forum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

© 2009 Zugg Software. Hosted by Wolfpaw.net