Consider this scenario:
Test is a room.
A person has an object called the instrument played.
Bob is a man in Test.
Persuasion rule for asking bob to try doing something: Persuasion succeeds.
Playing is an action applying to one thing. Understand “play [something]” as playing.
The drum set is a thing in Test. Understand “drums” as the drum set. The snare drum is a part of the drum set. The kick drum is a part of the drum set.
Check an actor playing the instrument played of the person asked (This is the can’t play what’s being played rule):
if the person asked is the player, say “You’re already playing that.”;
stop the action.
Check an actor playing the drum set (This is the play the kick drum by default rule):
Try the actor playing the kick drum instead.
Carry out an actor playing something:
Now the instrument played of the person asked is the noun.
Report an actor playing something:
say “[The person asked] [if the person asked is yourself]are[otherwise]is[end if] now playing [the noun].”
Unsuccessful attempt by Bob playing something:
if the reason the action failed is the can’t play what’s being played rule:
say “Bob is already playing that.”;
say “Bob isn’t sure why he can’t do that.”
test me with “play snare/g/bob, play snare/bob,play drums/bob, play kick/bob,play drums”[/code]
In most cases, Bob’s success or failure will be reported correctly. But when the “play the kick drum by default rule” triggers a failed action, the reason the action failed is not the rule that stopped the action, but the rule that triggered the failed action. What I want instead is something like “anonymously abide by the check rules” that attempts the entire action - Before rules, Instead rules, etc. - so we actually know the real reason why the action failed. Is there a way to do that?