Issues with ROL command

Started by Toimia, Mon 03/08/2015 00:13:36

Previous topic - Next topic

Toimia

Hi All,

I've been working on a text parser project and have run into an issue with the ROL command. In principal the text parser is working as intended, but not the way I want it.

Here is the current code:

GLOBAL Script
Code: ags
if (Parser.SaidUnknownWord()) 
  { 
    Display("Not recognized.", Parser.SaidUnknownWord()); 
  }
else 
 { 
   CallRoomScript(1); 
 }


ROOM Script
Code: ags

function on_call (int reason) {
if (Parser.Said("press rol")) {
    gParser.Visible = false; 
    cEgo.ChangeRoom(3);
  }
else 
{
    NoMatch(); //if none of above matched player's input, NoMatch() function is called.
}
  }


Currently it will only process "press" or "press rol" ONLY if the ROL part is a word in the text parser dictionary(press button etc).

If I swap the CallRoomScript and Display commands around it will work fine but ONLY if "press" has a word after it (E.G. "press rubber dingy rapids"). I have tried using an || operator for "press" and "press rol" but no luck. Same problem if I try to do it in a separate IF command.

I want the script set up so I can type "press (anything)" and it will run through the same command regardless of it being in the dictionary or not.

I am sure it's something simple I'm missing, but after spending several hours trying to debug this..I am struggling now.

Any thoughts appreciated! :)

Khris

Parser.SaidUnknownWord() will only return null if all words were recognized. That way you're counteracting the "rol".
You need to always call CallRoomScript(1), then check against available actions, then use Parser.SaidUnknownWord() (best in a global function).

Also note that Display first expects a string with insertion markers, then the variables to be inserted. To display the word you have to use:
Code: ags
  Display("Not recognized: %s", Parser.SaidUnknownWord());

SMF spam blocked by CleanTalk