Parser error message

来自MudWiki

语法

   string parser_error_message(int type, object ob, mixed arg, int flag);

描述

   This apply is called by the to generate intelligent error messages in cases where rules have been "nearly matched". The parameters passed are the error code (defined in an parser_errors.h file packaged with FluffOS), the object concerned (if known), data about the error (dependent on the error code) and whether or not the error was a "plural" error or not (i.e. the error data represents more than one object).

   提示:这个方法应该放在MASTER_OB中。

示例

   string parser_error_message(int error, object ob, mixed arg, int plural)
   {
       switch (error)
       {
       case PARSE_NOT_HERE: /*  couldn't find a matching object */
           return "There is no " + arg + " here.\n";

       case PARSE_NOT_ALIVE: /* is_living() returned 0 for match for LIV token */
           if (plural)
               return "The " + pluralize(arg) + " are not alive.\n";
           else
               return "The " + arg + " isn't alive.\n";

       case PARSE_UNACCESSIBLE: /* inventory_accessible() returned 0 in container */
           if (plural)
               return "They are out of reach.\n";
           else
               return "It is out of your reach.\n";

       case PARSE_AMBIGUOUS: /* more than one object matched for a singular rule */
           return "Which of the " + query_multiple_short(arg) +
               " do you mean?\n";

       case PARSE_WRONG_NUMBER: /* not enough matching objects found */
           arg = -arg - 1;
           if (arg > 1)
               return "There are only " + query_num(arg) + " of them.\n";
           else
               return "There is only one of them.\n";

       case PARSE_ALLOCATED: /* no idea what this one is :) */
           return arg;

       case PARSE_NOT_FOUND: /* no matching object found */
           return "There is no " + arg + " here.\n";

       case PARSE_TOO_MANY: /* multiple objects matched for a singular rule? */
           return "You can only do that to one thing at a time.\n";
       }
   }