As an aside, this is probably not good style.
Understand "set [selector] [text]" as setting.
prevents the parser from matching anything other than the selector to a typed command in order to generate a setting action.
Consequently, Check setting something when the noun is not a selector: instead say "That doesn't have a setting.".
will never fire, because the parser will never generate an action that is setting something when the noun is not a selector
.
So you could just delete the redundant second line, and rely on the parser to allow only the selector to be set.
But this approach has drawbacks. For example, if there is a radio in the room and the player types ‘set radio channel 4’ the parser will confusingly respond ‘You can’t see any such thing’ because it can’t find anything nearby that matches the [selector] token.
What you generally want is to rely on the parser (and its limited ability to respond flexibly and appropriately to incorrect input) as little as possible, allow it to generate reasonable albeit ‘incorrect’ actions, then respond to those with your own Before
Instead
or Check
rules.
So, in this case, perhaps change your action declaration to:
Understand "set [something] [text]" as setting.
and leave your check rule in place to catch 'something’s that are not the selector, displaying a more nuanced response.
As a second aside, Inform already recognises the command ‘set’ but only as “set [something] to [topic]”, the action thus created being ‘setting it to’.
Consequently, as you’ve currently got things, if the player types ‘set selector to K’ this will generate the inbuilt ‘setting it to’ action, which by default does nothing except respond ‘No, you can’t set that to anything.’
Generally it’s better to make use of built in actions if you can rather than rolling your own- in this case just recode everything so that it applies to the existing ‘setting it to’ action.
There are some nuances to this. If you look under the Index tab then select under the Actions Index A1 Grouped, you will find the ‘Setting it to’ action listed under ’ Standard actions which always do nothing unless rules intervene’. Click on the little magnifying glass by ‘Setting it to’ and you’ll get to a summary of the existing action, including the following text:
Setting something to some text (past tense set it to): applying to one thing and one topic
The Standard Rules define this action in only a minimal way, blocking it with a check rule which stops it in all cases. It exists so that before or instead rules can be written to make it do interesting things in special cases. (Or to reconstruct the action as something more substantial, unlist the block rule and supply carry out and report rules, together perhaps with some further check rules.)
What we want to do is implement the last thing suggested, i.e. unlist (or disable) the existing block rule - (which produces the ‘No, you can’t set that to anything.’ response before aborting all setting it to actions). You can see from the list of rules controlling this action that the pesky blocking rule we need to be rid of is called the ‘block setting it to rule’. So we can either unlist it The block setting it to rule is not listed in any rulebook
or disable it The block setting it to rule does nothing
. Now we are free to impose our own rules on the setting it to action:
The block setting it to rule does nothing.
Understand "set [something] [text]" as setting it to.
Check setting when the noun is not a selector: instead say "That doesn't have a setting.".
Check setting when the current setting of the noun is the topic understood: instead say "It is already on that setting.".
Carry out setting:
now the current setting of the noun is the topic understood;
Report setting: say "The selector is now set to [current setting].".
Now ‘set selector K’ and ‘set selector to K’ will both work, generating the ‘setting it to’ action.
Note that when witing rules for ‘setting it to’ (or similar) you can write either ‘Check setting…’ or ‘Check setting something to…’ but not ‘Check setting something…’.
To avoid inadvertently writing actions or commands that clash with inbuilt actions, you can search in the Index under the Actions Index tab either for the action itself, or for the command word (in this case ‘set’) that initiates it under Index → Actions Index → Commands, which lists alphabetically all Inform’s understood command words- including any new ones your story has defined- and the actions they initiate.