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';
}
Beispiel #2
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;
}
Beispiel #3
0
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;
}