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

Play RetroMUD
Post new topic  Reply to topic     Home » Forums » zMUD General Discussion
Scirkhan
Apprentice


Joined: 14 Sep 2007
Posts: 167
Location: aztx

PostPosted: Wed Nov 14, 2012 5:07 pm   

How to better capture a pattern?
 
I'm using 3 reParse triggers. How can I do this better? I don't really remember anything about this. Thanks..
I have no idea...

Quote:
Cause Light Wounds [95/95] Cause Serious Wounds [95/95]
Control Weather [58/95] Create Food [00/95] Create Water [00/95]




Code:
#TRIGGER "Skills_practice_capture" {^%w%s*~[} {} "" {disable}
#COND {^(%w)(*)%s~[(%d)/%d~]{ |}$} {} {reparse|disable}
#COND {^(%w)(*)%s~[(%d)/%d~] (%w)(*)%s~[(%d)/%d~]{ |}$} {} {reparse|disable}
#COND {^(%w)(*)%s~[(%d)/%d~] (%w)(*)%s~[(%d)/%d~] (%w)(*)%s~[(%d)/%d~]$} {} {reparse|disable}


Either people want me to keep things relevant, or put all the information up. hah...


Last edited by Scirkhan on Wed Nov 14, 2012 6:47 pm; edited 2 times in total
Reply with quote
shalimar
GURU


Joined: 04 Aug 2002
Posts: 4671
Location: Pensacola, FL, USA

PostPosted: Wed Nov 14, 2012 5:14 pm   
 
that looks so ugly without the ; shifted into carriage returns... hard to read
_________________
Discord: Shalimarwildcat
Reply with quote
Scirkhan
Apprentice


Joined: 14 Sep 2007
Posts: 167
Location: aztx

PostPosted: Wed Nov 14, 2012 5:57 pm   
 
how do I.. shift the ; into carriage returns? Right.. I guess it's just impossible to read scripts yet we can make them.
I guess I should go grab myself an IDE or something. But I don't have any nerd-mighty friends to tell me about this stuff.
Reply with quote
shalimar
GURU


Joined: 04 Aug 2002
Posts: 4671
Location: Pensacola, FL, USA

PostPosted: Wed Nov 14, 2012 9:34 pm   
 
Its actually an option in the editor itself, in one of the menues... reformat script or somesuch
No one said it was impossible, but certain things do make people more willing to attempt it.
And no one said you had to remove all the relevant data either, just the way you had it displayed as a run-on sentence of code, it was hard to see what you were doing.
_________________
Discord: Shalimarwildcat
Reply with quote
shalimar
GURU


Joined: 04 Aug 2002
Posts: 4671
Location: Pensacola, FL, USA

PostPosted: Wed Nov 14, 2012 9:42 pm   
 
Hmm... have you tried using a
#SUB {}
to remove the section of the pattern you just matched on before reparsing?
Then you might not need more than one state...

also..
#TR {^([%w%s])~[(%d)/%d~]}
is a more concise pattern for the bit you actually want to match, i think

or, on a totally different page, you could use something like
parts=%replace(%line, "] ", "]|")
then #FORALL @parts through a %match to do all your stuff
_________________
Discord: Shalimarwildcat
Reply with quote
Scirkhan
Apprentice


Joined: 14 Sep 2007
Posts: 167
Location: aztx

PostPosted: Thu Nov 15, 2012 2:56 pm   
 
