Actually Sleeve's suggesting is right on the money, though not entirely accurate. Triggers use two forms, standard and regular expressions. They differ thus:
normal>
A happy smile. - Matches
[10%|20%|10%] A happy smile. - Fails
regexp>
A happy smile. - Matches
[10%|20%|10%] A happy smile. - Matches
This is do to the fact that normal triggers assume that the input 'starts' at the beginning of the line. Your second line fails because the string you are matching is no longer the first thing on the line.
You can fix this the easy way, or a slightly more complex, but more accurate way. The easy way would be to add * to the start of the text you are going to match like:
*A sparkling mana stone glows as you store mana in it.
This will work, but will match on 'any' case where is appears, including if someone gets smart and dumps it on channel traffic. A better solution would be to make the trigger a regular expression and make it:
^(\[.*|.*|.*\] )?A sparkling mana stone glows as you store mana in it\.
This will then match 'only' on lines like:
A sparkling mana stone glows as you store mana in it.
[100%|96%|100%] A sparkling mana stone glows as you store mana in it.
but not in lines which you don't want like:
Fred tells you: A sparkling mana stone glows as you store mana in it.
Thus the proper replacement would be:
<triggers>
<trigger
enabled="y"
match="^(\[.*|.*|.*\] )?A sparkling mana stone glows as you store mana in it\."
sequence="100"
regexp="y"
>
<send>cast recharge sparkling</send>
</trigger>
</triggers>