static void msg_unparse_macro(dbref player, dbref what, dbref perms, char *name, int argc, argv_typ argv, char *rest, int maxchars) { const char *ptr; char *ptr2; char buf[BUFFER_LEN]; char buf2[BUFFER_LEN]; dbref obj; int i, p = 0; strcpy(buf, rest); sprintf(buf2, "_msgmacs/%s", name); obj = what; ptr = get_mfunc(name); if (!ptr || !*ptr) ptr = safegetprop_strict(player, OWNER(obj), perms, buf2); if (!ptr || !*ptr) ptr = safegetprop_limited(player, obj, OWNER(obj), perms, buf2); if (!ptr || !*ptr) ptr = safegetprop_strict(player, 0, perms, buf2); while (ptr && *ptr && p < (maxchars - 1)) { if (*ptr == '\\') { if (*(ptr+1) == 'r') { rest[p++] = '\r'; ptr++; ptr++; } else { rest[p++] = *(ptr++); rest[p++] = *(ptr++); } } else if (*ptr == MFUN_LEADCHAR) { if (*(ptr+1) == MFUN_ARGSTART && isdigit(*(ptr + 2)) && *(ptr + 3) == MFUN_ARGEND) { ptr++; ptr++; i = *(ptr++) - '1'; ptr++; if (i >= argc || i < 0) { ptr2 = NULL; } else { ptr2 = argv[i]; } while (ptr2 && *ptr2 && p < (maxchars - 1)) { rest[p++] = *(ptr2++); } } else { rest[p++] = *(ptr++); } } else { rest[p++] = *(ptr++); } } ptr2 = buf; while (ptr2 && *ptr2 && p < (maxchars - 1)) { rest[p++] = *(ptr2++); } rest[p] = '\0'; }
int msg_is_macro(dbref player, dbref what, dbref perms, const char *name) { const char *ptr; char buf2[BUFFER_LEN]; dbref obj; if (!*name) return 0; sprintf(buf2, "_msgmacs/%s", name); obj = what; ptr = get_mfunc(name); if (!ptr || !*ptr) ptr = safegetprop(player, OWNER(obj), perms, buf2); if (!ptr || !*ptr) ptr = safegetprop(player, obj, perms, buf2); if (!ptr || !*ptr) return 0; return 1; }
int msg_is_macro(dbref player, dbref what, dbref perms, const char *name, int mesgtyp) { const char *ptr; char buf2[BUFFER_LEN]; dbref obj; int blessed; if (!*name) return 0; snprintf(buf2, sizeof(buf2), "_msgmacs/%s", name); obj = what; ptr = get_mfunc(name); if (!ptr || !*ptr) ptr = safegetprop_strict(player, OWNER(obj), perms, buf2, mesgtyp, &blessed); if (!ptr || !*ptr) ptr = safegetprop_limited(player, obj, OWNER(obj), perms, buf2, mesgtyp, &blessed); if (!ptr || !*ptr) ptr = safegetprop_strict(player, 0, perms, buf2, mesgtyp, &blessed); if (!ptr || !*ptr) return 0; return 1; }