zMud Parsing question

by Vesar

Back to Mechanic's Corner.

Vesar2006-10-22 01:23:44
Ok, here's what I want to do:

For warrior attacks, I've switched to the "open classes" approach, meaing that when a warrior attacks such as this:

"Geb swings a warrior's iron greatsword at you. You are sliced across the chest, laying open a flap of skin
which bleeds profusely."

I have a trigger "(%w) swings * at you" which opens all the warrior affliction classes. In those classes, I have the trigger "chest, laying".

Now, this works fine for most things, but the problem with the above example is that the patter for this particular affliction lies on the same line as the one that opens the class. In other words, the triggers fire on the first line, open the class, and then start looking for "chest, laying" on the second line, and thus don't fire correctly.

My question is, is there any way to get the "chest, laying" trigger to fire on the first line, right after the class is open?
Laysus2006-10-22 01:51:04
Not using that method.

I got around this by giving up on using a seperate class and making them into huge multistate triggers.
Shryke2006-10-22 05:10:28
I know laysus, don't ask how tongue.gif Hey, wanna send me some of yours? I'm redoing the murphster with multistates, but I'm curious how you organized yours..
Laysus2006-10-22 12:27:54
I didn't organise so much as put them together and prayed.
Ekard2006-10-22 13:46:54
Just use config wrapwidth 250.
All warriors attack will be in one line. So you can trigger them easly.
Unknown2006-10-22 16:11:58
I'm not sure, but does the reparse trigger option make it work?
Vesar2006-10-22 16:29:57
QUOTE(Oraki @ Oct 22 2006, 12:11 PM) 345240

I'm not sure, but does the reparse trigger option make it work?


Reparse only works on conditionals.
Daganev2006-10-22 16:48:58
How many cases are there like this?

A hack sollution would be to make a trigger for these specific cases, that echo the relevent text out again.
Laysus2006-10-22 19:00:20
QUOTE(Vesar @ Oct 22 2006, 05:29 PM) 345244

Reparse only works on conditionals.


Basically, what I do is use reparses.

#tr {attack message, first line}
#cond {*} OR {you} depending on first line {within|param=1}
#cond {areas to be hit} {reparse}
#cond {attack messages} {reparse}
#cond {*} {within|Param=1}
rinse, repeat. There's a bit more to do to make sure it notices rebounding and stuff, but that's the basics.
Unknown2006-10-22 19:39:42
Do you notice any slowdown during spammy group fights due to that reparsing?
Ekard2006-10-22 21:08:01
Just use wrapwith 250 tongue.gif
Tiran2006-10-23 05:08:19
Should start a petition for wrapwidth 0 like Achaea has. I would so love Roark/Sior/Estarra if they did that. wub.gif
Drathys2006-10-23 07:00:47
It might be possible to get it to work Vesar's way, just takes some messing with the trigger order.

The order in which triggers appear in the settings editor is the order they are evaluated, so if the trigger to open the class is first, it just might allow the other trigger to fire on the same line.
Unknown2006-10-23 15:49:54
I use classes and the triggers will fire on the same line as the trigger that enables the class. I think the difference is that I use regex triggers, which seem to fire multiple times per line more reliably. I can successfully detect any warrior attack regardless of attack, weapon, affliction, etc, using only single words and reparse states. It's complicated, but it works very, very well.
Shorlen2006-10-23 16:33:19
My way of handling that is really dumb, but works. I should seriously consider making it not such.... but I take the entire warrior hit message, from swing to prompt, and save it in a string. Then, I call an alias with a gigantic if-else-if ladder which checks through that string for certain substrings.

Only problem is.... for some reason, when fighting someone who hits me too fast, it starts taking 3-5 seconds to run, so by the time I catch where I've been hit, I get hit again, and my afflict curing, stancing, parrying, and wound curing is all one hit behind.
Sylphas2006-10-24 14:51:16
That's the way I'd have done it. Grab it all into one string and then throw it through my other triggers.
Shorlen2006-10-27 22:41:25
QUOTE(Sylphas @ Oct 24 2006, 10:51 AM) 346174
That's the way I'd have done it. Grab it all into one string and then throw it through my other triggers.

Do you know how to do the bolded bit in zMUD?