Knock on door produces "knock one door" or "lock one door"

Me again. I have a DSDoor and added a VerbRule for “Knock”. The output is below.

>knock on door
(lock one door)
The door is already locked.
 

I added a VerbRule for KnockOn, which outputs OK except for the ONE part.

>knock on door
(knock one door)
Knocking on the door produces a cloud of rotting wood dust but a knocking sound could be heard.

This is the VerbRule business. Identical to VerbRule(Knock) minus the “On”.

DefineTAction(KnockOn);

VerbRule(KnockOn)
'knock on' singleDobj
: VerbProduction
action = KnockOn
verbPhrase = 'knock/knocking (what)'
missingQ = 'what do you want to knock on'
;

modify Thing
dobjFor(KnockOn)
{
action(){
    "Knocking on the door produces a cloud of rotting wood dust but a knocking sound could be heard. ";
    doorKnocked = true;
}}
;

If I just type “knock door” I get the desired results but I think most folks will type “knock on door”.
Is there a way to clear up the one/on confusion?

Thank you in advance,
Deborah

2 Likes

The tokens need to be separated, like
‘knock’ ‘on’ singleDobj
:slightly_smiling_face:
You’ll also want
‘knock/knocking (on what)’ unless Lite is different there… And you probably don’t want an object-specific response under modify Thing?

2 Likes