Hey thank you shalimar. I'll try those. sometimes spells are more than one word long.
Just trying to make it more efficient. Is there a way regex can do this? %w3 or something.
Actually.. I would like to know how to find out what is more efficient.
one db, or 5 string lists? What matches faster, or with less cycles, etc
^[\w\s]{3,30}\s\s
edit:
Code:
^\w[\w\s]+\s[\s\[]


efficient I hope.
Quote:
parts=@parts%replace( %line, "]", "]|")
then when all done, parts=%dups(@parts)

or
Quote:
#additem parts {%replace( %line, "]", "]|")}

or (line by line)
Quote:
parts=%replace( %line, "]", "]|")
#forall


Those are the sort of efficiency questions I have.

Is there anyway I can use match without variables? or delete variables without unvar?
or is that like #trigger {@Name=1} {}

Hmm. It seems I can't %trim(%line)


Last edited by Scirkhan on Thu Nov 15, 2012 9:52 pm; edited 4 times in total
Reply with quote
shalimar
GURU


Joined: 04 Aug 2002
Posts: 4671
Location: Pensacola, FL, USA

PostPosted: Thu Nov 15, 2012 8:14 pm   
 
[%w%s] = any amount of white space and words

It could be done in regex (and in fact is converted to regex behind the scenes) but i was never good with raw regex

Code:
parts=%replace(%line, "] ", "]|")
                        ^

my example has a space after the closing square bracket, to give it a boundary that wont result in a blank member in the @parts variable


As to the variables... if you upgrade to CMUD, it makes use of local variables which would be thrown out when the trigger finishes.
Staying with zMuUD though..
you could use the #VAR command to assign them a class at creation, then just delete the class with all your temporary variables
or just reuse the same temporary variables in any script that needs them, since script redefines them, a few variables in memory should not create a noticeable impact on system performance

and i want to say separate string lists are faster in zMUD, with no discernible differance in CMUD

and yes, you can make expression triggers
_________________
Discord: Shalimarwildcat
Reply with quote
Scirkhan
Apprentice


Joined: 14 Sep 2007
Posts: 167
Location: aztx

PostPosted: Thu Nov 15, 2012 8:20 pm   
 
Yes, I was aware of the space. I just realized why it *wasn't* trimming how I thought it should. my bad.
Thank you for the class idea for temporary variables.
I could probably use subregex to remove the blank space at start of line, but I think I can encapsulate just another %replace %replace..
Ah, I got it to work like this, with %subregex and \s*. The dot is because I can't get match to work with [ or ~[:
Code:

test/parts=@test/parts%replace( %subregex( %line, "\]\s*", "]|"), "[", ".")


Oh, and I think I do remember something about string lists being considerably faster than DBs.
Is there a decent way to test this? Just use %time()? I liked the db because it's just one list.
I suppose I can make a string list with a delimiter. [didn't do this. Not sure how I would find what I want from it.]

Heh, the class-path specification, @test/spell, in my #forall loop and #add %if added 20ms delay. That is surprising.
So I removed that. I have it at 180ms.

zMuD does not like %subregex %replace it seems.. everytime I try to import the script, it messes up on that line.
I put a tilde in front of every % " and @ for that line in the file. Seems to fix it..

Ok.. I got around that problem. Not sure what was wrong.


Last edited by Scirkhan on Fri Nov 16, 2012 1:54 pm; edited 2 times in total
Reply with quote
shalimar
GURU


Joined: 04 Aug 2002
Posts: 4671
Location: Pensacola, FL, USA

PostPosted: Fri Nov 16, 2012 3:10 am   
 
#VAR parts {%replace(blah blah)} _nodef test
_________________
Discord: Shalimarwildcat
Reply with quote
Scirkhan
Apprentice


Joined: 14 Sep 2007
Posts: 167
Location: aztx

PostPosted: Fri Nov 16, 2012 3:13 am   
 
Yeah.. I don't know what was wrong.. it was very strange.
As long as I import this new one and don't copy/paste it.
It doesn't take too long.. I guess I'm done. Yeah. Thanks shalimar!
Code:
#CLASS {Skills}
#ALIAS help {~help %-1
        #if (%-1 = "classes") {#class Skills
        #state skills_cond 0
        #T+ "skills_cond"}}
#ALIAS prac {~prac %-1
        #if (%-1 = "") {#class Skills
        #T+ "Skills_practice_start"}}
#VAR Divisor {9}
#VAR WarriorBonus {12|0|0}
#VAR ThiefBonus {9|0|12}
#VAR DruidBonus {6|6|3}
#VAR ClericBonus {0|6|0}
#VAR MageBonus {0|6|0}
#VAR class {}
#VAR classSkills {}
#VAR skillsLine {}
#VAR practiceSkills {}
#VAR practiceSkill {}
#VAR skill_percent {00}
#VAR H {0}
#VAR M {0}
#VAR V {0}
#TRIGGER "Skills_blankline" {$} {#if (@class = "Druid") {#state skills_cond 0
        #t- "skills_cond"} {#STATE skills_cond 1}
        #t- "Skills_blankline"} "" {notrig|disable}
#TRIGGER "skills_cond" {^CLASSES$} {#var Skills/class {}
        #var Skills/classSkills {}
        #var Skills/SkillsLine {}} "" {disable}
#COND {^({Warrior|Cleric|Mage|Druid|Thief})-$} {#var Skills/class {%1}
        #t+ "Skills_blankline"
        #state skills_cond 2} {disable}
#COND {^(%w)} {#var Skills/skillsLine {%replace( %replace( %lower( %line), ", ", |), ",", "")}
        #DELI Skills/skillsLine %null
        #pri {#FORALL @Skills/skillsLine {#addkey classSkills {%i} {@Skills/class}}}} {manual|disable}
#REGEX "Skills_practice_capture" {^\w[\w\s]+\s[\s\[]} {#pri {practiceSkills=@practiceSkills%replace( %subregex( %lower( %line), "\]\s*", "]|"), "[", ".")}} "" {notrig|disable}
#TRIGGER "Skills_practice_end" {^You have (%n) practice sessions remaining.$} {#class Skills
        #t- "Skills_practice_end"
        #t- "Skills_practice_capture"
        practiceSkills=%dups( @practiceSkills)
        #deli practiceSkills %null
        #var practiceSkill {}
        #var skill_percent {0}
        #var H 0
        #var M 0
        #var V 0
        #forall @practiceSkills {#noop %match( %i, "(*)%s.(%d)", practiceSkill, skill_percent)
        #var practiceSkill {%trim( @practiceSkill)}
        #add H {%if( @skill_percent>=90, %item( @{%db( @classSkills, @practiceSkill)Bonus}, 1))%if( @skill_percent<90 AND @skill_percent>=50, %eval( %item( @{%db( @classSkills, @practiceSkill)Bonus}, 1)/2))}
        #add M {%if( @skill_percent>=90, %item( @{%db( @classSkills, @practiceSkill)Bonus}, 2))%if( @skill_percent<90 AND @skill_percent>=50, %eval( %item( @{%db( @classSkills, @practiceSkill)Bonus}, 2)/2))}
        #add V {%if( @skill_percent>=90, %item( @{%db( @classSkills, @practiceSkill)Bonus}, 3))%if( @skill_percent<90 AND @skill_percent>=50, %eval( %item( @{%db( @classSkills, @practiceSkill)Bonus}, 3)/2))}}
        #SUB {You have %ansi(high,yellow)%1%ansi(green) practice sessions remaining.%ansi(high,red) +%eval( @H/@Divisor)hp%ansi(high,blue) +%eval( @M/@Divisor)mana%ansi(high,green) +%eval( @V/@Divisor)move}
        #class 0} "" {disable}
#TRIGGER "Skills_practice_start" {You can learn the following skills and spells:$} {#class Skills
        #t- "Skills_practice_start"
        #T+ "Skills_practice_capture"
        #T+ "Skills_practice_end"
        #var Skills/practiceSkills {}
        #var Skills/H {0}
        #var Skills/M {0}
        #var Skills/V {0}} "" {disable}
#CLASS 0


I didn't try the #sub suggestion, but it seems like it would be pretty good, creative too. The #forall approach was really key here. I never was good with #forall.
So, thanks again.
Reply with quote
Display posts from previous:   
Post new topic   Reply to topic     Home » Forums » zMUD General Discussion 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