#include "config.h" #include "mud.h" #include "match.h" #include "u.h" #include "y.tab.h" static int parseflg (char *fstr); static int parseflg (char *fstr) { int rv = 0; while (fstr && *fstr) { switch (*fstr++) { case 'U': rv |= MTCH_UNIQ; break; case 'F': rv |= MTCH_FRST; break; case 'R': rv |= MTCH_RAND; break; case 'N': rv |= MTCH_NONLOC; break; case 'M': rv |= MTCH_MEOK; break; case 'Q': rv |= MTCH_QUIET; break; case 'W': rv |= MTCH_WHICH; break; case 'E': rv |= MTCH_EXACT; break; } } return (rv); } int ub_mWHO (char *who, char *aswho, int ac, Nod * av[], Nod * retnode) { char oid[MAXOID]; if (av[0]->rv.t != STR) return (UERR_BADPARM); if (matchloggedinplayers (av[0]->rv.cv, oid) != MTCHRET_OK) return (UERR_NOMATCH); retnode->rv.cv = tmpstr (oid); retnode->rv.t = OID; return (UERR_NONE); } int ub_mobj (char *who, char *aswho, int ac, Nod * av[], Nod * retnode) { int flgs = MTCH_MEOK | MTCH_QUIET | MTCH_UNIQ; char oid[MAXOID]; if (ac < 1 || ac > 2 || av[0]->rv.t != STR) return (UERR_BADPARM); if (ac == 2) { if (av[1]->rv.t != STR) return (UERR_BADPARM); flgs = parseflg (av[1]->rv.cv); } if (matchobjects (who, av[0]->rv.cv, ut_loc (who), flgs, oid) != MTCHRET_OK) return (UERR_NOMATCH); retnode->rv.cv = tmpstr (oid); retnode->rv.t = OID; return (UERR_NONE); } int ub_mply (char *who, char *aswho, int ac, Nod * av[], Nod * retnode) { int flgs = MTCH_MEOK | MTCH_QUIET | MTCH_UNIQ; char oid[MAXOID]; if (ac < 1 || ac > 2 || av[0]->rv.t != STR) return (UERR_BADPARM); if (ac == 2) { if (av[1]->rv.t != STR) return (UERR_BADPARM); flgs = parseflg (av[1]->rv.cv); } if (matchplayers (who, av[0]->rv.cv, ut_loc (who), flgs, oid) != MTCHRET_OK) return (UERR_NOMATCH); retnode->rv.cv = tmpstr (oid); retnode->rv.t = OID; return (UERR_NONE); } int ub_mloc (char *who, char *aswho, int ac, Nod * av[], Nod * retnode) { int flgs = MTCH_MEOK | MTCH_QUIET | MTCH_UNIQ; char oid[MAXOID]; if (ac < 1 || ac > 2 || av[0]->rv.t != STR) return (UERR_BADPARM); if (ac == 2) { if (av[1]->rv.t != STR) return (UERR_BADPARM); flgs = parseflg (av[1]->rv.cv); } if (matchlocal (who, av[0]->rv.cv, ut_loc (who), flgs, oid) != MTCHRET_OK) return (UERR_NOMATCH); retnode->rv.cv = tmpstr (oid); retnode->rv.t = OID; return (UERR_NONE); } int ub_minv (char *who, char *aswho, int ac, Nod * av[], Nod * retnode) { int flgs = MTCH_MEOK | MTCH_QUIET | MTCH_UNIQ; char oid[MAXOID]; if (ac < 1 || ac > 2 || av[0]->rv.t != STR) return (UERR_BADPARM); if (ac == 2) { if (av[1]->rv.t != STR) return (UERR_BADPARM); flgs = parseflg (av[1]->rv.cv); } if (matchinv (who, av[0]->rv.cv, (int) ut_loc (who), flgs, oid) != MTCHRET_OK) return (UERR_NOMATCH); retnode->rv.cv = tmpstr (oid); retnode->rv.t = OID; return (UERR_NONE); }